# Elementary comparison testing

Elementary comparison testing (ECT) is a formal white-box, control-flow, test-design method.[1] Its purpose is to implement the detailed testing of complex and important software. Software pseudocode or code is tested to assess the proper handling of all decision outcomes. As with multiple-condition coverage[2] and basis path testing,[1] coverage of all independent isolated condition paths is accomplished through modified condition/decision coverage (MC/DC).[3] Isolated conditions are aggregated into connected situations creating test cases. The independence of a condition is shown by changing the condition value in isolation. Each relevant condition value is covered by test cases.

## A test case

A test case consists of a logical path from start to end of a process, through one or many decisions. Contradictory situations are deduced from the test case matrix and excluded. The MC/DC approach isolates every condition, neglecting all possible subpath combinations and path coverage.[1]

${\displaystyle T=n+1}$

where

• T is the amount of test cases per decision, and
• n the amount of conditions.

The decision ${\displaystyle d_{i}}$ consists of a combination of elementary conditions

{\displaystyle {\begin{aligned}\Sigma &=\{0,1\}\\C&=\{c_{0},c_{1},c_{2},c_{3},...,c_{n}\}\end{aligned}}}

${\displaystyle \epsilon :C\rightarrow \Sigma \times C}$

${\displaystyle D\subseteq C^{*}}$; ${\displaystyle d_{i}\in D}$

The transition function ${\displaystyle \alpha }$ is defined as

${\displaystyle \alpha :D\times \Sigma ^{*}\rightarrow \Sigma \times D}$

Given the transition ${\displaystyle \vdash }$

${\displaystyle \vdash \subseteq (\Sigma \times D\times \Sigma ^{*})\times (\Sigma \times D\times \Sigma ^{*})}$

${\displaystyle S_{j}=(b_{j},d_{m},v_{j})\vdash (b_{j+1},d_{n},v_{j+1})}$
${\displaystyle E_{j}=(a_{j},c_{j})\vdash (a_{j+1},c_{k})}$
${\displaystyle (b_{j+1},d_{n})=\alpha (d_{m},v_{j});(b_{j+1},c_{k})=\epsilon (c_{j});a_{j}\in \Sigma ,}$

the isolated test path ${\displaystyle P_{m}}$ consists of

{\displaystyle {\begin{aligned}P_{m}&=(b_{0},d_{0},v_{0})\vdash ...\vdash (b_{i},d_{i},v_{i})\vdash ^{*}(b_{n},d_{n},v_{n})\\&=(b_{0},c_{0})\vdash ...\vdash (b_{m},c_{m})\vdash ^{*}(b_{n},c_{n})\end{aligned}}}

${\displaystyle b_{i}\in \Sigma ;c_{m}\in d_{i};v\in C^{*};d_{0}=S;d_{n}=E.}$

## Test case graph

A test case graph illustrates all the necessary independent paths (test cases) to cover all isolated conditions. Conditions are represented by nodes and condition values (situations) by edges. All program situations are addressed by an edge. Each situation is connected to one preceding and successive condition. Test cases might overlap due to isolated conditions.

## Inductive proof of number of condition paths

The elementary comparison testing method can be used to determine the number of condition paths by inductive proof.

Figure 2: ECT Inductive Proof Anchor

There are ${\displaystyle r=2^{n}}$ possible condition value combinations

${\displaystyle \forall {i}\in \{1,...,n\}\ c_{i}\mapsto \{0,\ 1\}}$.

When each condition ${\displaystyle c_{i}}$ is isolated, the number of required test cases ${\displaystyle T}$ per decision is:

${\displaystyle T=\log _{2}(r)+1=n+1.}$

Figure 3: ECT Inductive Proof End

