Some techniques that can help you minimize the impacts of defects are as follows:
Quality Assurance: Quality Assurance techniques are designed to ensure that the processes employed are adequate to produce the desired result and that the process is being followed.
Training and Education (work force): It goes without saying that the better trained a work force is, the higher the quality of its work. Many defects are simply the result of workers not understanding how to do their job. Computer technology is significantly more complex today than it was just a few years ago. Moreover, the complexity will increase significantly in the coming years. Thus, it appears that the training needs at most organizations will increase sharply in the coming years.
Training and Education (customers): As more and more people use computers, and as the complexity of systems grows, the problem of training the end user will become more and more acute. Unlike the problem of training workers, more creative strategies will be required to train customers -- especially when customers are not technically sophisticated. One computer manufacturer reported that a customer when asked to send in a copy of a floppy disk, sent in a Xerox copy. In another instance, a customer complained that a floppy disk would not go into the drive. It was later determined that the customer did not realize that he had to remove the floppy that was already in the drive, before another could be inserted. While these anecdotes are extreme, the problem of effectively training even sophisticated customers to use complex software is far from trivial. Many software vendors have recognized this problem and developed strategies to address it (more elaborate HELP facilities, cue cards, audio training tapes delivered with the product, tutorials, etc.)
Methodology and Standards: As W. Edwards Deming emphasizes, reducing variation is key to ensuring quality [Dem91]. As the nature of a process becomes understood, it evolves from art to science. At some point in this evolution, it becomes appropriate to standardize the process. This has occurred in the past with the development of standard life cycles, design approaches, etc. This is occurring today with many diverse efforts -- various IEEE standards, ISO 9000, etc. As the root cause of defects become understood, consideration should be given to developing or enhancing an organization's methodology and standards to produce a repeatable process that prevents the defects from re-occurring.
Defensive Design: While there are many variations of defensive design, the concept generally refers to designing the system so that two or more independent parts of the system must fail before a failure could occur. As technology gets more and more complicated, there should be significantly more emphasis on designing systems defensively to prevent, discover, and minimize the impact of defects. While some organizations have been doing this for years, it is a new concept to many organizations and the industry provides very little guidance on how to do it. Design techniques to improve reliability should receive more attention as the complexity of technology grows. These techniques usually involve designing the system so that two components of the system must be in error before a mayor system problem can occur. Nancy Levinson and Clark Turner provide a very insightful case study of a system that should have been designed more defensively [Lev93].
Defensive Code: The concept of designing a program to prevent, discover, and minimize the impact of defects is not new. It is however not widely practiced. Like defensive design, the concept of defensive code involves adding code to a program so that two parts of the program must fail before a major problem can occur. One form of defensive code, assertions, has been around for many years, but has received relatively little attention. An assertion is code that tests for expected conditions and brings unexpected conditions to the attention of the programmer or users. This area too deserves to receive more attention as the complexity of technology grows. Chapter 2 of Writing Solid Code [ MAG93] and the work of A. Shanker [ SHA93] discuss the concept of assertions in more detail.
The best defect prevention techniques will be the ones that reduce the expected impact the most. This, in turn, will be a function of the nature of the risks and systems within an organization. Very critical software (e.g., NASA's space shuttle software, health care equipment) and widely distributed software (e.g., Microsoft Windows) may need to use all of the above techniques and more to adequately reduce the overall risk of highly critical software.
|