The seven fundamental principles of Software Testing

  • June 15, 2021

Software testing is -nowadays- a fundamental practice to ensure the quality of the digital product we want to deliver. And it is precisely through software testing that we can get clear answers about the performance of an application and whether it complies perfectly with the parameters that we ourselves have organized and with what the customer expects from that App. 

In this article, we will detail seven fundamental principles of software testing and their importance.

  • Tests show the presence of errors

Testing an application can only reveal that one or more defects exist in the application, however, testing alone cannot prove that the application is error-free. Therefore, it is important to design test cases that find as many defects as possible.

  • Exhaustive testing is impossible

Unless the application under test (AUT) has a very simple logical structure and limited input, it is not possible to test all possible combinations of data and scenarios. For this reason, risk and priorities are used to focus on the most important aspects to test.

  • Early testing

The earlier we start software testing, the faster we will find bugs. As soon as initial deliverables, such as requirements or design documents, are available, we can start testing. It is common for the testing phase to be squeezed at the end of the development lifecycle, i.e. when development has been completed, so by starting software testing early, we can prepare testing for each level of the development lifecycle.

Another important point about early testing is that when defects are found early in the life cycle, they are much easier and cheaper to correct. It is much cheaper to change an incorrect requirement than to have to change functionality in a large system that does not work as requested or designed.

  • Defect grouping

During testing, it can be observed that most of the defects reported are related to a small number of modules within a system. That is, a small number of modules contain most of the defects in the system. Typically, it is estimated that 80% of the problems are found in 20% of the modules.

  • Regression tests

If you keep running the same set of tests over and over again, likely, those test cases will no longer uncover new defects. Because as the system evolves, many of the previously reported defects will have been fixed and the old test cases no longer apply.

Every time a bug is fixed or new functionality is added, we must do regression testing to make sure that the new modified software has not broken any other part of the software. However, those regression test cases must also change to reflect the tradeoffs made in the software to make them applicable and then detect new defects.

  • Evidence depends on the context

The different methodologies, techniques, and types of testing are related to the type and nature of the application. For example, a software application on a medical device needs more testing than gaming software.

More importantly, medical device software requires risk-based testing, compliance with medical industry regulators, and possibly specific test design techniques.

Similarly, a very popular website must go through rigorous performance testing as well as functional testing to ensure that performance is not affected by the load on the servers.

  • There are always potentially errors

The fact that the tests did not find any defects in the software does not mean that the software is ready to be shipped. So the question then becomes, where are the tests run designed to detect most of the defects? There are many other factors to consider before deciding to ship the final software.