**What is Pairwise Testing and How It is Effective Test Design Technique for Finding Defects:**

In this article, we are going to learn about a ‘**Combinatorial Testing**’ technique called ‘**Pairwise Testing’** also known as ‘**All-Pairs Testing**’.

Smart testing is the need of the hour. 90% of the time's system testing team has to work with tight schedules. So test design techniques should be very effective for maximum test coverage and high defect yield rate.

What You Will Learn:

### Definition: What is Pairwise Testing?

**Pairwise Testing** is a test design technique that delivers hundred percent test coverage.

*ISTQB defines All-Pairs Testing (or Pairwise Testing) as A black-box test design technique in which test cases are designed to execute all possible discrete combinations of each pair of input parameters.*

The output of a software application depends on many factors e.g. input parameters, state variables and environment configurations. Techniques like boundary value analysis and equivalence partitioning can be useful to identify the possible values for individual factors. But it is impractical to test all possible combinations of values for all those factors. So instead **a subset of combinations is generated** to satisfy all factors.

All-Pairs technique is very helpful for designing tests for applications involving multiple parameters. Tests are designed such that for each pair of input parameters to a system, there are all possible discrete combinations of those parameters. The test suite covers all combinations; therefore it is not exhaustive yet very effective in finding bugs.

*Let us learn how to apply *All-Pairs Testing* by this example.*

### Pairwise Testing Example

**Car Ordering Application:**

- The car ordering application allows for Buying and Selling cars. It should support trading in Delhi and Mumbai.
- The application should have registration numbers, may be valid or invalid. It should allow the trade of following cars: BMW, Audi, and Mercedes.
- Two types of booking can be done: E-booking and In Store.
- Orders can be placed only during trading hours.

**Step #1: Let’s list down the variables involved.**

**1)** Order category

a. Buy

b. Sell

**2)** Location

a. Delhi

b. Mumbai

**3)** Car brand

a. BMW

b. Audi

c. Mercedes

**4)** Registration numbers

a. Valid (5000)

b. Invalid

**5)** Order type

a. E-Booking

b. In-store

**6)** Order time

a. Working hours

b. Non-working hours

**If we want to test all possible valid combinations:**

= 2 X 2 X 3 X 5000 X 2 X 2

= 240000 Valid test cases combinations :(

There is also an infinite number of invalid combinations.

**Step #2: Let’s simplify**

– Use a smart representative sample.

– Use groups and boundaries, even when data is non-discrete.

– Reduce Registration Number to Two

- Valid registration number
- Invalid registration number

Now let’s calculate the number of possible combinations

= 2 X 2 X 3 X 2 X 2 X 2

= 96

**Step #3: Arranging variables and values involved.**

When we arrange variables and values involved, it looks something like this.

Now order the variables so that the one with the most number of values is first and the least is last.

**Step #4: Arrange variables to create a test suite**

Let’s start filling in the table column by column. Initially, the table should look something like this. The three values of **Product** (variable having the highest number of values) should be written two times each (two is the number of values of next highest variable i.e. **Order category**).

The Order Category column has two values. That’s how many times we need to insert the values of the first column, Product.

For each set of values in column 1, we put both values of column 2. Repeat the same for column 3.

We have a Buy and Delhi, but wait – there’s no Buy and Mumbai. We have a Sell and Mumbai, but there’s no Sell and Delhi. Let’s swap around the values in the second set in the third column.

This looks much better!

We will repeat the same steps for column 3 and 4.

When columns 3 and 4 are compared, each value in column 3 has both the values of column 4. But when you compare the 2^{nd} and 4^{th} column, we have Buy and Valid & Sell and Invalid .i.e. Buy does not have ‘Invalid’ and Sell does not have ‘Valid’. Hence we need to interchange the last set of values in the 4^{th} column.

Column 6 (Order time) is problematic. We are missing Buy/Non-working hours and Sell/Working hours. We can’t fit our missing pairs by swapping around values as we already swapped all the rows if we swap now we may miss other possible pairs which are already sorted. So, we add two more test cases that contain these pairs. Hence, the blank rows!

Now we will fill in the empty cells as we desire because the other variable values are purely arbitrary (or Don’t Cares ~).

Hurray! All pairs in 8 cases, instead of all combinations in 96!

**Hence, we saw how efficient All-pairs technique of test design is. There stands a good chance of finding bugs and it is fun and powerful.**

**The pairwise testing technique has some limitations as well.**

- It fails when the values selected for testing are incorrect.
- It fails when highly probable combinations get too little attention.
- It fails when interactions between the variables are not understood well.

### Pairwise Testing Tools:

Tools are available that applies the all-pairs testing technique that facilitates us to effectively automate the Test Case Design process by generating a compact set of parameter value choices as the desired Test Cases. Some well-known tools from the industry are:

- PICT
**–**‘Pairwise Independent Combinatorial Testing’, provided by Microsoft Corp. - IBM FoCuS
**–**‘Functional Coverage Unified Solution’, provided by IBM. - ACTS
**–**‘Advanced Combinatorial Testing System’, provided by NIST, an agency of the US Government.

- Hexawise
- Jenny
- Pairwise by Inductive AS
- VPTag free All-Pair Testing Tool

### Conclusion:

The pairwise testing technique can dramatically reduce the number of combinations to be covered but remains very effective in terms of fault detection. It is indeed a smart test design technique that guarantees a win-win situation for both test effort and test effectiveness.

During the Test planning phase of software testing, the Pairwise testing technique should always be taken into consideration. Either we are doing it manually or using any tool to generate test cases, it becomes a necessary component of the test plan because it, in turn, affects Test estimation.

kudos for the great example. do you have more examples to share?

Clear explanation on how pairwise combinations are created. Thanks!

Gr8 explanation and nice information

Thanks!

Nice explanation. Another example would be good!

Nice and clear explanation.. Thumbs up..:)

