Testing software for nonfunctional performance

User experience testing is an example of nonfunctional performance testing. It exists to determine how well the user can interact with the application and so such testing goes beyond the application itself and enters the realm of the environment that application is intended to function within.
Performance testing is perhaps the most important form of nonfunctional testing. In performance testing, the application is tested against a real world sized database to determine if response time and other important processes fall within acceptable parameters. Load testing is another form of nonfunctional testing. The application is put under the pressure of many users accessing at once in order to replicate the environment that the application will be functioning in.
Other forms of nonfunctional testing include stress testing by pushing the system beyond its designed limits. This isn't the same as load testing, which deals with the maximum designed load, but is an attempt to determine how the system will handle a load greater than it has been designed for.
Nonfunctional testing pretty much addresses anything not directly addressed by functional testing. This includes things like scalability, where the capacity of an application to be scaled up is tested. Or it may include other things such as speed, stability and reliability. It may even include the classic smoke test, where the application is run just to see if anything goes wrong.
Performance testing begins by documentation of the important requirements through interaction with stakeholders such as project managers, architects and developers and of course users. Requirements are then set and a test strategy is planned and carried out at various points during software development depending on what is to be tested, such as application architecture or user experience. This includes the use of performance test scripts.
Nonfunctional performance testing exists to demonstrate that the application meets the intended performance criteria. In the process, it can gather information that enables fine tuning of the system. Nonfunctional testing also improves user experience, informs stakeholders as to the status of the application and, most importantly, demonstrates when the application is ready for delivery. Nonfunctional performance testing gives us an understanding of how a given system will perform in the real world.