This book reviews important technologies for software development with a particular focus onWeb 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 precision because, as will be described, the key problem of software development is having a functioning communication between the involvedhuman 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 background understanding, making it easier to follow complete and detailed expositions of current technologies that can be found elsewhere.
This book is designed for upper-division undergraduate and graduate courses in softwareengineering. It intended primarily for learning, rather than reference. I also believe that the book’sfocus 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. I assumethat the readers will have some familiarity with programming languages and I do not cover any programming language in particular. Basic knowledge of discrete mathematics and statistics isdesirable 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 first part (Chapters 1–5) is intended to accompany a semester-long hands-on team project insoftware engineering. In the spirit of agile methods, the project consists of two iterations, bothfocused around the same software product. The first iteration is exploratory and represents thefirst attempt at developing the proposed software product. This usually means developing somekey functions 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 have learnedin the first iteration.The second part (Chapters 6–8 and most Appendices) is intended for a semester-long course onsoftware engineering of Web applications. It also assumes a hands-on student team project. Thefocus is on the server-side of Web applications and communication between clients and servers. Iomitted the user interface design issues because I feel that proper treatment of this topic requires a book on its own. I tried to make every chapter self-contained, so that entire chapters can beskipped if necessary. The text follows this outline.