The Software-Quality Landscape
Characteristics of software quality
Extenal chracteristics that a user is aware of:
1. Correctness. The degree of which a system is free from faults in its specification, design and implementation.
2. Usability. The ease with which users can learn and use a system.
3. Eficiency. Minimal use of system resoure, including memeory and execution time.
4. Reliability. The ability of a system to perform its required functions under stated conditions whenever required--having a long mean time between failures.
5. Integrity. The degree to which a system prevents unauthorized or improper access to its programs and its data.
6. Adaptability. The extent to which a system can be used, without modification, in applications or environment other than those for which it was specification designed.
7. Accuracy. The degree to which a system, as built, is free from error, especially with respect to quantitative outputs. Accuracy differs from correctness; it is a determination of how well a system does the job it's built for rather than whether it was built correctly.
8. Robustness. The degree to which a system continues to function in the presence of invalid input or stressful environmental conditions.
Internal characteristics that a programmer is aware of:
1. Maintainability. The ease with which you can modify a software system to change or add capabilities, improve performance, or correct defects.
2. Flexibility. The extent to which you can modify a system for uses or environments other than those for which it was specifically designed.
3. Portability. The ease with which you can modify a system to operate in an environment different from that for which it was specifically designed.
4. Reusability. The extent to which and the ease with which you can use parts of a system in other systems.
5. Readability. The ease with which you can read and understand the source code of a system, especially at the detailed-statement level.
6. Testability. The degree to which you can unit-test and system-test a sytem; the degree to which you can verify that the system meets its requirements.
7. Understandability. The ease with which you can comprehend a system at both the system-organizational and detailed-statement level.
Techiniques for improving software quality
1. Set explicit quality objectives from among the external and internal characteristics.
2. Exlicit quality-asurance activity. One common problem in assuring quality is that quality is perceived as a secondary goal. Making the quality-assurances acitvity indepent makes the priority clear.
3. Testing strategy.
4. Software-enginerring guidelines.
5. Informal technical reviews.
6. Formal technical reviews.
7. External audits.
8. Development process.
9. Change-control procedures. One big obstacle to achieving software quality is uncontrolled changes.
10. Measurement of results. Unless results of a quality-assurance plan are measured. you'll have no way of knowing whether the plan is working.
11. Prototyping. Prototyping is the development of realistic models of a system's key functions