The type of testing focuses on a specific test objective, which can be the verification of a function performed by a component or the system as a whole. The purpose of testing can be aimed at verifying non-functional testing elements (reliability, usability), the structure, architecture of components or the system as a whole, as well as elements depending on changes in the system, for example, verifying the correction of a specific defect (confirmation or repeated testing) or verifying random changes (regression testing).

Depending on the needs, the testing process should be organized accordingly. So, we can define 4 types of software testing:

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

Functional testing

Today, it is difficult to underestimate the importance of functional testing, because this action is aimed at testing all the functions of the system to confirm that each function of the program works in accordance with the documentation.

Elements of functional testing:

  • preparation of test data based on the described documentation;
  • business requirements as part of functional testing;
  • obtaining results based on the specification;
  • passing test cases;
  • analysis of actual and expected results.

Functional testing can be performed according to the specification, but also on the basis of the business process, i.e. according to the knowledge of the system.

Advantages of functional testing:

As part of the testing, we “copy” the direct use of the system;
testing is usually carried out under conditions close to real life.

Disadvantages:

there is a possibility of missing a few errors in the software logic while checking the functionality of the program.

Non-functional testing

While functional testing answers the question “Does the system work?”, non-functional testing answers the question: “How well does the system work?”. Non-functional testing is aimed at checking those aspects of the software that can be described in the documentation, but are not related to the functions of software products.

Non-functional testing consists of subtypes:

  • Stability testing – Stability testing is a check of the application’s performance during long-term testing with the expected level of load.
  • Usability testing is a study to determine the usability of software.
  • Efficiency testing is a test of the required amount of code and QA resources used by the program to perform a specific function.
  • Maintainability testing – This subtype of non-functional testing determines how easy it is to maintain the system.
  • Portability testing – Portability testing – testing the availability of transferring a separate component or the entire software from one environment to another (Windows 8.1 -> Windows 10, Windows -> MacOS).
  • Baseline testing – Baseline testing is a check of the documentation and specifications that will be used to write test cases. This subtype of testing includes requirements testing.
  • Acceptance testing – Compliance/Acceptance testing – checking the product for compliance with the readiness criteria.
  • Documentation testing is the verification of all documentation created as part of the testing (from the master test plan to test cases).
  • Endurance testing – Endurance testing is testing a system under high load for a long period of time in order to study its behavior.
  • Load testing – Load testing is usually carried out to determine the behavior of the software under the expected level of load.
  • Performance testing – Performance testing – checking the speed of the software or its individual functions.
  • Compatibility testing – Compatibility testing – testing the system while working in different environments: “hardware, software, etc.
  • Security testing is conducted to answer the question “Is the application safe/protected or not?”.
  • Volume testing – testing of software using databases of a certain size.
  • Stress testing – Stress testing is testing in limited conditions, for example, checking the behavior of the system (no crashes) in conditions of a lack of computer resources (RAM or space on HDD/SSD disks).
  • Recovery testing is performed to determine the speed of system recovery in the event of a software crash or hardware error.
  • Localization testing, internationalization – Localization testing is a software check for compliance with linguistic, cultural and/or religious norms. Localization is a check of the display of all translated software texts.