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.

However, it doesn’t make sense to overwork and develop an application that would serve users you can never attract since the application is likely targeted at a specific group. To continue the example with the supermarket, you don’t need to install 10 checkout counters in a shop based in a small town.

To check the system behavior in extreme conditions, two more tests are carried out: load testing and stress testing. Load testing checks the system in terms of constant loading. It also determines the moment of the highest performance. So, load testing is the process of putting demand on a system or device and measuring its response. Load testing is performed to determine a system’s behavior under both normal and anticipated peak load conditions. It helps to identify the maximum operating capacity of an application as well as any bottlenecks, and determine which element is causing degradation.

Stress testing checks if the whole system is able to work appropriately while being overloaded. It also tests the system’s ability to recover after working under stress. Stress testing puts greater emphasis on robustness, availability and error handling under a heavy load, rather than on what would be considered correct behavior under normal circumstances. The goals of such tests are to ensure the software does not crash in conditions of insufficient computational resources (such as memory or disk space).

Failover and recovery testing checks the product from the perspective of resistance to possible crashes as well as to recovering. Failover testing determines whether a system is able to allocate extra resources, such as additional CPU or servers, during critical failures or at the point the system reaches a predetermined performance threshold. Recovery testing is basically done in order to check how fast the application can recover against any type of crash or hardware failure. Generally speaking, it serves as a kind of software immunity.

These crashes could be caused by bugs, incorrect hardware or a poor connection. This testing checks the systems responsible for maintaining the safety and integrity of the product. Failover and recovering testing is important for 24×7 systems, when every minute of downtime or data loss would cause a huge financial loss, penalties, loss of clients and/or a ruined reputation. This is why the testing team emulates different conditions of possible failures. Then it evaluates the defense reaction. These checks determine whether the required defense and recovery levels are being reached.

Don’t lose your way on the website
A user should intuitively understand the way the website or application works. Usability is what testers check when having a look at the application with users’ eyes. They know if the application is usable and intuitive, it will gain popularity faster and remain competitive longer. This is why applications should not focus only on being functional, powerful and stable. If, after loading the main page, the user isn’t able to easily manage the application or the website, all other characteristics become moot.

Technically, usability testing refers to evaluating a product or service by testing it with representative users. Typically, during a test, participants will try to complete tasks while observers watch, listen and takes notes. The goal is to identify any usability problems, collect qualitative and quantitative data, and determine the participants’ satisfaction with the product.

To keep users on the website and avoid uninstallation of the application, testers pay a lot of attention to usability. Placing an order on the website should be done in three clicks, while filling numerous unnecessary forms should be avoided. If the application is simple and serviceable, it will enable a user to enjoy working with it and will help to make him a returning user.

Testing user interfaces is quite similar to the previous type of testing. During this stage of testing, testers evaluate the product design and visual perception. It involves checking screen validations of all links, data integrity, object states, the date field, and numeric field formats. What testers really check the application for are color, gamma, size, and the buttons’ colors. All of these factors have a real impact on user perception.

For instance, if you have white text on a black background, users’ eyes will tire fast. Or, if you have a button of a small size, the user might not find it at all. To the contrary, if the website has a light and attractive design, it increases the comfort of working with it and raises the effectiveness of interactivity of the user and the system.

Lost in translation
If the application is going to be released in different regions, localization and internationalization must be considered. During localization, testers check if the elements of the interface are translated properly. Internalization is a more difficult process of the application adapting to different languages and regions without changing the code of the program. If regions’ settings are not taken into consideration, the application may very possibly prove unusable for parts of the targeted audience.

Oftentimes, to test localization and internalization, specialists acquainted with the region(s) in question are engaged. Even better is if there are testers who were born in the region that can contribute. Knowing nothing or just a little of the culture, or doing something like putting an inappropriate color on the website, can easily offend users. For example, while western people treat a green color as the symbol of nature, the first association Muslims have when seeing anything green is Islam.

Last but not least, security
If information transfer is included in the work of application, it is crucial to test its security. Applications dealing with online payments and transfers of confidential information, for example, are always going through security tests. The more valuable the information, the higher the risk of the application being hacked. To prevent system break-ins, testers perform the same actions hackers would to see how the system responds to any nonstandard requests and whether it meets security requirements.

Most types of security testing involve complex steps and out-of-the-box thinking, but sometimes it is simple tests that help expose the most severe security risks.

Be ready for the challenge
Since there is a great variety of mobile devices on the market, it is becoming really important to ensure the compatibility of different systems, services and applications. If the system is not compatible, it can cause not just limited capacity, but even damage company reputation. To avoid those problems, compatibility tests should be run. This type of testing assures the website or application will work at the same speed with no errors in any popular browser. If just one browser fails to launch the site, a great part of the potential audience could be lost.

Many products (mostly complex applications) also need pre-installation. These programs should go through pre-installation testing, which checks if an installation goes correctly and how easy uninstallation would be.

Configuration testing ensures the software will work on systems with different configurations. Also, it determines the optimal configuration the hardware should have to perform at the highest capacity.

Of course, not all these types of testing are necessary for all projects. The kinds of tests are determined not only by the project requirements, the project specificity, and the development stage, but also such factors as the budget size and the time allotted for testing.

The more informed developers are about how their software will be tested, the more carefully they can approach the way in which they work with software. If they view their products through the eyes of both a developer and a tester, it has the potential to greatly simplify tasks for both sides and increase the quality of the software.