Originally published by Robert Beisert at fortcollinsprogram.robert-beisert.com

CS 101 – Measuring Quality

“Quality” often looks like a buzzword to programmers and users. What is quality, we wonder, and how can we honestly know whether a product is quality? We have three measures in the software world for quality: operability, maintainability, and transferability.

Operability

Operability refers to how the system operates (kind of self-explanatory). While there are many subjective aspects to operability, there are a few measurable aspects as well.

  • Accuracy – time to fail, bugs per thousand lines of code, number of change requests, correctness of results
  • Efficiency – usually this is time to result and/or user response time
  • Reliability – A combination of other factors such as time to fail and downtime
  • Security – the factors which protect the operation of the system and its data

Among the more subjective criteria is usability – how easy it is for users to work with your system. The only way to figure this out is to have a bunch of potential users test your system.

Maintainability

Maintainability refers to the ability to update a system and keep it running properly. Things change, and as such our systems must be able to change.

  • Modifiable – A modifiable system can be relatively easily changed. To make a system more easily modified, we rely on loosely coupled modules, which ensures that we can change one part of the program without having to deal with rippling errors in the code. We also try to keep the complexity of the system down, for the same reason.
  • Recoverable – A recoverable system has very low downtime (time where the system is not working due to error or failure).
  • Testable – A testable system can be tested at every level (module, system, etc.) for errors and reliability.

Transferability

Transferability refers to the ability to move the system from one platform (PC, Mac, Linux, etc.) to another. Unless you have a very particular market (as Microsoft has), transferability is a very important factor of quality.

  • Code Reuse – Tight code (loosely coupled with functional cohesion) is much easier to reuse. This is also true of generalized library-quality code.
  • Interoperability – Interoperability is the ability to send data to other devices or programs. In our interconnected world, with all its various programs, this factor controls how many people will come to rely on your software.
  • Portability – This is the ability to run your software on different systems.

Building Quality

Quality is born at every level. A quality design, executed with quality code, and tested with quality tests produces a quality result. If we want to produce reliable, efficient, and useful code, we have to keep the factors of quality in mind at all times.