Combinatorial Testing


Nowadays, software systems are diverse as well as complex and have many possible configurations. These qualities and features in the software systems has inaugurated a demand of software and applications that are uniquely designed and have innovative as well as creative features. Apart from these, the clients and users also demand exponential performance, functionality, quality, scalability, effectiveness, and more. To achieve these goals and to fulfil the demands of the clients and consumers, software engineers use various innovative techniques and methodologies to develop a product, as well as perform rigorous testing, as products released with inadequate testing can cause irreparable damage and loss to the client as well as the user who is installing the application or using the software. Moreover, it can also cause bodily harm, which can result in large economic losses or security breaches, as well as affect the quality of day-to-day life. However, software testers often have limited time and budget, which frequently makes it impossible to exhaustively test software. Additionally, testers often intuitively test for defects that they anticipate, while less foreseen defects are overlooked and not tested. The best way to overcome such a situation is to implement Combinatorial Testing in software and applications. Combinatorial Testing is an approach that can systematically examine system setting in a manageable number of tests and by systematically covering t-way interactions. Therefore, here is an expounded discussion on Combinatorial Testing, to define its significance, methods and other major qualities.

Describing Combinatorial Testing:

Combinatorial Testing is now a practical approach that produces high quality testing at a lower cost. It decomposes brute force into steps to attack the problem incrementally by separating analysis and synthesis activities that can be quantified and monitored, and partially supported by tools. Moreover, combinatorial testing is extremely simple to apply. As a specification based technique, it requires no knowledge about the implementation under test. Combinatorial testing is based on the premise that many errors in software can only arise from the interaction of two or more parameters. Therefore, combinatorial testing is an effective technique to test software with multiple configuration parameters. It is mainly used to detect interaction faults caused by the combination of parameters. The type of test generated by combinatorial testing aim at generating covering that covers all t-way parameters combinations, where ‘t’ is a given covering strength. Basic combinatorial testing can be used in two ways, which can either be used separately or at the same time. These ways are:

  • Combinations of configuration values or parameters, in which the covering arrays are used to select the values of configurable parameters, possibly with the assistance of same tests that run against all configuration combinations.
  • Covering arrays are used to select input data values, which then become a part of complete test cases, creating a test suit for the application. Applying this form of combinatorial testing to the real world software is challenging as it presents a higher degree of interactions, for which very large tests can be required.

Methods Used For Generating Combinatorial Test Suits:

The popularity combinatorial testing has increased eminently in the recent years. Because of its numerous advantages it is utilised by software testers at various testing levels. From model, unit, integration, system, and acceptance testing to black, white, model based testing, and more, testers are implementing combinatorial testing to get effective results at a cost effective rate. Moreover, to generate test suits for combinatorial testing, software engineers use a vast array of tools, which simplifies the process of testing software even further. These combinatorial test suits provide higher t-way coverage, even though generating arrays of higher t-ways coverage can consume significant computational resources and produce large results. Additionally, the majority of algorithms for combinatorial testing focuses on the special case of 2-way testing. Also, to construct test suit for combinatorial testing manually, three methods are used. These methods provide various advantages to the tester and ensures output is as accurate as possible. These methods/algorithms are:

  1. Algebraic Method: This offers efficient constructions in regard to time, however it is difficult to produce accurate results on a broad and general variety of inputs.
  2. Greedy Algorithm: These are the well-studied type of algorithm for the construction of covering arrays, as they have been found relatively efficient in regards to time and accuracy.
  3. Heuristic Search: Heuristic search particularly though the application of Stimulated Annealing (SA) has provided the most accurate results in several instances. This local search method has provided many of the smallest test suites for different system configurations; however, at a cost of execution time to generate test suites.

Pairwise Testing:

Commonly known as all-pair testing, pairwise testing is a combinatorial method of software testing that for each pair of input parameter to a system, tests all possible discrete combinations of those parameters. It is a test design technique that delivers hundred percent test coverage. The most common bugs in a program are usually found and triggered either by an input parameter or by an interaction between pair of parameters. Bugs involving interactions between three or more parameters are both progressively less common as well as progressively more expensive to find, such testing has as its limit the testing of all possible inputs. In this case a combinatorial technique for picking test cases like all pair is a very useful cost benefit compromise that enables a significant reduction in the number of test cases without drastically compromising functional coverage. Hence, pairwise testing technique is immensely useful in designing test for applications involving multiple parameters. Its test suit covers all combinations and therefore, it is not exhaustive yet very effective in finding bugs. Though pairwise testing can dramatically reduce combinations, it still remains really effective in terms of fault detections and is indeed a smart test design technique that promises best test efforts and exceptional effectiveness.

Benefits Of Combinatorial Testing:

The above discussion on combinatorial testing reflects its significance as well as usefulness. It is one of the most effective software testing technique as it test a software with multiple configurable parameters. Moreover, with the assistance of combinatorial testing one can easily detect interactions faults caused by the combination of parameters. Another advantage of this type of testing is that it produces high quality testing at a very cost effective rate, which not only helps software developers and testers, but also benefits the organisation for which the product is being developed. Therefore, other benefits of this approach are:

  • Handles coverage concerns when defining the test plan.
  • Allows systematic planning of test.
  • Can be virtually applied to any software and at different levels of abstractions.
  • Higher test coverage with better quality assurance.
  • Requires no access to internal source code SUT.
  • It maximises the value of each tested scenario.
  • Significant reduction in the number of tests.
  • It can control risks and is easy to review.


Software systems are complex and can incur exponential numbers of possible tests. Any product that is released without proper testing can be a significant danger to the organisation as well as the user. Therefore, to ensure that no such situation or problem occurs after the software is released, software testers perform rigorous testing. Moreover, they frequently use combinatorial testing in various testing levels, as it can easily test software with multiple configurable parameters. In short, combinatorial testing is used to detect interaction faults caused by the combination of parameters. The key insight underlying the effectiveness of combinatorial testing resulted from a series of studies and research done by NIST from 1999-2004. It an immensely useful approach that can systematically examine system setting in a manageable number of test. It is an approach that produces and executes high quality testing at a very cost effective rate. Furthermore, it is an effective test planning technique, which can handle coverage concerns as early as possible. Hence, if a software engineer wants to get best testing results, they should for sure execute combinatorial testing at an early stage of Software Development Life Cycle (SDLC).