Performance testing is something that should be done throughout the entire development lifecycle. There is a lot of testing that can and should be done during the early stages of design, development, and system test to optimize performance, regardless of hardware configurations.
In the early stages of the project, requirements should be gathered around such things as expected response time, throughput and scalability. An architecture needs to be designed to take these things into account. This architecture should be reviewed keeping in mind ways to optimize those areas of performance that are most important to the users.
During the code development stage, performance unit tests should be created and executed. These could check for memory leaks or other areas that may make the code vulnerable to performance issues. Functional test efforts should include timings for functions that are time-sensitive. Even if the production hardware may speed up the overall time, testing for performance early will help uncover certain areas of the code which perform poorly compared to other functions and can further be investigated for optimization.
Similarly, load and stress tests can be run in performance test environments to help uncover scenarios in which the software is performing slowly. It's a mistake to think that these problems will all be solved by throwing more hardware at the problem. Many areas of the software can be optimized before deploying on the production hardware.
Your final tests should try to emulate your hardware environment as closely as possible. Though your test environment may not be as robust as your production environment, you can continue to find and correct potential bottlenecks during the test phases.
If you review and test for performance throughout the software development lifecycle, your team will have the opportunity to ensure each component of the application is operating at its optimum performance before deploying to your production deployment.
This was first published in March 2010