Programmers care about the internal characteristics of the software as well as the external ones:
- Maintainability: The ease with which you can modify a software system to change or add capabilities, improve performance, or correct defects.
- Flexibility: The extent to which you can modify a system for uses or environments other than those for which it was specifically designed.
- Portability: The ease with which you can modify a system to operate in an environment different from that for which it was specifically designed.
- Reusability: The extent to which and the ease with which you can use parts of a system in other systems.
- Readability: The ease with which you can read and understand the source code of a system, especially at the detailed-statement level.
- Testability: The degree to which you can unit-test and system-test a system; the degree to which you can verify that the system meets its requirements.
- Understandability: The ease with which you can comprehend a system at both the system-organizational and detailed-statement levels. Understandability has to do with the coherence of the system at a more general level than readability does.