System Testing

System testing is the final stage of the software testing process. It is attempting to respond to the question, Can we ship the software to our customer yet? To answer that, system testing takes a holistic view of the software by examining if the application is performing adequately under realistic, real world situations. In particular,

Is the software fulfilling the user s requirements and objectives? Specifically, does the software achieve the use cases defined in the requirements phase?
Is the system performing adequately? Does it scale satisfactorily under expected loads?

System testing can overlap with other testing categories including user interface testing, and load testing. Indeed, these other testing methodologies can fulfill the system test.

Testing the user interface with a focus on meeting the use case expectations can achieve system testing goals. However, not all systems have user interfaces (e.g. middle-tier systems, or libraries). For these systems, it is necessary to test the application programmatically via the API. In particular, integration tests can fulfill this objective.

Load Testing

Load testing is the process by which an application is examined under a heavy usage scenario. In a client-server model, it may be necessary to test situations where there are many concurrent users accessing the system. Load testing is especially important with Internet applications such as web applications or remote services. These systems can experience orders of magnitude increases in concurrent users with minutes or even seconds. This is known as the Digg or Slashdot effect.

Single user applications can also be load tested. For instance, an image processing application may be load tested by handing it a very large image file.
There are various open source load testing frameworks

Java: JMeterThe Grinder

System testing is often approached from a black-box perspective. Specifically, it assumes nothing about the internals of the application.