${\displaystyle \forall {i}\in \{1,...,n\}}$ there are ${\displaystyle 0 edges from parent nodes ${\displaystyle c_{i}}$ and ${\displaystyle s=2}$ edges to child nodes from ${\displaystyle c_{i}}$.

Each individual condition ${\displaystyle c_{i}}$ connects to at least one path

${\displaystyle \forall {i}\in \{1,...,n-1\}\ c_{i}\mapsto \{0,\ 1\}}$

from the maximal possible ${\displaystyle n}$ connecting to ${\displaystyle c_{n}}$ isolating ${\displaystyle c_{n}}$.

All predecessor conditions ${\displaystyle c_{i};\ i and respective paths are isolated. Therefore, when one node (condition) is added, the total number of paths, and required test cases, from start to finish increases by:

{\displaystyle {\begin{aligned}T&=n-1+2\\&=n+1.\end{aligned}}}

${\displaystyle \ q.\ e.\ d.}$

## Test-case design steps

1. Identify decisions
2. Determine test situations per decision point (Modified Condition / Decision Coverage)
3. Create logical test-case matrix
4. Create physical test-case matrix

## Example

Figure 4: ECT Example Control Flow Graph
Figure 5: ECT Example D2 Conditions

This example shows ETC applied to a holiday booking system. The discount system offers reduced-price vacations. The offered discounts are ${\displaystyle -10\%}$ for average customers, ${\displaystyle -20\%}$ for expensive vacations, and ${\displaystyle 0\%}$ for members or otherwise. The example shows the creation of logical and physical test cases for all isolated conditions.

Pseudocode

 if days > 15 or price > 1000 or member   return -0.2 else if (days > 8 and days < 15 or price>500 and price < 1000) and workday   return -0.1 else   return 0.0 

Factors

• Number of days: ${\displaystyle <8;\ 8-15;\ >15}$
• Price (euros): ${\displaystyle <500;\ 500-1000;\ >1000}$
• Membership card: ${\displaystyle none;\ silver;\ gold;\ platinum}$
• Departure date: ${\displaystyle workday;\ weekend;\ holiday}$

${\displaystyle T=3\times 3\times 4\times 3=108}$ possible combinations (test cases).

### Step 1: Decisions

Table 1: Example D1 MC/DC
Outcome
Decision D1 1 0
Conditions c1 c2 c3 c1 c2 c3
c1 ${\displaystyle days>15}$ 1 0 0 0 0 0
c2 ${\displaystyle price>1000}$ 0 1 0 0 0 0
c3 ${\displaystyle member}$ 0 0 1 0 0 0

{\displaystyle {\begin{aligned}d_{1}&=days>15\ or\ price>1000\ Eur\ or\ member\\c_{1}&=days>15\\c_{2}&=price>1000\\c_{3}&=member\\\end{aligned}}}

{\displaystyle {\begin{aligned}d_{2}&=(8

### Step 2: MC/DC Matrix

Table 2: Example D2 MC/DC
Outcome
Decision D2 1 0
Conditions c4 c5 c6 c4 c5 c6
c4 ${\displaystyle 8 1 0 1 0 0 1
c5 ${\displaystyle 500 0 1 1 0 0 1
c6 ${\displaystyle workday}$ 1 0 1 1 0 0

The highlighted diagonals in the MC/DC Matrix are describing the isolated conditions:

${\displaystyle (c_{i},c_{i})\mapsto \{1,0\}}$

all duplicate situations are regarded as proven and removed.

### Step 3: Logical test-Case matrix

Table 3: Example Logical Test Case Matrix
Situation ${\displaystyle S_{j}}$ ${\displaystyle T_{1}}$ ${\displaystyle T_{2}}$ ${\displaystyle T_{3}}$ ${\displaystyle T_{4}}$ ${\displaystyle T_{5}}$ ${\displaystyle T_{6}}$ ${\displaystyle T_{7}}$
${\displaystyle \alpha (d_{1},\mathbf {1} 00)\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{1},\mathbf {0} 00)\mapsto (0,d_{2})}$ x x x x
${\displaystyle \alpha (d_{1},0\mathbf {1} 0)\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{1},00\mathbf {1} )\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{2},\mathbf {1} 01)\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{2},\mathbf {0} 01)\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{2},0\mathbf {1} 1)\mapsto (1,E)}$ x
${\displaystyle \alpha (d_{2},11\mathbf {0} )\mapsto (0,E)}$ x

Test cases are formed by tracing decision paths. For every decision ${\displaystyle d_{i};\ 0 a succeeding and preceding subpath is searched until every connected path has a start ${\displaystyle S}$ and an end ${\displaystyle E}$:

{\displaystyle {\begin{aligned}T_{1}&=(d_{1},100)\vdash (1,E)\\T_{2}&=(d_{1},000)\vdash (0,d_{2},100)\vdash (1,E)\\T_{3}&=(d_{1},010)\vdash (1,E)\\\end{aligned}}}
${\displaystyle ...}$
${\displaystyle T_{n+1}}$

### Step 4: Physical test-case matrix

Table 4: Example Physical Test Cases
Factor\Test Case ${\displaystyle T_{1}}$ ${\displaystyle T_{2}}$ ${\displaystyle T_{3}}$ ${\displaystyle T_{4}}$ ${\displaystyle T_{5}}$ ${\displaystyle T_{6}}$ ${\displaystyle T_{7}}$
days 16 14 8 8 8
price 1100 600
departure sa
member silver
Result
0 0
-10 1 1 1
-20 1 1 1

Physical test cases are created from logical test cases by filling in actual value representations and their respective results.

### Test-case graph

Figure 6: ECT Example Test Case Graph

In the example test case graph, all test cases and their isolated conditions are marked by colors and the remaining paths are implicitly passed.