In a nontechnical style, this book shows managers how to organize software projects effectively so they are objectively measurable. The book prescribes techniques for making and updating accurate projections of time and cost to deliver. DeMarco provides a number of helpful methods to forecast the costs of future software projects and to track a project's progress with respect to its estimates.
Review By: Harmon Avera, Jr. 07/14/2003The book is divided into four major sections and several appendices. The first section describes what it means to "control" a software project. DeMarco stresses the importance of measurement in providing control, and enumerates several problems with estimating in current software projects. He presents a solution that separates the estimating function (and team members) from the developers, creating separate incentives and success measures for each group. He shows how to use this division to accurately project software costs, including the cost of measurement.
System Models and System Metrics discusses models and their associated metrics for different phases of a project. The author makes a distinction between modeling the problem (specification), modeling the solution (design), implementation, and modeling the development process (project planning). DeMarco takes pains to point out both the technical and political issues involved with these various models and their measurements. Software development costs money.
The third section, Cost Models, discusses projecting and measuring resource use. It focuses on single-factor cost models, how to plan for and implement successful manpower loading over a project's lifetime, and using the metrics group to develop successful cost models.
The final section presents a quantifiable view of Software Quality. After discussing software quality-control, DeMarco presents some ideas on improving software quality, with a final chapter on zero-defect software development.
The appendices include a sample set of models, his notational conventions for specification and design models, a statistics primer, and a sample program to compute code volume. The book quickly drew me in, and was fun and easy to read, with many diagrams.
DeMarco's main point is that project control requires measurement, and the book is full of metrics that can be used in all project phases. Software quality is measured by "spoilage"– the wasted effort and cost during testing and maintenance. He provides measures to prevent spoilage and details methods for defect abstinence, rather than defect removal. Naturally, a "classic" book like this has its share of memorable moments. My favorites are:
Software systems can be completely and accurately specified and modeled "up-front," then given to the "coders" to implement. "Coder" output should be inspected, but un-compiled code and compile errors counted as defects!
There should be an entirely separate "metrics" group, outside of specific projects, measured on how good their project estimates are compared to how they actually turn out.
Twenty years after being published, many of the problems discussed by DeMarco still plague the software industry, and his solutions remain insightful, applicable, and relevant. I guess that’s a pretty good definition of "classic."