Performance testing

Performance testing examines how the software performs (normally "how fast") in various situations.

Performance testing does not just result in one value. You normally performance test various aspects of the software in differing conditions to learn about the overall performance characteristics. It can well be that certain changes will improve the performance results for some conditions (say a powerful laptop with a fiber connection) and greatly degrade the performance for other use cases. And often the software can be coded to attempt to provide different solutions under different conditions.

All this makes performance testing complex. But trying to over-simplify performance testing removes much of its value.

Another form of performance testing is done on sub components of a system to determine what solutions may be best. These often are server based issues. These likely don't depend on individual user conditions but can be impacted by other things. Such as under normal usage option 1 provides great performance but under larger load option 1 slows down a great deal and option 2 is better.

Focusing on these tests of sub components run the risk of sub-optimization, where optimizing individual sub-components result in a less than optimal overall performance. Performance testing sub-components is important but it is most important is testing the performance of the overall system. Performance testing should always place a priority on overall system performance and not fall into the trap of creating a system with components that perform well individually but when combined do not work well together.

Most often the end purpose of performance testing is to provide users the best experience. For this reason, it is important to create test conditions similar to those your users will experience. It doesn't do much good to test your web application with a direct fiber connection (with huge bandwidth and extremely low latency) if many of your users are going to be using your software over poor wifi connections.

This idea also starts to show the concepts within software testing interact with each other and are interdependent. It is possible to see the following example as more usability testing than performance testing but there certainly is a point where the 2 interact. It matters less what you call it and more that you properly test what the users will experience.

Wether you call interactions between how the system performance is impacted by how the software is used (say via a fiber connection or a less than ideal wifi connection) performance testing or not isn't so important. What is important is that you test these conditions.

Load testing, stress testing and configuration testing are all part of performance testing.