Software testing is the process of checking the workflow of an application in order to compare its expected behavior to its actual behavior. It’s an inseparable part of the development process that helps to prevent, monitor, and fix any possible errors before releasing the final product.

A modern application is a complex, multi-component system that will work properly only if each and every part of its architecture works as expected and if the interaction of the components is stable and predictable. However, the developers writing the code of the application are human and no one is secure from human error. Yet, the errors can be detected at the earliest stages of development, and this is what QA-engineers do.

In this article, we will tell you about different types of software testing and their role in the process of development. You will learn about the developing and testing life cycles and their tight integration with one another. We are also going to provide a brief overview of popular testing tools and frameworks and tell you about some useful browser extensions used by our QA-engineers. It’s going to be interesting!

The role of testing in development lifecycles

Although development and testing are different processes performed by different specialists, they shouldn’t be treated separately.

As can be seen by the scheme presented above, testing is treated as a separate stage of development. Yet, the majority of bugs revealed by QA-engineers can be detected, documented, and prioritized by tests covering all of the aforementioned stages and further fixed by the developers. Additionally, the earlier the bug is detected, the easier and cheaper it will be to fix it.

Let us see the advantages of having test coverage of all development lifecycles.

Stage 1. Analysis of requirements

The requirements are set by the client or project manager and can cover both functional and non-functional aspects. Let’s imagine a situation in which the requirements were not tested and were used as a basis for creating the architecture and development. Upon receiving the ready product for testing, the QA-engineers find critical errors in the documentation that will affect the work of the entire product. In this case, it will be necessary to change the initial documentation, the system architecture, and the code of the entire application. In order to avoid such a situation, our QA engineers take part in the process of development from its very beginning.

Stage 2. Creating the architecture

This is the time for the developers and system architects to create the fundamental design of the system, to specify all the requirements, to choose the technological stack, to decide on the method of data storage, functionality, etc. The architecture must comply with the project documentation and technical assignment and allow the developers to implement all the necessary features. Testing and double-checking the fundamentals of the future project is a task for the QA-department employees. If any critical errors are revealed at this testing stage, it will be easy to fix it at the time but it will be hard and expensive to deal with the consequences of incorrect architectural decisions later.

Stage 3. Development

While developing the application, it’s very important to test the work of each module of the program and their interaction with one another. This is the time for QA-specialists to work on the following levels of testing:

Integration testing – this is applied when several modules are united as a separate part of the application and aims to check the workflow of the modules as a part of the system.

System testing – upon completing the work on the application and compiling all its parts into one integrated application, the workflow of the entire system is tested.

Acceptance testing – the final stage of testing, completed by the client, that aims to check the application’s compliance with the business requirements and making the decision if it can be accepted for further delivery.

Step 4. Testing and debugging

This is a mandatory stage where testing should be performed regardless of the test coverage of the development process during the previous stages. It aims to fully test the performance of the application in different situations and environments. All the bugs that were detected by QA-engineers are documented in a bug-tracking system (like Redmine or Trello) and later fixed by the developers. Upon completing the process of the bug-fix, the regression testing is performed. It aims to test if the bugs were fixed effectively (сonfirmation testing) and if the recent code changes did not revert, causing the reproduction of old bugs or affecting the performance of the other parts of the application.

Step 5. Exploitation and maintenance

Even when the product is released, the necessity of testing remains. Different users work with the application in different environments and there’s always the possibility of detecting new errors that were missed while testing. Besides, the general public may use the program in an unpredictable way that could cause some new issues. In this case, the help of QA-specialists is necessary.

It’s obvious that the process of testing affects every stage of the development lifecycle. Quality assurance components compare the actual state of the product to the planned and documented state and help to plan and monitor the tasks of the development team in a more effective way.

The main types of software testing

We have already covered the role of testing in the process of software development and spoke about some different types of testing. Since testing is considered a separate stage of development, let’s see which types of testing are generally used while checking the work of the ready application.

Functional testing

It is one of the key types of testing that aims to check the business logic of the application and its key functions, comparing it to the initial requirements of the client. It fully imitates the actual use of the system and reveals whether or not the ready product meets the initial requirements of the client and if it works in exactly the way that was described in the documentation.

Compatibility testing

The users of the end product generally work with the application on different machines with different types of operating systems and browsers. Different software and drivers are installed on their computers and their screens have different resolutions. In order to create a positive user experience, we should ensure a perfect performance by the program in all of the different environments, and this is what compatibility testing is designed for.

Performance testing

The main requirements of the program are its working efficiency, stability, scalability, and load. Performance testing allows you to detect the possible vulnerabilities in the system and to prevent their impact on the product’s performance. Depending on the goals, the performance testing can be subdivided into the following types:

