No matter how genius a new application is, it is still required to go through testers’ hands. And despite the important role testers play, they remain in the shadows. When developers become aware of the variety of tests their software must endure, it often forces them to rethink the way they develop their software—in a good way.

It’s clear that the main task of the testing team is to help developers to create quality software. The term “quality” is not that abstract when it relates to testing. It includes certain characteristics, such as functionality, practicality, efficiency, reliability and mobility. Those characteristics also consist of a number of technical requirements. When receiving new software, testers do a thorough check of every characteristic. Depending on the characteristics involved, there are different types of testing in quality assurance. My intent in this article is to help provide developers with a “helicopter view” of the whole process of providing high-quality software from start to finish. With that in mind, let’s look at each of the testing types in details.

What does it do?
It’s really no wonder that functional testing is the most popular type. Like a physician’s overview of the patient, this testing helps to disclose basic vulnerabilities. If a tester/physician doesn’t know how to “cure” the “patient,” he directs him/her to other testers/specialists. In reality, functional is a type of black box testing that bases its test cases on the specifications of the software component under test. Functions are tested by feeding them input and examining the output, and internal program structure is rarely considered. Thus, functional testing usually describes what the system does. In other words, this is a way of checking software to ensure that it has all the required functionality that’s specified within its functional requirements.

(Related: How to test in an agile world)

Usually, functional testing checks if the software accomplishes the tasks for which it was designed. The bugs found during this test help to determine the software’s vulnerabilities. Sometimes, really serious defects could be detected during the functional testing stage. It’s like if you buy a calculator and find it doesn’t have the “+” button. You cannot release a complex and expensive software if it’s not working properly.

How much will it sustain?
The second most popular type of testing is performance testing, which determines the maximum number of users allowed to work with the system at the same time without causing harm. A long time ago, civil engineers were using the same approach to check the strength of their structures. For instance, after finishing a bridge, they would fully load it with huge construction trucks to see if it could sustain that weight.

In technical terms, performance testing is the process of determining the speed or effectiveness of a computer, network, software program or device. This process can involve quantitative tests done in a lab, such as measuring the response time or the number of MIPS (millions of instructions per second) at which a system functions. In other words, we talk about the work speed and the reaction speed that might be altered by growing performance. The load is determined by the number of requests in the unit of time. The more frequent the requests, the lower the performance. In this case, work speed may decrease.

When the software is still under development, it is required to estimate the biggest amount of users allowed to have access to the system at the same and having no negative impact on the speed. This is the purpose of stability testing. If the speed is low, users can switch to another provider of the service. It’s like checking out at the supermarket. If you observe the cashiers their work too slowly, you’ll probably choose another supermarket next time.