Types of software testing.

Software testing is the process of testing a software product in order to verify the correspondence between the actual and expected behavior of the program. To achieve this goal, there are several Types of testing.

Types of Software Testing can be divided into several groups:

  • Functional testing.
  • Non-functional testing.
  • Change-related testing.

The main functional testing types.

The first one is Functional testing.

Aimed at verifying the feasibility of functional requirements. In other words, it is a test of the software’s ability to solve the tasks that users need. Functional tests can be performed at all levels of testing (component, integration, system, acceptance). At the same time, what the software does and what tasks it solves is determined by the Functinal Requirements.

Functional requirements:

  • Operational suitability.
  • Accuracy.
  • Ability to interact.
  • Compliance with standards and regulations.
  • Security.

The advantage of this testing is to simulate the actual use of the system. But at the same time, do not forget about the risk of missing logical errors in the software, as well as the likelihood of excessive testing.

The second one is Security and Access Control Testing.

This strategy is aimed at checking the security of the system, as well as analyzing the risks associated with providing protection against various types of attacks.

The overall security strategy is based on three principles-Confidentiality, Integrity, and Availability.
At the same time, Confidentiality will mean restricting access to the resource to a group of people. And this definition can be considered in almost any example of the differences in the display of a site for an authorized / non-authorized user.

Integrity implies the expectation that a resource can only receive changes in a certain way and from a certain group of users. At the same time, in the case of data corruption, there is an assessment of how important the procedure for restoring them is.

Availability, on the other hand, is the very requirements for how much resources should be available to an authorized user/object/device. Accordingly, the more critical the resource, the higher the availability level is set.

Speaking of functional testing, do not forget about Interoperability Testing.

This includes Compatibility testing and integration testing. Interaction testing is designed to test the ability of an application to interact with one or more components or systems.
Software with good interaction indicators can be easily integrated with other systems, without the need for major modifications.

The main non-functional types of testing

Unlike functional testing, Non-functional testing is aimed at verifying the feasibility of non-functional requirements.

Non-functional requirements:

  • Performance.
  • Ease of use.
  • Portability (installations).
  • Reliability (failure/recovery).

Non-functional testing does not check the system for performing the functions that the customer wants from it, but it allows you to control more global properties:

  • system performance under various loads;
  • application scalability requirements;
  • adapting the app for different platforms;
  • guarantee that the application will continue to work even in the event of unforeseen situations.

The first type of non-functional testing we will highlight:

Performance and Load Testing.
This type of testing involves automated testing that simulates the work of a certain number of users on a resource.
It also has its own views:

Load testing: Determining the scalability of the application under load. At the same time, the time of performing operations, the intensity of execution, the determination of the number of simultaneous users, the limits of acceptable performance, and performance on various types of loads (high, extreme, and stressful) are subject to measurements.

Stress testing: Checking how well the application and the system itself, as a whole, remain operational under stress.

Volume testing: Performance check, when increasing the amount of data in the database.

Stability testing/Reliability: Checking the performance of the application during long (many hours) testing with an average load level. In the first place, the importance of verification comes out — the absence of memory leaks, server restarts under load, and other aspects that directly affect the stable operation of the software.

The second type of non-functional testing is Installation testing.

This view is aimed at checking the successful installation and configuration, as well as updating or uninstalling the software.

It should be borne in mind that the full-fledged testing in this case will not be checking the successful operation of the installer, which we have managed to get used to. Testing the Installation, in this case, will be writing an installation plan that contains both the steps for installing the application and the steps for rolling back to the previous version. It is important to remember that the installation plan itself must be tested.

Usability Testing will be the next type that we will consider.

This type of testing is aimed at assessing the degree of usability, evaluating the ease of learning and attractiveness for potential users of the product being developed.

Failover and Recovery Testing checks the product for the possibility of resistance and successful recovery in the consequences of possible failures caused by software errors, hardware errors or communication interruptions.

Configuration Testing is aimed at checking the operation of the software on different systems. For example, the declared platforms, supported drivers, and various computer configurations.

