What is Non-Functional Testing?
Non-functional testing is a type of software testing that checks the non-functional aspects (performance, usability, reliability, etc.) of a software application.
An excellent example would be checking how many people can simultaneously log in to a software.
In simple terms, how well the system performs is assessed in non-functional testing.
It refers to various aspects, including:
- Performance
- Load
- Stress
- Scalability
- Security
- Compatibility
The main focus is to improve the user experience by checking how fast the system responds to a request.
We assess the software's performance under different conditions.
Types of Non-Functional Testing
- Performance Testing (Load, Stress, Volume)
- Security Testing
- Recovery Testing
- Compatibility Testing
- Configuration Testing
- Installation Testing
- Sanitation / Garbage Testing
- Endurance Testing
- Scalability Testing
Performance Testing
Performance testing focuses on the speed of the application.
It checks how fast the system responds under different conditions.
Load, Stress, Volume & Soak Testing
Load Testing
Testing the stability and response time of an application by applying a load that is less than or equal to the desired number of users.
In simple terms:
Gradually increase the load, then check the speed.
Here, load means data.
Stress Testing
Testing the stability and response time by applying a load more than the desired number of users.
In simple terms:
Suddenly increase or decrease the load and check the speed.
Volume Testing
Testing stability and response time by transferring large or huge volumes of data.
Here, we load large amounts of data into the system until it hangs.
This is generally done to check how the system responds to a large number of users at once.
Soak Testing
Testing the stability and response time by applying load continuously for a particular period of time.
How to Do Stress Testing
The stress testing process is done in the following steps:
Planning the Stress Test
- Gather system data.
- Analyze the system.
- Define the stress test goals.
Create Automation Scripts
- Develop stress-testing automation scripts.
- Generate test data for the stress scenarios.
Script Execution
- Run the automation scripts.
- Store the stress test results.
Results Analysis
- Analyze the stress test results.
- Identify bottlenecks.
Why We Need Stress Testing
- During festival time or a sale announcement, an online shopping site may witness a spike in traffic.
- To check whether the system works under abnormal conditions.
- To display appropriate error messages when the system is under stress.
- System failure under extreme conditions could result in enormous revenue loss.
- It is better to be prepared for extreme conditions by executing stress testing.
Endurance, Spike & Scalability Testing
Endurance Testing
Done to make sure the software can handle the expected load over a long period of time.
Spike Testing
Tests the software's response to sudden, large spikes in user-generated load.
Scalability Testing
A type of performance testing (under non-functional testing) used to check an application's performance by increasing or decreasing the load in particular scales.
It is executed at the:
- Hardware level
- Software level
- Database level
It is defined as the capacity of a network, system, application, product, or process to function correctly when modifications are made to the system's size or volume to meet increasing needs.
Example
- Web page scalability depends on the number of users, CPU usage, and network usage.
- Web server scalability depends on the number of requests processed.
The main objective is to control how the application balances an increasing workload and identify the point at which the product stops scaling and why.
Security Testing
Security testing checks how secure our application is.
Two key aspects are:
Authentication
We verify whether the user is valid.
Authorization / Access Control
The permissions of a valid user.
We verify whether we are giving permission to the right user or not.
Recovery Testing
Recovery testing checks how the application recovers from crashes and hardware failures.
It checks whether the system returns from an abnormal state to a normal state.
Compatibility & Configuration Testing
Compatibility Testing
It includes:
- Forward compatibility
- Backward compatibility
- Hardware compatibility (Configuration Testing)
Configuration Testing
A combination of hardware and software in which we test whether they are communicating properly.
In simple words, we check how the data flows from one module to another.
Concurrency, Fuzz, Interface & Storage Testing
Concurrency Testing
Accessing the application simultaneously by multiple users to ensure system stability.
It is mainly used to identify deadlock issues.
Fuzz Testing (Fuzzing)
A black-box technique of putting invalid or random data into a software system to discover coding errors and security loopholes.
Data is inserted using automated or semi-automated techniques.
The system is tested for exceptions such as:
- Crashes
- Failures of built-in code
Fuzzing usually:
- Finds the most serious security faults.
- Is very cost-effective.
- Produces more effective results when combined with Black Box Testing, Beta Testing, and other debugging methods.
Interface Testing
Done to check whether individual modules are communicating properly as per specifications.
It is mostly used to test the user interface of GUI applications.
Storage Testing
Verifies whether the software:
- Stores relevant data in the appropriate directories.
- Reads data files from the correct directories.
- Has enough disk space to prevent unexpected termination due to insufficient space (Stack Overflow).
FAQs
1. What is Non-Functional Testing?
Testing that assesses non-functional aspects such as:
- Performance
- Usability
- Reliability
- Security
- Compatibility
It checks how well the system performs.
2. What is the difference between Load Testing and Stress Testing?
Applies a load less than or equal to the desired number of users to check stability and response time.
Stress Testing
Applies a load greater than the desired number of users to see how the system behaves under abnormal conditions.
3. What are the types of Performance Testing?
- Load Testing
- Stress Testing
- Volume Testing
- Soak Testing
- Endurance Testing
- Spike Testing
- Scalability Testing
4. How is Stress Testing performed?
- Plan the stress test.
- Create automation scripts.
- Execute the scripts and store the results.
- Analyze the results to identify bottlenecks.
5. Why do we need Stress Testing?
- To verify the system works under abnormal conditions.
- To handle traffic spikes during sales or festivals.
- To ensure appropriate error messages appear.
- To avoid revenue loss due to failures under extreme conditions.
6. What is Scalability Testing?
A type of performance testing that checks an application's performance as the load is increased or decreased at the hardware, software, or database level.
It identifies the point at which the application stops scaling.
7. What is the difference between Authentication and Authorization in Security Testing?
Authentication
Verifies whether the user is valid.
Authorization
Verifies whether a valid user has the right permissions.
8. What is Recovery Testing?
Testing how well the application recovers from crashes and hardware failures.
It checks whether the system returns from an abnormal state to a normal state.
9. What is Fuzz Testing?
A Black Box Testing technique that feeds invalid or random data into the system to uncover coding errors and security loopholes.
It often reveals serious security faults.