Developing methods that can produce high-quality software is another fundamental goal of software engineering. We can view quality of a software product as having three dimensions:
1- Product operation:
Correctness is the extent to which a program satisfies its specifications.
Reliability is the property that defines how well the software meets its requirements.
Efficiency is a factor relating to all issues in the execution of software; it includes considerations such as response time, memory requirement, and throughput.
Usability, or the effort required locating and fixing errors in operating programs.
2- Product transition:
Portability is the effort required to transfer the software from one configuration to another.
Reusability is the extent to which parts of the software can be reused in other related applications.
3- Product revision:
Maintainability is the effort required to maintain the system in order to check the quality.
Testability is the effort required to test to ensure that the system or a module performs its intended function.
Flexibility is the effort required to modify an operational program.