This text reviews several important technologies for software development with a particular focuson Web applications. In reviewing these technologies I put emphasis on underlying principles and basic concepts, rather than meticulousness and completeness. In design and documentation, if conflict arises, clarity should be preferred to accuracy because, as will be seen below, the key problem of software development is having a functioning communication between the interestedhuman parties. Solving a problem by an effective abstraction and representation is a recurringtheme of software engineering. The particular technologies evolve or become obsolete, but theunderlying principles and concepts will likely resurface in new technologies. This text provides a background understanding, making it easier follow complete and detailed expositions of thesetechnologies that can be found elsewhere.
This text is designed for upper-division undergraduate and graduate courses in softwareengineering. This book intended primarily for learning, rather than reference. I also believe thatthe book’s focus on core concepts should be appealing to practitioners who are interested in the“whys” behind the software engineering tools and techniques that are commonly encountered. Iassume that the readers will have some familiarity with programming languages and do not cover any programming language in particular. Basic knowledge of discrete mathematics and statisticsis desirable for some advanced topics, particularly in Chapters 3 and 4. Most concepts do notrequire mathematical sophistication beyond a first undergraduate course.
Approach and Organization
The text is intended to accompany a semester-long hands-on team project in softwareengineering. In the spirit of agile methods, the project consists of two iterations, both focusedaround the same software product. The first iteration is exploratory and represents the firstattempt at developing the proposed software product. This usually means developing some keyfunctions and sizing the effort to set more realistic goals in the second iteration. In the seconditeration the students should perform the necessary adjustments, based on what they learned in thefirst iteration. I tried to make every chapter self-contained, so that entire chapters can be skippedif necessary. The text follows this outline.Chapter 2 introduces object-oriented software engineering. It is short enough to be covered in afew weeks, yet it provides sufficient knowledge for students to start working on the first iterationof their software product. In general, this knowledge may be sufficient for amateur softwaredevelopment, on relatively small and non-mission-critical projects.