Software Quality
· 420 words · 3 minutes reading time English Software Engineering
Motivation
Quite often we experience in projects, where we are involved with, that software quality is treated either as a by-product or it is handled inappropriately.
The impacts can be manyfold:
- Higher development cost
- Higher engineering risks
- Lower stakeholder satisfaction
So, hold on for a moment and review the software quality terminology and common understanding in our industry.
Software Quality
Quality can be seen as a degree to which a certain thing in question meets requirements. That certain thing we are talking about is our beloved more or less tangible piece of software.
Our software is described by requirements. We differentiate functional requirements and non-functional requirements. The non-functional requirements are composed of Constraints and Software Quality Attributes.
%%{ init: {'theme': 'forest'} }%% flowchart fr[Functional Requirements] nfr[Non-functional Requirements] sqa[Software Quality Attributes] Requirements --> fr Requirements --> nfr nfr--> Constraints nfr --> sqa
Here it is:
The Software Quality Attributes are the set of requirements that specify the software quality.
Luckily there is an ISO standard around that helps us to structure the defuse set of software quality attributes. The ISO 25010:2011 defines a taxonomy of quality features. Those quality features can be used to categorize our Software Quality Attributes.
The real value of this taxonomy is revealed once you (as an architect) recognize, that you miss non-functional requirements or that they do not fit.
You need to talk to your stakeholders and make sure by having taxonomy at hand, that you do not miss a important software quality attribute.
Product Quality Taxonomy
(described in ISO 25010)
- Functional suitability
- Functional appropriateness
- Functional correctness
- Functional completeness
- Performance efficiency
- Time behavior
- Resource utilization
- Security
- Confidentiality
- Integrity
- Non-repudiation
- Accountability
- Authenticity
- Usability
- Appropriateness
- Recognisability
- Learnability
- Operability
- User error protection
- User interface aesthetics
- Accessibility
- Reliability
- Maturity
- Availability
- Fault tolerance
- Recoverability
- Maintainability
- Modularity
- Reusability
- Analysability
- Modifiability
- Testability
- Compatibility
- Co-existence
- Interoperability
- Portability
- Adaptability
- Installability
- Replaceability
Software Quality Attributes
You are almost happy if you have identified all the Software Quality Attributes. Almost, because there might be logical contradictions among them.
E.g. you need to implement fast analysis process to meet your response time requirements (performance type software quality attribute), it requires to optimize some algorithms, introduce caching, use some some GPU computing facilities. The software gets much more complex (maintainability type software quality attribute)
So what is the solution of this dilemma?
Discuss with your stakeholder the individual priorities of all your Software Quality Attributes. Those priorities allows you to implement the right compromises in case of contradicting software quality attributes.