Load testing – checking the response time for different types of queries in order to test the performance under a regular load.

Stress testing – checking the efficiency of the application under an excessive increase to its normal load. It allows you to determine the real limits of the program’s capacity, to test its resistance, and to monitor the process of system recovery after return to normal while reducing the time spent.

What is test design and how is it performed?

It is the stage of testing where the test cases are developed according to the agreed-upon criteria and the goals of testing. The main goal of this stage is to create an efficient process of testing for all of the important parts of the application while performing as few tests as possible. The process of developing the test design includes the following types of testing techniques:

Equivalence Partitioning implements splitting the test data into different classes of allowable value. The testing of each class is expected to provide the equivalent result. Upon defining the classes, each of them should be tested at least once.

Boundary Value Analysis is the technique based on one of the most vulnerable places of any software – the boundary values. In order to test this, the range of values is selected and the boundaries are established. Then, they are tested by inputting both valid and invalid values that exceed or relinquish the boundary. This technique is tightly connected to Equivalence Partitioning.

Decision Table Testing is a testing technique for describing the state of the application and structuring the complicated business requirements that are to be realized by the product. They contain the conditions which need to be fulfilled to provide the necessary result.

State Transition Testing helps to describe the way of changing the states of the application. Unlike the decision table testing that describes the actual state, it reflects how the states change and helps to track the system’s reaction to the input of invalid data or undoing of a recent action. For more convenience, the output data is presented as a diagram.

Use Case Testing is the way of describing the user-system interaction. For the testers, it’s a convenient way for developing test cases, since the use case is describing the context of performing each action of the user, taking into account the goals of testing and the requirements.

The world of computer technologies is developing rapidly, and new methods and tools for software development appear every day. They are designed to simplify and automate the workflow in order to reduce time and expenses. Since testing is an inseparable part of development, there are numerous tools and frameworks used by QA-engineers in their work. Let’s see which instruments help our testing team to monitor the quality of our applications:

Postman – this tool allows you to develop and edit the HTTP queries. The queries and the server responses can be saved on the hard drive for rechecking and reusing.

Apache Jmeter – the most popular tool for load testing. It is widely used due to its convenient GUI, platform independence, multi-threading, extendability, and extensive opportunities for creating reports. Thanks to its module architecture, it is possible to extend JMeter and to realize the most exotic testing scenarios. The tool also supports distributed testing, with the load created by several machines.

Capybara – a library written in Ruby that allows simulation of the user’s interaction with the application.

Selenium WebDriver – a set of libraries for different programming languages containing the tests with rather complicated logic. It allows you to create a reliable automation framework capable of working in any browser and to create a test for any program written in any language.

BrowserStack – gives you the opportunity to remotely test the compliance of the application with different browsers. It allows you to choose the necessary browser for any device and to select the screen resolution. The tester can make, edit and send the screenshots right in the tool. It is also possible to choose one of the default resolutions or to settle the necessary parameters manually.

The browser extensions used for testing

Although testing programs greatly simplify the process, they are not the only tools that can be used by QA-specialists in their work. The following browser extensions automate and simplify the different actions performed while testing and speed up the process greatly:

Web Developer is a set of tools for managing different elements of the web resource – such as mockup analysis, code testing, and page resizing. It helps to speed up the testing time by giving the opportunity to perform the actions in several clicks. For example, you no longer need to open the browser settings to clean the cookies – Web Developer allows you to do this in two clicks.

Performance Analyser is an extension that outputs the data of your page loading speed as a graph. It shows how much time each process takes, and the data presented by a plugin can be used for analyzing the optimization.

Exploratory Testing Chrome helps to quickly document the bugs in the table. By taking a screenshot, adding the bug summary and adding them to the table, the QA engineer does not get distracted from testing the current module. The document can be downloaded and later transformed into an extensive bug report.

WhatFont is a plugin that gives the necessary information about the font: its name, size, color, etc. The output description can be attached to the bug reports.

Postman Interceptor allows you to track and intercept requests sent during the user interaction with the UI of the web apps. It helps to modify the requests, to check the back-end features, and to validate. Installing the desktop version of Postman is necessary.

Conclusion

The development lifecycle is a long and complicated process, and each stage of it is important for the quality of the final product. That is why it is strongly recommended that the QA-team takes part in the application development from the very beginning and supports the product even after its release. Having read this article, you are aware of the existing software testing types and their importance for the development process. While working on our projects, we pay a lot of attention to the test coverage of each stage of the development process – this helps us guarantee the quality of our product.