What is non-functional testing?
Non-functional testing is a type of testing to check nonfunctional aspects (performance, reliability, security, scalability, usability etc.) of any software application. It is explicitly designed to test the readiness of a system as per non-functional parameters which are never addressed by functional testing.
A good example of non-functional testing would be to validate how many people can simultaneously Login into an application. Non-functional testing is equally important as functional testing and affects customer satisfaction wr.to software quality.
What is performance testing?
Performance testing is defined as a type of software testing to ensure that the application will perform well under their expected workload.
Features and functionalities supported by a software application is not the only concern. Performance of any applications depend on response time, workload, system resources usage, reliability and scalability. The objective of performance testing is not to find the functional defects, but to eliminate the potential bottlenecks.
Key focus of performance testing is to validate the application wr.to
- Speed – To determine whether the application responds quickly
- Scalability – To identify maximum user loads the application can handle
- Stability – To validate if the application is stable enough under varying workloads
Why do we conduct Performance Testing?
Common Performance Issues
Most performance issues revolve around speed, response time, load time and poor scalability. Speed is often one of the most important attributes of an application. A slow running application will lose potential users. Performance testing is done to make sure an application runs fast enough to keep the user’s attention and interest.
Lets take a look at the following list of common performance problems and notice how speed is a common factor in many of them:
Key Examples of Performance Test Objectives
- Application Response time – How long does it take to complete a task?
- Configuration Sizing – Which configuration provides the best performance level?
- Acceptance – Is the system stable enough to go into Production?
- Regression – Does the new version of the software/application adversely affect the response time?
- Reliability – How stable is the system under heavy workload?
- Capacity Planning – At what point does degradation in performance occur?
- Bottleneck Identification – What is the root cause of any performance degradation?
- Product Evaluation – What is the best server configuration for 1000 concurrent users?
Type of Performance Testing
Performance testing is conducted to evaluate the different performance attributes of the application like – responsiveness, stability, reliability, etc. For determining these parameters, we have different types of performance testing techniques.
Load Testing: It is the simplest form of performance testing conducted to understand the behavior of the system under a specific workload. Load testing will result in measuring important business critical transactions and load on the database, application server, DB server are also monitored.
Stress Testing: To determine or validate an application’s behavior when it is pushed beyond normal or peak load conditions.
Stress testing is a Negative testing where we load the application with large number of concurrent users/processes which cannot be handled by the systems’ hardware resources. This testing is also known as Fatigue testing, this testing should capture the stability of the application by validating it beyond its bandwidth capacity.
Spike Testing: Spike testing is subset of Stress Testing. A spike test is carried out to validate the performance characteristics when the system under test subjected to workload models and load volumes that repeatedly increase beyond anticipated production operations for short periods of time.
Endurance Testing: Endurance testing involves testing a system with an expected amount of load over a long period of time to find the behaviour of system. Let’s take an example where system is designed to work for 8 hours but same system endure for 16 hours to check the staying power of system. Most commonly test cases are executed to check the behaviour of system like Memory Leaks or system fails or random behaviour. Sometimes endurance testing is also referred as Soak Testing.
Scalability Testing: Scalability Testing is type of non-functional tests and it is the testing of a software application for determine its capability to scale up in terms of any of its non-functional capability like the user load supported, the number of transactions, the data volume etc. The main aim if this testing is to understand at what peak the system prevent more scaling.
Volume Testing: Volume testing is non-functional testing which refers to testing a software application with a large amount of data to be processed to check the efficiency of the application. The main goal of this testing is to monitor the performance of application under varying database volumes.
Performance Monitoring & Reporting
Gather performance metrics, analyze interim results, identify bottlenecks & provide fix recommendations.
- Collect metrics across the stack – client/server
- Analyze test results
- Analyze App/DB/Web servers metrics
- Analyze Thread & Workflow statistics
- Iterate execution to support tuning fixes validation for the system to meet its desired business objectives
- Deliver final Summary report
Below are the some key metrics/parameter for monitoring during performance test executions.
Key Benefits of Performance Testing
- Evaluating the speed, accuracy and stability – It allows you to monitor the crucial components of your application under heavy user loads, and how much stable to handle peak workloads.
- Improve optimization and load capability – Performance measuring helps the application to deal with high volume workload and area to improve the application performance wr.to Core, Infra, Hardware etc.
- Improved User Experience – A research says that more than half of users expect web and mobile-based applications to load within 2 seconds.
- Increased Productivity – Performance testing helps to identify and eliminate performance-related bottlenecks early in the SDLC, which reduces the time and cost of fixing them later.
- Improved Scalability – It helps to identify how well an application can handle increasing number of users, transactions, and data volumes.
- Cost Savings – Performance testing reduces the risks of application failures and downtime by identifying the issues before the application is deployed in Production. It helps to reduces the expenses on emergency repairs, lost revenue due to downtime.