in the transition of raw ideas into software products that provide intelligence to computers. Producing software does not require a traditional rigid production line-one of machines making machines-but necessitates a sophisticated and flexible framework capable of adapting to the many variances encountered from one piece of software to the next. In software, intelligence creating intelligent tools is, in and of itself, a production process.
The industry lost many years of productivity believing that there is no way to produce software in the same way other durable goods are manufactured. But with the innovation of various software development processes (such as waterfall and iterative methods) and with the introduction of certain quality control methods (such as ISO 9001 and SEI CMM certification), many in the industry began believing in the possibility of developing software in a controlled production process. Still, the problems with these approaches are threefold: 1) they are costly to implement, 2) they create vast amounts of documentation to simply certify that a company follows a written procedure for writing software, and 3) they require enormous amounts of human labor to maintain and verify. Even so, the processes do not guarantee that the end product is error free, but only that the human elements involved in the process are regulated in the hopes of reducing inefficiency. Thus, the "benefits" of development certification are only lost time and money wasted.
But these certification processes do point to the solution despite their bureaucratic shell. SEI CMM Level 5, the highest level of certification possible in that model, maintains that error prevention is the pinnacle of the software development process. I believe that this is backwards: Error prevention-the processes and practices of preventing bugs before they occur-must be the foundation of any development process rather than the pinnacle. Without error prevention (more specifically, without automatic error prevention), bugs can increase to the point that a project is so overburdened that it must be completely overhauled or abandoned altogether.
Elements of Error Prevention
The methodology of error prevention encompasses each of the software development techniques pictured below in figure 1. The techniques are equally important, and each of them will fit well in any development process. The more techniques implemented in a project, the closer that project will come to achieving a comprehensive and coherent error prevention program.
Figure 1. Error prevention comprises many software development techniques
But manually implementing these software development techniques does little to ensure their effectiveness. You see, a great chasm exists between simply pointing at key requirements, as many certification processes do, and actually implementing them as a coherent solution. What's more, certain development methodologies (unit testing, for example) require a great deal of manual labor to implement. For the software industry, automatic error prevention can reduce nnecessary labor and simultaneously incorporate error prevention within a number of development methodologies. The automation of error prevention can solve the problem of quality in the software industry.
Effectively automating error prevention techniques, however, is no easy task. Software testing is not the same thing as running microchips or toasters through a preprogrammed tester at a certain point on an assembly line. Because each software product created is different, automatic error prevention tools in the software industry must be more sophisticated than their traditional production line counterparts. Effective automatic error prevention tools must adapt to any number of test subjects, and to be truly automatic, they must do so without human intervention. To achieve such versatility and automation, automatic error prevention tools must be able to recognize just what they are testing and to determine how to carry out the test.