Top quality attributes in quality assurance

Branimir Hrzenjak
11 minutes
Reading time

How do you know if you’ve built quality software? Although you’re likely to be proud of your product, is there a way to objectively judge if it’s sophisticated enough to be released publicly?

Luckily, there is.

The ISO/IEC 25010 defines all software quality standards and provides detailed benchmarks against which you can compare your own software.

For your software to be considered high-quality, you should incorporate every attribute.

There are eight quality attributes altogether. To learn what they are and how to achieve them, keep reading—this article will walk you through all of them.


When you begin building software, defining its requirements is one of the first steps. You need to pin down precisely what functionalities the software must have to be considered complete.

This is what functionality addresses. It measures the conformity of the software with these pre-defined specifications and requirements.

For example, consider the following graph:

Source: WellDoneBy

The software in question should be able to execute all of the user actions listed above.

A reviewer must have the functionality of writing, commenting, and rating a review, whereas a buyer must have the functionality of buying an item and leaving feedback.

Therefore, in this specific example, functionality evaluates if the final software supports such actions.

However, there are three specific functionality sub-characteristics, which all indicate a software’s functionality. They’re explained in the graph below:

Functionality categories
Source: Shake

Functional completeness essentially asks if the software agrees with the specifications and if it contains all the envisioned features. In short, it double-checks all functionalities are present.

It’s complemented by functional correctness, which determines whether the software provides the correct results. Furthermore, it also evaluates how precise these results are.

Bug and crash reporting tool for your mobile app.

Lastly, functional appropriateness checks if the functionality allows the user to accomplish a task. Essentially, this metric verifies that a feature fulfills its function.

These three sub-categories all affirm software quality, contributing to functionality as the chief metric.


Your software will rarely run in ideal conditions.

Executing it in your company’s controlled environment is incomparable with releasing it into the wild—even a data or memory increase might be enough to stall it.

This is what performance measures: how well your software functions under any given workload.

No matter how many users are logged on or how high the processing amounts are, your software should maintain fast and smooth performance.

One of the easiest ways to evaluate performance is Google’s PageSpeed insights.

This tool considers multiple scenarios and then suggests a standard performance score for your application.

Here’s an example:

The resource provides detailed insights into load times and speed metrics and is a great starting point for evaluating performance. You’ll learn how fast your software typically responds.

This is called latency—how much time is spent responding to an event. Generally speaking, the lower the latency, the better. After all, you want your software to be fast.

However, luckily, the latency has already been calculated for most operations. In other words, you can easily gauge how long each event takes.

Here’s a handy latency guide:

Source: GitHub

With this guide, you can quickly judge how long each operation takes and therefore evaluate your software’s performance.

Furthermore, if its performance has been lagging, you might find the culprit using this directory.


Whereas performance evaluates how software reacts to various unusual workloads, reliability focuses on how long software can uphold its standard operations.

In other words, reliability measures how well software performs specific functions over a defined time period without failing.

This topic was also discussed in a recent Quora thread, and one user offered the following definition:

Source: Quora

This is a hugely important metric.

Users expect software to behave a certain way, and if an application acts differently each time, they’ll likely get frustrated and have difficulty obtaining value from it.

To ensure that your software is highly-reliable and dependable, it’s best to pay attention to these four sub-characteristics:

Reliability sub-characteristics
Source: Shake

The most fundamental reliability metric is maturity, which measures how stable software is in daily use. This entails purely regular operations.

However, that isn’t worth much if your users can’t access the software. That’s why availability is also a critical factor, as this evaluates how easily users can begin using your software.

For example, is it available when offline?

Don’t forget about software bugs, either. The software should have high enough fault tolerance to function normally despite defects.

That being said, if there is any issue and the software is interrupted or fails altogether, it should be able to recover quickly.


You don’t want just anyone using your software—confidential, private data is likely stored there.

Malicious viruses and cyberattacks are equally dangerous, as they could cause information loss, data corruption, and more.

Therefore, to ensure your software can withstand all these dangers, it’s vital to invest in its security.

Heavily-guarded, robust software can ward off such hazards, and you won’t have to worry about any integrity loss.

When evaluating software, QA employees often verify the program against specific security requirements to ensure it’s secure enough.

Here’s an example:

Source: AltexSoft

PCI DSS stands for Payment Card Industry Data Security Standard.

This set of security standards ensures that all software that processes credit card information maintains a secure environment.

Therefore, any such hypothetical piece of software will only be considered high-quality if it complies with PCI DSS.

The OAuth 2.0 standards are another example of security guidelines.

They are the industry-accepted protocol for authorization and are all but required to ensure secure sign-in to applications.

Here’s an excerpt from their documentation:

Source: OAuth 2.0

These access tokens ensure a secure connection to software and validate that the user trying to make contact is authorized to do so.

Without such protocols, you’d have no control over who is using your software.

Therefore, to maintain the high quality of your software, it’s essential to invest in its security.


Your software is ultimately designed for your users, so it should be optimized for convenience. It shouldn’t be difficult to understand, take too long to set up, or be hard to navigate.

In other words, users should intuitively know how to utilize it.

