Even when you think you have got it right, Non functional testing can expose the hidden flaws
This is your big idea. Maybe, not necessarily yours, it’s your client’s. But you have spent months mulling over the concept, assembling the best team of developers and you are ready to go. Your end goal is to solve problems and make life easier for the end-user, right? Well, achieving client satisfaction and maintaining a positive end-user experience is hinged on one important factor; Testing.
Quality Assurance(QA) is a pivotal part of your mobile/web application development lifecycle. Whether it be a pre-installed, installed or browser-based app, rigorous testing of functionality, compatibility, usability, among others must be done every step of the way.
Functional testing is an important and popular step in the app development process. Primarily because, focusing on an AUT’s ability and efficiency to perform as required is second nature to QA practise. However, it is important to note that non-functional testing is as equally important as functional testing because it greatly affects client satisfaction and the whole user experience. In this article, I will attempt to explain what non- functional testing is, differentiate between functional and non-functional testing, and highlight the importance of non-functional testing.
It is a type of software test for assessing the non-functional aspects (eg. performance, usability, reliability, etc) of a software application. It is essentially aimed at testing the abilities of a system on such non-functional parameters which are usually not done by the functional testing. In other words, this testing handles the aspects of a software application which is not connected with the defined user action or a function.
TYPES OF NON-FUNCTIONAL TESTING
This checks how a system is safeguarded against intentional or spontaneous attacks from known or unknown sources, also known as VAPT (Vulnerability and Penetration Testing). It also detects loopholes within the system and measures the vulnerability of an AUT to being hacked.
Both Manual and Automated assessment of vulnerabilities through active and passive scans are part of this testing
Performance testing encompasses a number of parameters.
- Load Testing: Load testing checks the ability of a system/ AUT to deal with different numbers of users given a performance range.
- Stress Testing: Stress Testing assesses the tenacity of an AUT, measuring what happens to the system when put under valid load in excess of its originally designed capacity. For instance, how many users working on a particular app at a time can cause it to crash?
- Endurance Testing: This test is essential to know the stability of the system over a period of time and to see if small errors that are accumulated over the said period can affect the efficacy and integrity of the system.
- Recovery Testing: This checks that the software system continues to perform to the required standards and recovers completely in the unfortunate case of a system failure.
- Reliability Testing: This is done to check the extent to which any software system repeatedly performs a given function without failure.
- Scalability Testing: The scalability test is essential for commercialization of a product. It measures the extent to which a software application can expand its processing capacity to meet an increase in demand.
The ease with which a software can be changed or transferred from its current environment (hardware/software) to another is checked by portability testing.
The ease with which any user can learn, operate, and interact with a system is measured by the usability test.
Other tests performed during the non-functional testing phase include Failover Testing, Compatibility Testing, Accessibility Testing, Maintainability Testing, Volume Testing, Disaster Recovery Testing, Compliance Testing, Documentation Testing, Internationalization and Localization Testing etc.
Ultimately, the motive of this is to test all characteristics of an application that would help to produce a product that meets the expectations of the user. It helps to improve the developer’s knowledge of the product behaviour, latest trends in technology and supports research development.
Functional versus Non- Functional Tests: Two Different Concepts
The major difference between the two types of testing is this: Functional testing ensures that your product meets customer and business requirements and doesn’t have any major bugs. Non-functional testing verifies that the product meets the end user’s expectations.
Functional and Non-Functional tests are technically differentiated from each other based on their objective, focus area, functionality, ease of use and execution.
Functional testing assesses the behaviour of the software system of the AUT such as login function, valid/ invalid inputs, etc. whereas Non-functional testing deals with the performance or usability of the software.
Functional testing focuses on customer requirements, while Non-functional testing focuses on user expectations.
Functional tests check that the system works as expected. It testing checks how well the system works.
Ease of use:
Functional testing is easy to execute manually, like the black box testing but it is hard to execute non-functional testing manually. It is more feasible to use automated tools.
Functional testing generally gets performed before non-functional testing, ie. before the compilation of code while Non-Functional testing is mostly performed after compilation of code.
Now, imagine finalizing the masterpiece you have created, and testing its functional requirements fully, leaving out its non-functional requirements.
Would you like to predict what would happen when the application is subjected to a massive load when it goes live? Would you be confident of its stress capabilities?
Would you want to imagine how slow it may become? What if it crashes on the product launch day? Or an unauthorised party completely takes over the functionality of the system? These scenarios depicted make no pleasurable viewing. I wouldn’t want to touch such a product with a ten-foot pole or be associated in any way with it.
Though testing over the years have been traditionally limited to the functional requirements, the concept of non-functional testing has gradually become an integral part of software processing, without which consumer expectations may not be fully met. When a product fails to meet these expectations, it affects the reputation of the developers, company and even the overall product sale.This is why non-functional testing cannot be ignored.
When you think you have got it right, it will expose all the hidden flaws!