Software testing is never just limited to testing just a software’s functions as there are other elements that also need to be tested.
These are known as quality characteristics and each of these attributes will demonstrate the software’s overall quality. These characteristics cover areas such as performance, security, usability, and reliability. As the software under test will still function to some degree, regardless of the performance of these areas, testing of these quality characteristics are referred to as non-functional testing.
Why is Non-Functional Testing important?
Before a software is rolled out to the users, other than testing the functionalities, it is equally important to find out how it performs according to the below factors:
- Will my software fail if a high number of users access it?
- Will my software fall victim to unauthorized access by hackers or untargeted users?
- How able is my system to quickly come back from any failures or unknown errors?
- Can my system reliably work across different platforms, such as different OS, browsers, or mobile devices?
- How simple is it to port my software to other frameworks or technologies when demanded?
These are some of the most important non functional attributes that should be put under test. The testing is never complete until we test and pass these quality assets.
Non Functional Testing Types
The most common non-functional testing types are described below:
The aim of compatibility testing is to learn how well your system works across a range of different software and hardware. This is an all-round compatibility verification that includes testing on various browsers, OS, devices, hardware, user locales, and more.
Compliance testing ensures the software meets the IT standards of the organization. It is carried out to discover if there have been any deviations from the company’s compliance rules.
This kind of testing examines various test documents such as test plans, test cases, incident reports, that are developed before, during, and after software development.
This is another type of documentation testing. Before writing test documentation, the requirement specs and other design documents on which the test cases will be written, need to be validated.
Load testing verifies how the system will behave when a greater than usual number of users are logged into the system at one time. Here also, the response time and throughput are validated as the number of users increases. When testing, you may be recording the response time for different user loads such as 100, 1000, 5000, 10000 users and so on.
In volume testing, we input the system with a huge amount of real data and see how the system responds to it. This is similar to load testing, but here you test with user data rather than user requests. Databases can collapse at times when the volume of data increases, so this type of testing is very important.
At times, your system will need to be able to support various languages. Testing how the system behaves for various languages and locales will be part of this testing.
This testing looks to ensure the system meets the required response time for each of the user requests. It also validates the throughput of the system against its quality characteristics requirements.
This form of testing measures the easiness with which a software can be moved from one server or environment to another. If you want to move your database from MS SQL 2012 to MS SQL 2015, this testing will record the measures needed for this to be accomplished.
This type of testing will discover how quickly the system can recuperate from a failure or crash. It involves purposefully failing the system to check if it will return to its normal state. This testing is important as it is likely to uncover any unreliable factors within the system.
In the future, your system may need to support huge data and large number of users and simultaneous requests so the system should be in a position to be scaled up. Scalability testing makes sure this possibility is provisioned at a very early stage.
This is one of the most important testing types in non-function testing. It reveals how secure the system is, such as whether the system is prone to vulnerabilities and other security threats.
Stability testing proves the ability of the system to carry on functioning normally for a longer period, and under heavy use, without any crash or failures. The testing will reveal if the system can handle errors, carry load and will validate the system’s robustness under extreme use.
As the name suggests, the system will be placed under heavy load (number of requests/users) and its behavior will be analyzed under these extreme load condition. Here, the goal is to find out at which load level the system will collapse.
UI testing is the validation of graphical user interface and its design. This includes visual validation testing such as cross-checking the design, layouts and visual appearance across various browsers and devices.
In usability testing, the system is manually analyzed for its ease and effectiveness of use under various scenarios. In usability testing, the workflows, user actions, loading time, etc. will be analyzed and recorded. This is one of the most crucial non-functional testing types.