In consulting (and other environments), you often hear the adage:
You can have it fast, cheap or good. Pick 2.
We offer a quality service to our customers and don't like to compromise on quality. But if you are not a software developer how can you spot good or bad software? How do you know if someone can provide quality software?
As we aim to provide high-quality software-based solutions, I've been giving this question some thought.
What is Software Quality?
Quality software is software that meets your needs and expectations. That definition is pretty straightforward.
However, it seems like software often fails to hit the mark. There is a feeling that software is too complicated or too unreliable more often than not.
That is because expectations are the hard bit. Needs are often quite easy to define and understand. But everyone has expectations that they think are too obvious to tell developers or don't even realise they have them.
To help consider all needs and expectations we can break down software quality into a few components.
Components of Software Quality
We are not the first to consider these. In fact, there is a standard (ISO 25010) that breaks these down into great detail.
In this section, we have picked the 6 that we have found to be the most important and tried to simplify them. Each table below describes what that factor means, why it is important, what you might notice in good and bad cases, and finally, some of the common practices that you can look for that tend to result in good outcomes.
The areas we have included are:
- Correctness
- Usability
- Robustness
- Maintainability
- Performance
- Security
Each project will have their priorities within these (each one has costs associated and conflicts with others), but this order is intended to be the order of importance in a typical measurement application.
1. Correctness
What Is Correctness | Correctness is a term that encompasses a few requirements:
|
Why Is This Important | This is important to make sure you get what you need from the software. It improves your engineering rather than getting in the way. |
Good Looks Like... | The software helps you complete your work. Software flaws are not causing your users to have to do any rework or additional work. |
Bad Looks Like... | In addition to the software, users have to take extra steps to complete their work due to missing functions or bugs in the software. Users are frustrated because it gets in their way. |
Practices That Improve This |
|
2.Usability
What Is Usability | This is the famous "it should be easy to use". It is tough to define, but we tend to consider three key criteria:
|
Why Is This Important | This is all about reducing human error due to poor design and increasing user efficiency. |
Good Looks Like... | The software feels natural in the context it is used. Users should find it "gets out of their way" and helps them to achieve their primary task. |
Bad Looks Like... | The software feels awkward to use. There is a higher rate of errors in the process due to operator error or tasks will take longer than you would expect. |
Practices That Improve This |
|
3. Robustness
What Is Robustness | Robustness means it doesn't only work in the perfect circumstances, or in the first year. |
Why Is This Important | Similar to Correctness, you need this software to maximise your success, so you want it to work consistently. |
Good Looks Like... | You trust that the software will work each time you use it. |
Bad Looks Like... | You have to account for the probability that the software will fail you during the work. That may involve retesting, or extra steps to check the validity. |
Practices That Improve This |
|
4. Maintainability
What Is Maintainability | Maintainability is all about how easy the software is to change. Change doesn't necessarily mean adding new features but being able to turn around bug fixes quickly as well. |
Why Is This Important | There are a few reasons why maintainability is a concern, even though it doesn't directly impact the user of the software.
|
Good Looks Like... | When you request a new feature or report a new bug, the changes are completed quickly without any additional issues being added. |
Bad Looks Like... | It seems like for every change you request, two more are needed to fix other issues. |
Practices That Improve This |
|
5. Performance
What Is Performance | The performance is the measure of the size and speed of the application. Good performance means that the software completes its tasks in a reasonable time on reasonably specified hardware. Optimisation is a balancing act. Performance can always be improved but at a cost. It is about finding the balance for the particular application. |
Why Is This Important | Computers are cheap, people are expensive. You don't want to waste your engineers time waiting around for the software to complete what it is doing. |
Good Looks Like... | The software runs on standard hardware, and your engineers don't have to wait around for it. |
Bad Looks Like... | Your engineers are taking coffee breaks because they know the software will make them wait 15 minutes before they can carry on. Or for a simple application, you need a supercomputer to run it. |
Practices That Improve This |
|
6. Security
What Is Security | Application and system security is in the headlines more and more. Secure software is designed to avoid key risks of outside interference in the application. Like performance, this is a balancing act. Secure software costs more to develop and is less usable, so this must be balanced with other factors. |
Why Is This Important | There are two key concerns in engineering software:
|
Good Looks Like... | Your systems are running as expected. |
Bad Looks Like... | Your test systems get infected with malware causing affecting system throughput. |
Practices That Improve This |
|
Conclusion
So I appreciate that is a lot of information. Hopefully it made sense, so what next:
- If you are starting a new project. Talk to your team about some of these practices and others that they use.
- If you think you have a quality problem in an existing project, identify why and start putting things in place to improve the quality.
Of course, you can reach out to us if you want to discuss these issues with us directly and we can see how we can help you.