Software testing is the process of testing a software product in order to check the conformity 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.
  • Non-functional.
  • associated with changes.

Main functional types of testing

The first, directly, is Functional testing .

Aimed at checking the feasibility of functional requirements. In other words – checking the ability of the software to solve the tasks required by users. Functional tests can be carried out 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 Functional Requirements.

Functional requirements:

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

The advantage of this testing is that it simulates 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 common type 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 circle of people. And this definition can be considered on almost any example of differences in the display of a site for an authorized / not authorized user.

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

Availability , on the other hand, represents the requirements themselves on 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, don’t forget about Interoperability Testing .

Including Compatibility Testing and Integration Testing

Interoperability testing aims to test the ability of an application to interact with one or more components or systems.Software with good interoperability can be easily integrated with other systems without the need for major modifications.

Main non-functional types of testing

Unlike functional testing, non-functional testing is aimed at testing 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 the performance of 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;
  • adaptation of the application for various platforms;
  • guarantee that the application will continue to work even in cases of unforeseen situations.

We will single out the first type of non-functional testing:

Performance testing (Performance and Load Testing) .

This type implies an automated testing that simulates the work of a certain number of users on the resource. It also has its own types:

  • Load testing (Determining the scalability of an application under load. At the same time, the measurements are subject to the execution time of operations, the intensity of execution, the determination of the number of concurrent users, the limits of acceptable performance and performance on various types of loads (high, marginal and stressful)
  • Stress testing (Checking how the application and the system itself, as a whole, remain operable under stress.)
  • Volume testing. (Performance check as data grows in database.)
  • Stability/Reliability testing  (Checking the performance of an application during long-term (many hours) testing at an average load level. The importance of testing comes first – 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 verifying the successful installation and configuration, as well as updating or uninstalling the software.

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

Usability Testing is the next type we’ll look at.

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

Failover and Recovery Testing checks the product for its ability to resist and successfully recover from potential failures due to software, hardware or communication failures.

Configuration Testing (Configuration Testing) is aimed at checking the operation of software on various 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 operation of the system, we will need to determine the optimal hardware configuration, and already for a project to migrate the system between platforms, we will have to focus on compatibility.

Types of testing associated with changes

After fixing a bug/defect, retesting is necessary to make sure that the changes made actually solved the problem. Also, for any project, it is necessary to confirm the performance of the application.

In such cases, it is customary to use:

Smoke Testing is a short cycle of checks performed to confirm that after the build, the application being installed 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 for the presence of quickly found critical and blocking defects.
This type should be done before conducting Regression Testing and, comparatively, will have less coverage of the functional during testing.

Regression Testing – aims to test changes, to confirm the fact that the functionality that existed in the application, which should have been unchanged, works the same way as it did before the interventions.

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

In custody

The purpose of this article was to provide information in order to be able to imagine what types of testing exist.
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 in demand.
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.

FunctionalFunctional testingThe 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 TestingConfidence that the chances of damage to the system by external influences is minimal.Regardless of the number of tests, it is impossible to be sure that the system is completely protected from any attacks.
Interaction TestingIncludes compatibility and integration, facilitates the work of software implementation.High chances of not covering all kinds of integration and interoperability. The need to constantly take into account the update / exit from the actualization of devices.
non-functionalPerformance TestingAutomated testing that facilitates manual testing and saves time.
Software security in view of readiness for situations leading 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 takes a lot of time to learn.
Installation testingHelps to avoid problems with installing software in an industrial environment (Inability to install software, Loss of data after installing a new version, Inability to roll back a version).Additional time for development, or attraction of additional resources to perform these works.
Usability testingThe ease of use of internal objects, classes, methods and variables is checked, and the convenience of changing, extending the system and integrating it with other modules or systems is also considered.It is not always possible to conduct gray/black box testing. High chances of scenarios being lost.
Testing for failure and recoveryForeseeing situations to preserve the integrity of software user data.Impossibility to foresee all situations.
Configuration testingUsing a coverage matrix.
Determining the optimal hardware configuration, checking the test object for compatibility.
Low costs with automation.
The more requirements for the application to work with different configurations of workstations, the more tests we will need to carry out. The need to enter autotests.
Change relatedSmoke testingRelatively low performance in terms of time spent on testing.
Priority on the guarantee of the main functionality.
Surface testing. Intentional omission of part of the functionality when covering.
Regression TestingEnsuring that changes in the new version of the application do not damage existing functionality.
Speed ​​up re-tests.
Guarantee of detection of defects at early stages of development.
Increased amount of time and activity on the project.
Loss of concentration with constant re-testing.

Feature Image Credit