Comparing software engineering to other branches of engineering, in which physical laws have been shown to apply, has been a source of controversy since the term was coined at a North Atlantic Treaty Organization (NATO) conference in 1968. In the introduction to this book, Rombach focuses on the necessity of a set of laws for software engineering. He introduces the notion of cognitive laws and offers a particular formulation for the idea that involves aspects of quality, productivity, and time as a function of software artifacts (in other words, code, documentation, and similar objects related to a particular software product). He discusses software engineering as a discipline, empirical models, potential benefits for the discipline, and future challenges, with a basic list of references, most of which can be considered dated.
Part 1, containing seven chapters on notation, architecture, and process in software development, follows the introduction. Broy discusses key tasks in requirements engineering for domain modeling and engineering. Ghezzi et al. discuss verification in agile processes and a possible approach. Heitmeyer et al. discuss model-based software development and propose a formal model-based development method (FMBD). Rausch et al. introduce the subject of complex software ecosystems, including a methodology for their development, followed by a discussion of cyber-physical systems by Trapp et al. Part 1 concludes with two essays, “Modeling Complex Information Systems” and “Continuous Process Improvement,” by Doerr and Heidrich, respectively, which present results from exploratory studies and a measurement framework developed at the Fraunhofer Institute for Experimental Software Engineering.
Part 2 presents chapters on empirical research and studies. I especially liked the first chapter, “Paths to Software Engineering Evidence,” by Jeffery, which discusses the difficulties of evaluating the usefulness of the empirical approach for businesses. He offers a model to guide this evaluation. Wohlin presents an evidence profile for software engineering, reinforcing the notion of evidence in empirical software engineering. Dieste and Juristo stress the “Challenges of Evaluating the Quality of Software Engineering Experiments.” The chapter by Shull et al. reintroduces “technical debt,” a term coined in 1992, which they characterize as “the invisible results of past decisions about software that negatively affect its future.” The remaining chapters, by Reussner et al., Zeller, and Jedlitschka et al., continue the thread of empirical methods and practice in software engineering.
The last part includes heavyweight chapters by Osterweil, Basili, Weiss et al., Boehm, Jackson, and Zelkowitz: “What Is Software?,” “A Personal Perspective on the Evolution of Empirical Software Engineering,” “Moving Toward Evidence-Based Software Production,” “Skating to Where the Puck Is Going,” “Formalism and Intuition in Software Engineering,” and “Education of Software Engineers.” The final chapter, “Integrated Software Process and Product Lines,” is by Rombach, to whom the book is dedicated. These subjects are dear to the hearts of many software academics and professionals. I found Boehm’s “Puck” chapter the most valuable.
A note about the book: while each chapter includes its own reference list, some concepts appear in multiple chapters. I would have preferred to see an index of key concepts or keywords in context, even though it would add appreciably to the size of the book.
This is a valuable contribution to the software engineering literature. If you read one chapter per day in this outstanding book, it will take you three weeks to get through it. But whether you are a young software engineer or a seasoned software academic, this would be a worthwhile investment.
More reviews about this item: Amazon