The purpose of such a test depends entirely on the project on which the test is applied.
In the case of a bias towards profiling the system, we will need to determine the optimal hardware configuration, and for a project to migrate the system between platforms, we will have to focus on compatibility.

Change-related types of testing

After fixing the bug / defect, re-testing is necessary to make sure that the changes made really solved the problem. Also, for any project, you need to confirm the health of the application.

In such cases, it is customary to use:

Smoke testing — a short cycle of tests performed to confirm that after the build, the installed application starts and performs the main functions.

It is carried out on the basis of the results of surface testing of only important application modules, for the possibility of performing the required tasks and the presence of quickly found critical and blocking defects.
This type should be performed before performing Regression Testing and, comparatively, will have less coverage of the functionality during testing.

Regression Testing — is aimed at checking changes, to confirm the fact that the functionality that existed in the application, which should have been unchanged, works the same as before the interventions.

Regression testing captures both the fact that a previously found defect has been corrected and the absence of new defects in the system.
Both types of tests (both functional and non-functional) can be regression tests.

In conclusion

The purpose of this article was to provide information to enable you to imagine what types of testing there are.
It is important to understand that some of these types are used daily, by a huge number of specialists, while other types are not so popular.
And knowing the theoretical foundations, you can decide which type of testing is worth the time spent on practice and will be the most suitable for your work.

Types Classification Pros Cons
Functional Functional testing The ability to simulate the actual operation of the system. High probability of redundant tests.
There is a chance to miss logical errors in the software.
Security testing Confidence that the chances of damage to the system by external influences are minimal. Regardless of the number of tests, it is impossible to be sure that the system is completely protected from any attacks.
Interaction testing It includes compatibility and integration, and makes it easier to implement software. High chances of not covering all types of integration and compatibility. The need to constantly account for updating / exiting device updates.
Non-functional Performance testing Automated testing, which makes manual testing easier and saves time.
Software security in view of readiness for situations that lead to system loads.
Automated testing requires serious programming skills, as well as knowledge of network protocols, various application servers and databases.
It is considered one of the most difficult tests, it requires a lot of time to learn.
Installation testing Helps to avoid problems with installing software in an industrial environment (Inability to install software, Data loss after installing a new version, Inability to roll back the version). Additional time for development, or the involvement of additional resources to perform these works.
Usability testing The usability of internal objects, classes, methods, and variables is checked, and the usability of modifying, extending, and integrating the system with other modules or systems is considered. It is not always possible to conduct testing with a “gray / black box”. High chances of losing scripts.
Failover and Recovery Testing Provision of situations to preserve the integrity of software users ‘ data. The inability to foresee all situations.
Configuration testing Using the coverage matrix.
Determining the optimal hardware configuration, checking the compatibility test object.
Low costs in the presence of automation.
The more requirements for the application to work with different configurations of workstations, the more tests we will need to perform. The need to enter autotests.
Change-related Smoke testing Relatively low indicators for the time spent on testing.
The priority is to guarantee the operation of the main functionality.
Surface testing. Intentional omission of a part of the functionality during coverage.
Regression testing Guarantee that changes in the new version of the app do not damage the existing functionality.
Speed up re-tests.
Guarantee of detection of defects at the early stages of development.
Increased amount of time and activity on the project.
Loss of concentration during continuous re-testing.
Order testing
Rules for the processing of personal data

By filling out the feedback form on the website http://qualitica.ru, the user accepts these Rules for the processing of personal data (hereinafter – the Rules). Acting freely, of his own free will and in his interest, and also confirming his legal capacity, the User gives his consent to IP Bormotov Ivan Sergeevich to process his personal data with the following conditions:

1. This consent is given to the processing of personal data, both without the use of automation tools, and with their use;

2. Consent is given to the processing of the following personal data that is not special or biometric: surname and name, phone, e-mail, user data (location information; type and version of the OS; type and version of the Browser; device type and resolution of its screen; source, where the user came from; the language of the OS and the Browser; which pages he opens and which buttons the user clicks; ip-address);

3. Personal data is not publicly available.

Email sent

Our manager will contact you soon