Any software application or system requires to be tested for its functional requirements i.e. working of modules and functions and its non-functional requirements i.e. load handling, performance, recovery, scalability, usability, stress handling, security, compatibility, etc.
Functional testing tests ‘what’ the system does and Non-functional testing tests ‘how’ the system operates.
In this tutorial, we will focus on Non-functional testing. We will cover some important points of the non-functional testing concept such as its definition, the different types of non-functional testing, important parameters that are tested during non-functional testing, and a list of automation tools that are used by testing teams to test non-functional requirements.
So, let’s get started!!!
Non-Functional Testing Definition
Non-functional testing is the testing of software application for its non-functional requirements which are not covered under functional testing. It tests whether the system meets the non-functional quality attributes and makes sure that the system behaves or operates in the required manner.
Non-functional testing holds equal importance in the testing process as functional testing. Sometimes, the project manager, QA team and even the client focus only on functional aspects of the software. But when the software is in the market, and it is used by real users, it might start developing some issues related to performance such as slow response time, compatibility issues with browser or device, vulnerabilities towards attacks on security, etc. These issues, in turn, might affect end-user satisfaction.
Hence it is really important that the software is tested also for non-functional requirements and not just for functional requirements.
Following are some examples of non-functional testing scenarios which will give you more idea about the kind of checks that are carried out under non-functional testing:
- To check how many users can simultaneously use the system.
- To check whether the system is compatible with various desired devices, operating systems, browsers, etc.
- Check whether the customer’s credit/debit card information (any payment-related private information) is encrypted and secure.
- Check how quickly or easily the user is able to learn the application usage.
Attributes of Non-Functional Testing
Following are some major parameters that are important to be tested during non-functional testing:
Types of Non-Functional Testing
So now you know what non-functional testing is and why it is important for any application, let’s look into some non-functional testing types in brief.
In simple words, performance testing tests the performance of the software. Performance testing is required to make sure the response time of the system is as per the desired requirement. It can also be part of integration testing.
- Load Testing – Load testing is done by checking the system’s ability to manage a load of multiple users using the system at the same time. During this testing, the testing team tries to put pressure on the system by logging with multiple users and accessing any particular module or function simultaneously. The results of the testing will be checked for the system’s required response time, whether it is achieved or not.
- Stress Testing – Stress testing is carried out to test the robustness of the system under severe stress. In load testing, maximum capacity of the system is found out while in stress testing, load is increased gradually, even more than the maximum capacity, and system’s behaviour is checked.
- Volume Testing – Volume testing helps in checking the system performance when the database size is increased. After increasing the database size, multiple queries can be fired simultaneously to check how effectively system is able to exchange the data. It will also check for any data loss and slowness in response. It is important to note that load testing, stress testing and volume testing are basically part of performance testing.
Now, let’s take a real-life example of why performance testing is important: When American actress Jennifer Aniston debuted on Instagram in 2019, due to a large number of users accessing her profile, Instagram was crashed temporarily. Such scenarios are very rare, but it still affects the application’s performance and most importantly, end-user satisfaction.
Security testing is one of the most crucial testing types of non-functional testing. In this type of testing, the system’s readiness to fight back against any external or internal attacks is tested. It makes sure that only authorized and authenticated users are allowed to access the software, and users’ data is secured and available to them whenever required.
One of the many examples of why security testing is the utmost requirement is Yahoo’s cyber attack in 2014. It was responsible for stolen data (such as names, date of births, passwords) of 500 million user accounts. In recent years, Yahoo’s user accounts were hacked at least thrice which was also responsible for Yahoo’s decreased valuation during its buyout by Verizon Communications.
Usability testing checks how easily a user can use the system. It is required to see how quickly or effortlessly the user is able to learn and run through the system.
If the user cannot browse through the system easily, the user might lose interest in the application and it will, in turn, affect customer satisfaction.
The system should be able to run efficiently, meeting all its functionalities without any issues on the desired platform or device. This compatibility check with different devices, operating systems, or browsers is done using compatibility testing.
Scalability testing is required to check the scalability of the system which means in events of change in data volume, a number of users, etc. the system should work as required and it should be able to handle the increased parameters.
Recovery testing checks the system’s performance in case of any failure or crash and its ability to recover in the desired time without loss of any data.
Non-Functional Testing Automation Tools
Generally, manual non-functional testing is difficult to do. For example, logging in with multiple users at the same time is quite difficult to do manually, you will need a large number of resources to do it. Moreover, it will be time-consuming and desired results might not be achieved. Using some tool that performs automated tests is an effective and time-saving option. Thus, there are some automation tools available in the market for the same.
Following is a list of some automation tools used by testers worldwide:
JMeter – Apache JMeter is a performance testing tool written in JAVA. It is open-source software, freely available, and platform-independent. Moreover, it supports integration with Selenium, it can also be used as a unit testing tool.
LoadRunner – Like JMeter, LoadRunner is also a performance testing tool and, can be used as a unit and integration testing tool. It is a market leader when it comes to performance testing. LoadRunner also supports scripts from JMeter and Selenium by declaring an interface library. It is not free but allows a certain number of users in the trial version.
NeoLoad – It is a performance testing tool written in JAVA. They have different pricing plans and one of them is free, but it comes with a limited set of users. It also supports existing Selenium scripts written in JAVA.
WebLOAD Professional – Another performance testing tool that has various pricing plans, and like NeoLoad it comes with a free plan with a limited set of users. It also supports Selenium and Perfecto Mobile.
LoadTracer – It is a performance testing tool developed in C language by Trace Technologies Pvt. Ltd. Currently, it is freely available.
We hope this article helped you in understanding the non-functional testing concept. For any query or suggestion, please let us know in the comments and we will try to answer at the earliest.
Kuldeep is the founder and lead author of ArtOfTesting. He is skilled in test automation, performance testing, big data, and CI-CD. He brings his decade of experience to his current role where he is dedicated to educating the QA professionals. You can connect with him on LinkedIn.