According to ISO9126, software should maintain 6 characteristics in term of quality. The 6 characteristics are functionality, reliability, usability, efficiency, maintainability, and portability.
The software should have clear functions, and even when the software becomes larger and more complicated (i.e. has more functions), its functions should be easy definable.
In cascade, to maintain higher quality functionality, we should maintain 5 sub-characteristics, which are suitability, accurateness, interoperability, compliance, and security.
Suitability studies the match between a function and it business specification, while accurateness cares about providing correct results. Interoperability is about how harmony a function works with other dependencies or dependents, and compliance studies the rules and laws a function should be compliant with (when applicable), and finally the security is about prohibiting unauthorized access to software functions.
A functional software is not enough to be of a good quality if it cannot provide the service under all conditions. The longer a software goes off, a lower quality it is. Again, reliability is measured by measuring 3 sub-characteristics: maturity which is how frequent the software fails to provide the functionality, fault tolerance which is the ability of the software to recover its functionality after a failure, and recoverability which is about the ability to recover the data after a failure.
Specifies how suitable a software is for the targeted audience. If the user cannot learn or use the software, then it is useless. Software usability is measured in the light of its understandability (is it understandable), learnability (what is the experience level of the user), and operability (after it is learnt, can the user easily operate it?).
It is about the required cost to use the system. The cost measured against the resources needed (i.e. RAM, disk, CPU, …). Two software has the same quality measures for the previous characteristics, can be differed by the resources needed by everyone. The time behavior characterizes the response time (transactions rate), and resource behavior characterizes the resources used (RAM, CPU, …).
Identify how easy/hard it is to figure out a bug and fix it. It is calculated by calculating the analyzability (how hard is it to debug and analyze the problem), the changeability (how does it cost to change something), the stability (how sensitive a change can be for other modules/functions), and the testability (how hard is it to test and verify the change).
It defines the ability of a software to run in different environment and platforms, e.g. the dependencies, libraries, specifications … etc. Adaptability measures the ability of the software to adapt new changes in the operating environment after installed, while installability specifies the ability to install it in a new environment. Replicability is about how open a software is, so, by replacing a dependency by another compatible one, what problems would arise. Finally, conformance of a software is about how standard-compliance is it, than following specific product’s conventions and standards.