Software Performance Engineering is the practice of ensuring that a software system is designed, implemented, deployed and maintained in a way that meets business and performance requirements. Software performance engineering is usually applicable to large-scale, multi-user, systems; often when a large number of users is expected. The most common examples of such applications are web sites, rich internet applications and web-based enterprise applications. Additionally, many other types of client/server applications are commonly load tested.
Ideally performance engineering should be an integrated part of all software development processes. Performance engineers should be involved at the very beginning of every large-scale, multi-user system. Their roles: writing performance requirements, planning system architecture, following the development process and testing the performance at an early stage. Unfortunately this practice is not common and most performance queries surface during the pre-production stages of a project.
There are many technical and business reasons why you will want to assure your application’s performance. However, whatever the reason, there is a common root cause to all of them: multi-user systems are planned, developed and tested in the single-user environment. Usually, neither developers nor the QA team are aware of multi-user performance interactions, boundaries or hardware requirements. Moreover, many systems’ specifications do not include any clear and measurable performance, scalability or reliability requirements, which despite their absence, does not prevent a project from being deemed a failure when real-life performance issues surface.
Web-based systems have an increased risk of performance issues that in-house systems do not. Systems used within an organisation have a predictable user population and it is even possible to predict the window of online operation based on the start and finish times of the users’ departments.
It is far more difficult to accurately predict the online usage profile for web-based systems as the number of users is frequently unknown and the hours of operation and peak usage times are often little more than a guess due to the 24/7 nature of the internet. Additionally unusual events, sometimes outside the organisation’s control, can cause a massive spike in use. Web performance problems can cause negative reactions from the public at a time when the company that is launching a new product wants to make the best possible impression, for example.
The way for organisations to avoid such embarrassment is to ensure that the web-based system in question is optimised to provide the best possible performance. This can often be achieved for little or no additional cost. This can only be achieved through effective performance testing and assurance that mirrors multi-user system usage.
Many testing houses, consultancies and service providers offer this service, but unfortunately only some of them are able to deliver a high-level quality of service. The reason for this is that most performance engineers are former functional testers and do not have a specialist background in performance testing. Many companies see performance engineering as a natural continuation of the functional testing field. Unfortunately, this is not true. Good software performance specialists have to have a much wider background than functional testers. In addition to basic QA experience, a good performance engineer has to have an extensive technical and development background, specializing in a particular system’s infrastructure together with relevant, in-depth experience.