Non-functional testing is done to ensure that a system/application meets the specified performance requirements. Here, by performance we do not only mean response time, but several other factors such as security, scalability, and usability of the application as well.
We discuss some of the most common non-functional tests below:
In order to ensure that the response time of a system is acceptable, performance testing is carried out. By setting up a considerable load and a production-sized database, the system is tested for response times of several business critical processes.
To check whether the system can sustain the pressure or load of many users accessing the system at one time, load testing needs to be carried out. The production load is replicated in the test environment in this case after which the application/system is tested.
This testing is done to pull the system far beyond its capabilities and see how it reacts. Contrary to load testing in which the maximum allowable load is generated, in stress testing, the load generated is more than what the system is expected to handle.
When storage requirements and capabilities of the system are to be tested, volume testing is done. When a huge database size is encountered, the system’s performance and its ability to exchange data and information are tested in this case.
To test how well the redundancy mechanism works when the system encounters heavy load or unexpected failure is what failover testing is about. Also, when the specific failed system is back again, it must begin to function as per requirements — this is fail-back testing.
To test how well the system can preserve itself and the data it holds in situation of malicious attacks is called security testing. Confidentiality, integrity, availability, authentication, and authorization are the main areas that are tested when security testing is considered. Also, network security, system security and application security are other areas that will be tested in this case.
An application is tested for its coordination with different hardware and software that it is expected to work on. Another testing that can be done is working of the application with different versions or releases of the same hardware or software.
To verify the ease of usage of an interface within an application is what usability testing is about. Learnability and memorability of the application are main factors in this case. This testing is particularly important when testing GUI.
When an application is tested for it ability to increase and scale up on any of its non-functionality requirements such as load, number of transactions, number of servers, volume of data etc., it is known as scalability testing.
The above list is not exhaustive since there are more than 150 testing types as of today. The different types of testing (including automated testing) that needs to be done depending upon the scope of the project and maturity of the application under test.