This book is a hands-on introduction to basic disciplines of software engineering. Designed as a workbook companion to any introductory programming or software engineering text, Humphrey provides the practical means to integrate his highly regarded Personal Software Process (PSP) into college and university curricula.
Applying the book's exercises to their course assignments, students learn both to manage their time effectively and to monitor the quality of their work. The book is supported by its own electronic supplement, which includes spreadsheets for data entry and analysis. A complete instructor's package is also available.
By mastering PSP techniques early in their studies, students can avoid--or overcome--the popular "hacker" ethic that leads to so many bad habits. Employers will appreciate new hires prepared to do competent professional work without expensive retraining or additional years of experience.
Review By: Dale Perry
The book is oriented towards teaching the general principles of the Personal Software Process (PSP) as part of a college freshman's Computer Science degree. The book provides an introduction to the basic structure and motivations of the PSP and the purposes behind the PSP process.
The book is exactly what it claims to be, an introduction to the PSP process. For a college freshman this book will provide some good guidance to beginning software engineers, especially with techniques for estimating and managing development tasks and allocating time for those tasks. But many of the techniques seemed rather dated in that they use a large number of complex, manual forms. For a book written at this date and time I would have expected more emphasis on the use of tools (such as spreadsheets, word macros, etc.) to better enable the practitioner to use the gathered information.
The book had two general weaknesses in my view. I believe that the focus on Lines of Code (LOC) as the basis for many of the time and tasks estimates was questionable. LOC as a metric in general (in my view) is an inappropriate metric as it does not account for the complexities of the programs in question; and, depending on the language, the measure can have significantly different meanings (e.g. in COBOL I can have a single construct/function take several lines of code whereas in "C" I can have several constructs/functions on a single line). Secondly, there was limited focus on test tasks other than basic unit testing, and no reference was made to the need to estimate for "regression" testing at the unit or integration/build levels. The main focus was on defect identification and removal, not on proper test-case design and test-task estimation. Other than these limitations the book contains good techniques for beginning developers.
For testers or advanced developers, the book offers very little, especially if you already have some idea of time management and estimation. The book offers virtually nothing of value for those dedicated to testing or general Quality Assurance--it primarily addresses itself to developers.