Software Quality Characteristics
Building high-quality software is hard. Anyone with basic programming skills can write a few macros or scripts. But building complex production-grade software that is actually maintainable in the long run? Quite a different story.
This post will give an overview of quality criteria by asking questions. As usual, I am talking about my personal knowledge and experience. While there is some overlap with existing quality definitions, my listing is not intended as a replacement.
First, let’s establish two assumptions:
- We assume that functional requirements are fully accounted for. In previous posts, we already talked about the importance of understanding business needs. Hence, we exclude it here.
- Quality requirements vary between software systems and industries. While some criteria may be critical in some domains, others can be less important. Of course, aerospace software has different quality priorities than your next favorite video game.
Now, we can ask ourselves important questions about software quality:
Reliability
- Is the software reasonably stable or crashing frequently?
- How frequently are users experiencing bugs?
- Are bugs mostly minor inconveniences or sources of real damage?
Usability
- How intuitive is the user interface (UI) for users? Easy going? Lots of trial and error? Not able to work at all?
- How intuitive is the application programming interface (API) for developers integrating the software?
- How intuitive is the setup, configuration and maintenance process for administrators?
Security
- Is authentication and authorization handled in a robust way?
- Are security standards like cryptographic functions and third-party dependencies up-to-date? Are there any known security vulnerabilities?
- Were architecture design and implementation conducted with security best practices in mind?
Documentation
- Can users find solid help inside the application or in a manual?
- Is there sufficient documentation for administrators about setup and maintenance?
- Can developers look up architecture decisions, API usage and important implementation hints?
Efficiency
- Are the chosen algorithms and data structures suitable for the given use cases?
- How many resources are needed for running and scaling, e.g. CPU, memory, disk?
- How scalable is the software? Can I scale by adding more resources or running multiple instances? How hard is it?
Maintainability
- How long does it take for new developers to get an overview of the code base? Are size, complexity and readability reasonably good?
- How long does it take for developers to make a small change to the code base? Is there sufficient test coverage to get reliable feedback?
- How hard is the release and rollout process? Are there solid CI/CD processes in place? How much of the release process is automated?
Your own experience may differ from my listing, though. Is there anything you would change or add to the above list?
#SoftwareEngineering #SoftwareQuality #Reliability #Usability #Maintainability