Read an Excerpt
PREFACE: We must not promise what we ought not, lest we be called on to perform what we cannot. -Attributed to Abraham Lincoln, speech delivered before the first Republican convention of Illinois, May 29, 1856, The Writings of Abraham Lincoln, ed. Arthur B. Lapsley, vol. 2, p. 249 (1905).
Software process is this book's focus. Processes examined include (1) project planning (2) software systems development, and (3) change control. We show you how to achieve effective communication between software customers and software developers. We show you how to measure software processes and the products they yield. We show you how to use measurements to improve processes and products. We show you how to implement processes by examining organizational cultural change factors. We show you how to plan pr ocess improvement so that you can bring about organizational cultural change. This book features the following:
- Approximately 240 figures to help you quickly assimilate ideas and their relationships
- A list of key ideas (called "nuggets") at the outset of each chapter (except the first) to help you work your way through the chapter and organize what you want to take from the chapter
- Process diagrams that you can easily adapt to your environment
- Annotated outlines to help you overcome the blank-page syndrome in committing your processes to writing.
We wrote this book because the software industry is struggling to find ways to achieve consistent success. In particular, we wrote this book to help software systems developers achieve consistency in turning out systems that do what they are supposed to do-ontime and within budget. And we wrote this book to help software systems buyers and users get systems that do what they are supposed to do-on time and within budget.
This book is for software practitioners. People are still the most important part of the equation for successful software development projects. As competition continues to increase and budgets continue to shrink, practitioners need to continue improving their skill sets. This book contains practical guidance for building good software systems consistently. Simply stated, our definition of a "good" software system is one that does what it is supposed to do and is delivered on time and within budget. Successf ul software systems development in this book means "consistently building good software systems." You are a software practitioner if you perform one or more of the following activities:
- Develop computer code, software-related products such as specification documents, databases, user's manuals, and test documents.
- Directly manage people who do the preceding.
- Manage the preceding managers.
- Buy/use products from the preceding.
A practitioner can be new to the software game or can be a veteran. The newcomer will want to study and apply what is said; the veteran will want to adapt what is said. There is no one way to build software systems. If there were, software systems development would have been reduced to an assembly-line process long ago. However, we believe there are fundamental engineering and process principles whose application can increase the likelihood that software systems development projects will be successful. This book highlights and illustrates these principles so that you can apply them to your way of contracting for and/or building software systems.
This book stresses achieving consistent software development results. It helps the practitioner build a mature software systems development process so that consistently good systems are a natural outcome. As we explain, achieving maturity is more than a matter of defining engineering practices. Raising the maturity of your software systems development process is also an exercise in bringing about organizational cultural change. For example, if you are using the Software Engineering Institute's various capab ility maturity models to foster software development consistency in your organization, this book will help you institutionalize your processes. Similarly, if you are trying to gain, or maintain, ISO 9001 certification, this book can help you. Whatever your approach, this book can help you consistently achieve effective software systems development.
Figure P-1 captures the book's essence-cultivating successful software systems development. This book helps you acquire a green thumb for this cultivation exercise. If your organization has been in the software business for some time, we offer you guidance for nurturing what you have to achieve consistent success. If your organization is just getting started in the software business, we provide you with the tools and materials to grow your organization into one that consistently achieves software success. I f you are a software customer, we provide you with the means to nourish the client/developer environment so that it breeds software success. Just as growing crops is subject to many perils (such as bad weather, insects, and uncertain seed quality), so too is software systems development (e.g., unanticipated change, requirements creep, and miscommunication). Our objective is to help you anticipate these perils so that you consistently produce the software equivalent of good crops.
The book has the following eight chapters.
1. Motivation, whose purpose is to convince you that the rest of the book is worth reading.
2. Project Planning Process, whose purpose is to provide you with practical guidance for effectively planning software systems development work.
3. Software Systems Development Process, whose purpose is to (1) define principles for putting together a software systems development process that breeds success and (2) illustrate these principles by defining a top-level process that you can use to formulate a process for your environment.
4. Change Control Process, whose purpose is to define change control board (CCB) mechanics and provide you with practical guidance for setting up a CCB for your software systems development process.
5. Product and Process Reviews, whose purpose is to describe basic processes associated with the various reviews called out in Chapter 3 as a means for reducing software systems development risk.
6. Measurement, whose purpose is to provide you with practical guidance for measuring the "goodness" of products and the "goodness" of the software systems development process that produced the products; the focus is on how to use measurement to achieve consistent product and process "goodness."
7. Cultural Change, whose purpose is to address human issues bearing on bringing about organizational cultural change during implementation of your systems engineering environment (SEE).
8. Process Improvement Planning, whose purpose is to provide practical guidance on how to write an SEE implementation plan to establish the framework for doing the things discussed in the preceding chapters.
Table P-1 highlights what you will learn from each chapter. To help you extract each chapter's messages and subsequently apply its concepts, we condense each chapter's key points (except Chapter 1) into what we label "nuggets." In general, the material is organized to help you extract what you need. The book's approximately 240 figures aim at highlighting essential points. In these figures, we communicate ideas through icons to facilitate information retrieval and assimilation.
We also include worked-out examples containing sufficient detail so that you can adapt the concepts illustrated to your organization. For instance, in Chapter 6, we address measurement. We focus on two metrics that we call "product integrity index" and "process integrity index." We give general formulas for these indexes. We show you how to set up value scales for these indexes in terms that make sense to your organization. Through detailed, worked-out examples, we show you how to calculate these indexes. F inally, we explain what these numbers mean.
At the end of the book, we include an annotated bibliography. Most of the bibliographic entries have been selected because of their practitioner bent. This bibliography is intended to (1) point you to alternative treatments of topics that we discuss, (2) help you gain greater insight into topics that we address, and (3) help you pursue topics that we only touch upon that may be of greater interest to you.
The book's central concept for housing an organization's development processes is the systems engineering environment (SEE). The SEE consists of the following two complementary components:
- An application development process environment (ADPE) and
- An application development technology environment (ADTE).
The ADPE is that set of policies, guidelines, procedures, and standards defining an organization's way of doing business. These entities we call "ADPE elements." The ADTE is that set of technologies (e.g., personal computers, networks, CASE tools) used to develop the organization's software products and software-related products. The book focuses on the ADPE because its elements define the software systems development process. We show you how to capture successful software development concepts in a handful of these elements. We also give you practical guidance for taking the words in these elements and infusing them into your organization. This infusion is perhaps the most challenging aspect of maturing your organization's software systems development capability-because change is mostly emotional, not cognitive.
We stress that this book is not tied to the use of any particular software systems development technology. You will find this book helpful whether you are using object-oriented technology, automated tools, prototyping, or some combination of these and other technologies.
Please join us now by turning to Chapter 1.