What are the Principles of software testing?

Introduction :

Software testing is one of the most challenging and significant tasks in the software development life cycle of a software product. In most of the cases, level of quality, achieved in a software product, is directly proportional, to the sincere efforts, applied, in carrying out the testing process. However, a tester must be conscious of, the basic principles of testing, which is a mandatory requirement, to have a better understanding of the testing, so as to carry out the testing activities, in a best possible way. Here, we are listing out, seven principles of software testing that may be considered, in order to achieve, maximum success.

1. Testing shows presence of defects:

The basic purpose of a testing process, is to verify and validate the presence of defects & issues in a software product, and identifies them, in order to remove or fix it. However, at the end of a testing phase, it may not be guaranteed that a software product, is cent percent defect free, as testing is done, with the intention of discovering, more and more hidden defects, and not to certify a software product, as a bug free product, in the case of non-detection of bugs and defects. Therefore, as a principle, even if not a single bug has been detected, it is not a guarantee of faultlessness.

2. Exhaustive testing is impossible:

With the need of testing, each and every functionality and feature of a software product, from every possible aspect, keeping into account, fulfillment of various requirements viz. functional, business & user requirements, along with the time constraint, associate with a project, it is almost impossible, to perform exhaustive testing activities, on a software product. Thus, the concept of severity and priority of defect, is being introduced, in the process of software testing, to focus on the requirements and features of top priority and defects with the higher severity, to execute the testing activity, in a best possible manner, within the stipulated time period.

3. Early testing:

Testing done, at an earlier stages of a development lifecycle, ensures the early identification and removal of bugs and defects, which may requires, less time and cost, to deal with it, and proves to be an economical step. Moreover, as very less time, is being allocated for a testing phase, after the completion of the development phase, it will be better, to carry out the testing, as soon as design documents or the product requirement, becomes available, to dedicate sufficient amount of time, for the testing purpose.

4. Defect clustering:

It's a common fact, that only, few of the modules, of a software product, are responsible for accumulating the large number of defects. Large quantity of defects, may be seen, within the small group/number of modules, which is, in accordance with Pareto principle, for software testing, stating that 20% of the modules, constitutes 80% of the defects, present in the software product.

5. Pesticide Paradox:

This principle, states that the repetitive execution of the same set of test cases, may no longer able to discover, further more defects, and the test cases, which were designed and created, for a particular functionality or requirement, may not work further, to reveal defects, due to the patches and updates applied to a functionality, in order to fix the earlier found defects, thereby changing the feature and functionality, for which test cases were designed. It is commonly known as the pesticide paradox.

The best solution, to overcome the situation of pesticide paradox, is to review and upgrade the set of test cases, on a frequent basis, so as to explore defects, in the improved version of a software product. Further, regression testing, may also be performed on the enhanced software version, to identify and discover the defects, which may prevail, due to addition, deletion or modification of the functionality, in order to fix the defect(s).

6. Testing is context dependent:

Software product, are being produced, in a diverse range, of multiple types and of different nature, for the different purposes, so as to cater the need of a particular group of people or audience or organization, for a particular environment, and for the specified conditions. As such, testing process and methodology for a particular software product, needs to be designed and carried out, uniquely and specifically, in such a way that it covers all the aspects and fulfills all the requirements of a software product. Thus, it may be concluded that a testing process, is a context driven approach, and is based on the different nature, scope, type working and other various aspects, of a software product.

7. Absence of errors fallacy:

This principle illustrates the fact that just because a testing cycle has not come out with any bugs, the product is deemed ready for shipping. It raises questions of the quality and potency of the test cases used. A poorly conceived testing cycle may not be able to check all of the product's inherent faults. A lot of thinking goes into designing the testing cycle to see if it is being used to detect bugs or to verify if the performance of the software application matches the user requirements.