This quality, defined by user-friendliness and ease of use, is called usability, and is an essential hallmark of first-rate software.

With high usability, your users will use your software more efficiently and accomplish their objectives faster.

For example, here’s a sample scenario of using software with high usability:

The task was completed extremely quickly, likely leaving the user satisfied—all thanks to the software’s usability.

To achieve this quality, try paying attention to three distinct characteristics: effectiveness, efficiency, and learnability.

You can view them in the chart below:

Source: ScienceDirect

This chart compares the usability of two Jira versions, measuring usability with three distinct metrics.

Effectiveness refers to the accuracy with which users achieve their objectives, whereas efficiency measures how quickly they realize said goals.

These two are then complemented by learnability, which evaluates how long it takes users to utilize software upon accessing it for the first time.

When building your software, ensure to optimize these three attributes, and you’ll have a high-quality, easily-usable product on your hands.


In today’s interconnected world, you’ll rarely find software working in a silo.

Almost all systems interact with at least one other software, and smooth integrations are considered a hallmark of high-functioning software.

Consequently, your product should also be well-equipped to work with other systems. This attribute is called compatibility and measures how easily your software functions cross-platform.

Two attributes constitute compatibility, shown below:

Compatability sub-characteristcs
Source: Shake

Interoperability refers to how well your software can exchange and reuse its data with other software. It is best achieved with well-designed external interfaces.

The other important aspect is co-existence. Nowadays, it’s not unusual for different pieces of software to share the same hardware or software environment.

Compatibility also measures how easily your software performs its primary function in such a situation.

Generally speaking, the higher the interoperability and co-existence, the better, as it means that your software can be utilized by a wider audience and gain popularity.

In fact, popular software products often come with explicit compatibility information, so developers know their precise capabilities.

For example, here are the compatibility details for Microsoft’s Visual Studio:

Source: Microsoft

With this list, developers will know exactly how they can incorporate Visual Studio into their existing workflows and they won’t lose any time trying to configure it with incompatible software.

Such guidelines are hugely helpful, as they immediately provide developers with the compatibility information they need.


If compatibility evaluates how well a software solution works with new systems, portability measures how well it works in a new system.

Your software should function seamlessly regardless of the environment.

Let’s say your software runs perfectly on Windows 10. When starting it on Windows 11, it should operate the same way, without any changes in behavior or performance.

This is what portability measures: the degree to which software can be moved from one hardware, software, or environment to another.

This topic was also discussed in a Quora thread, where one user listed the following portability examples:

Source: Quora

Software with high portability will operate well in all possible operating systems. The same logic is applied to ANSI SQL scripts.

Those scripts with high portability will function in any SQL database.

When assessing your software’s portability, there are three sub-characteristics to remember.

Take a look:

Portability sub-characteristics
Source: Shake

The most fundamental metric is adaptability, which measures whether the software can be used in different software, hardware, or another environment.

Replaceability is more complex. It determines if your software can replace another software, one designed for the same purpose.

Finally, the software shouldn’t start running right away. Installability evaluates how straightforward it is to install a certain piece of software in any given environment.

These three characteristics define software’s portability and should be considered when designing your own software.


Building your software product is only the first step. Once it’s been deployed, you then have to maintain it.

What happens if the stakeholders update the requirements? What if a virus causes one component to stop working? Your software will constantly be changing, even after its release.

Consequently, it’s essential to achieve high maintainability—an attribute that measures how easy it is to make codebase modifications.

A good indicator of your software’s maintainability is its MTTR—the mean time to restore the system.

This metric signifies the average time necessary to repair a failed component and return it to its normal production status. You can calculate your MTTR with the following formula:

Mean time to restore formula
Source: Shake

With this formula, you’ll learn how efficient you are at software repairs. Generally speaking, the lower the MTTR, the higher the maintainability.

Besides MTTR, there are three sub-characteristics that speak to your software’s maintainability. You can see them below:

Maintainability sub-characteristics
Source: Shake

Reusability addresses how easily the software can be utilized in different systems. High reusability is a huge asset, as it will save you significant time.

When examining codebase edits, in particular, modifiability is your best bet. This metric observes how easy it is to change the software without harming its present quality.

Finally, one of the core components of maintaining software is testing software: your software must be testable to be maintainable.


In an effort to standardize industry guidelines for software quality, the ISO/IEC 25010 defined eight quality attributes.

For software to be considered high-quality, it must comply with all eight characteristics.

After all, what good is secure software if users have difficulty using it? What does it matter if a software solution is easy to maintain if it only functions on one operating system?

Each quality attribute is equally important, and ignoring even one aspect can result in subpar software.

Therefore, strive to achieve all eight quality attributes, and you’ll surely build a sophisticated and advanced software product.

About Shake

Shake is a bug and crash reporting tool for mobile apps. It was founded in 2019 with the mission to help app developers spend less time on debugging and manual overhead — and growing daily since thanks to a small and dedicated team of geeks based in the EU.

Meet your favorite bug and crash reporting tool.

Add to app in minutes

Doesn’t affect app speed

GDPR & CCPA compliant