Really has nice concept reducing the test cases….Next Pairwise.

Good to know that thistesting is so much important that few companies have created tool for it.

what kind of things these tools have provided apart from combination

Really useful article. I enjoyed the read :)

Nice article. Can you explain anyone of the pair wise testing tool widely using across the industry.

If you swap buy/sell in 2nd column, you will not to add rows in step 6, right? So why don’t you do that?

Simply and clear, It explains the concept in deep. Thank you:)

thanks for this explanation, its useful.

what is concept of 1-wise and 2-wise pair testing? how this will be calculated ?

Why don’t we have 9th test case for Buy – invalid – non working hours

Hi,

i am unable to download Advanced Combinatorial Testing System (ACTS) tool. Can some one help me out ? Actually i am looking for pairwise testing open source tool

Thanks and Regrads,

Rupali.

Thank you, it’s a great explanation, very helpful. I’m currently using PictMaster, very easy to use, I recommend it.

I understand the Test-Cases combination but I unable to understand the Logic of Pairing-Details.

– There is no permutation combination generated in OUTPUT file by ALLPairs tool,

– So I would request you kindly explain me Logic of “Pairing-details”

Great Example step by step

This example helped me alot.

In the real application world, this is pairwise testing is non-sense and doesn’t help at all. The application test is more for human to judge what scenario should be for the function, not a math to put all the fields together and then just remove any values without understanding what scenario and is it any important test scenario or not!! we can’t based on the maths to remove the test cases, but we need to understand what is that case and it is ok to not test it!!

Ciny,

Sorry to disagree but in my line of work it is essential. As a healthcare interoperability engineer I cannot test all variables with all possible values. But, I can craft a set of cases that will test variability within each of those combinations.

Realize that I deal with objects that contain 5-100 individual variables with some of those variables containing thousands or tens of thousands unique values. I can limit to most frequently used and still end up with thousands of test cases if I don’t use a variant of pairwise testing.

This doesn’t eliminate the need to do full sample sets (if sampling theory dictates) but I can do those based on risk.

This is an effective tool, even given the limitations listed in the article, and using it will improve not only your effectiveness but your find rate. Pair this with Sampling Theory and you will know when to dig deeper.

I will agree that you must analyze your variables — there are certainly times when you will want to test some element explicitly — but this tool helps reduce the cost of too many values and variables in a test effort.

Perfect! Now I understand it!