Logic Coverage in Software Testing

 
I
n
t
r
o
d
u
c
t
i
o
n
 
t
o
 
S
o
f
t
w
a
r
e
 
T
e
s
t
i
n
g
C
h
a
p
t
e
r
 
3
.
3
L
o
g
i
c
 
C
o
v
e
r
a
g
e
 
f
r
o
m
 
S
o
u
r
c
e
 
C
o
d
e
 
Paul Ammann & Jeff Offutt
Paul Ammann & Jeff Offutt
 
 
L
o
g
i
c
 
E
x
p
r
e
s
s
i
o
n
s
 
f
r
o
m
 
S
o
u
r
c
e
 
Predicates are derived from 
Predicates are derived from 
decision
decision
 statements in programs
 statements in programs
In programs, most predicates have 
In programs, most predicates have 
less than four
less than four
 clauses
 clauses
Wise programmers actively strive to keep predicates simple
Wise programmers actively strive to keep predicates simple
When a predicate only has one clause, COC, ACC, ICC, and CC all
When a predicate only has one clause, COC, ACC, ICC, and CC all
collapse to 
collapse to 
predicate coverage
predicate coverage
 (PC)
 (PC)
Applying logic criteria to program source is hard because of
Applying logic criteria to program source is hard because of
reachability
reachability
 and 
 and 
controllability
controllability
:
:
Reachability
Reachability
 : Before applying the criteria on a predicate at a particular statement,
 : Before applying the criteria on a predicate at a particular statement,
we have to get to that statement
we have to get to that statement
Controllability
Controllability
 : We have to find input values that indirectly assign values to the
 : We have to find input values that indirectly assign values to the
variables in the predicates
variables in the predicates
Variables in the predicates that are not inputs to the program are called 
Variables in the predicates that are not inputs to the program are called 
internal
internal
variables
variables
These issues are illustrated through the triangle example in the
These issues are illustrated through the triangle example in the
following slides …
following slides …
 
2
 
 
undefined
 
3
 
 
 
 
3
0
 
 
p
r
i
v
a
t
e
 
s
t
a
t
i
c
 
i
n
t
 
T
r
i
a
n
g
 
(
i
n
t
 
S
i
d
e
1
,
 
i
n
t
 
S
i
d
e
2
,
 
i
n
t
 
S
i
d
e
3
)
 
 
 
3
1
 
 
{
 
 
 
3
2
 
 
 
 
 
i
n
t
 
t
r
i
_
o
u
t
;
 
 
 
3
3
 
 
 
3
4
 
 
 
 
 
/
/
 
t
r
i
_
o
u
t
 
i
s
 
o
u
t
p
u
t
 
f
r
o
m
 
t
h
e
 
r
o
u
t
i
n
e
:
 
 
 
3
5
 
 
 
 
 
/
/
 
 
 
 
T
r
i
a
n
g
 
=
 
1
 
i
f
 
t
r
i
a
n
g
l
e
 
i
s
 
s
c
a
l
e
n
e
 
 
 
3
6
 
 
 
 
 
/
/
 
 
 
 
T
r
i
a
n
g
 
=
 
2
 
i
f
 
t
r
i
a
n
g
l
e
 
i
s
 
i
s
o
s
c
e
l
e
s
 
 
 
3
7
 
 
 
 
 
/
/
 
 
 
 
T
r
i
a
n
g
 
=
 
3
 
i
f
 
t
r
i
a
n
g
l
e
 
i
s
 
e
q
u
i
l
a
t
e
r
a
l
 
 
 
3
8
 
 
 
 
 
/
/
 
 
 
 
T
r
i
a
n
g
 
=
 
4
 
i
f
 
n
o
t
 
a
 
t
r
i
a
n
g
l
e
 
 
 
3
9
 
 
 
4
0
 
 
 
 
 
/
/
 
A
f
t
e
r
 
a
 
q
u
i
c
k
 
c
o
n
f
i
r
m
a
t
i
o
n
 
t
h
a
t
 
i
t
s
 
a
 
l
e
g
a
l
 
 
 
4
1
 
 
 
 
 
/
/
 
t
r
i
a
n
g
l
e
,
 
d
e
t
e
c
t
 
a
n
y
 
s
i
d
e
s
 
o
f
 
e
q
u
a
l
 
l
e
n
g
t
h
 
 
 
4
2
 
 
 
 
 
i
f
 
(
S
i
d
e
1
 
<
=
 
0
 
|
|
 
S
i
d
e
2
 
<
=
 
0
 
|
|
 
S
i
d
e
3
 
<
=
 
0
)
 
 
 
4
3
 
 
 
 
 
{
 
 
 
4
4
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
4
;
 
 
 
4
5
 
 
 
 
 
 
 
 
r
e
t
u
r
n
 
(
t
r
i
_
o
u
t
)
;
 
 
 
4
6
 
 
 
 
 
}
 
 
 
4
7
 
 
 
4
8
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
0
;
 
 
 
4
9
 
 
 
 
 
i
f
 
(
S
i
d
e
1
 
=
=
 
S
i
d
e
2
)
 
 
 
5
0
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
t
r
i
_
o
u
t
 
+
 
1
;
 
 
 
5
1
 
 
 
 
 
i
f
 
(
S
i
d
e
1
 
=
=
 
S
i
d
e
3
)
 
 
 
5
2
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
t
r
i
_
o
u
t
 
+
 
2
;
 
 
 
5
3
 
 
 
 
 
i
f
 
(
S
i
d
e
2
 
=
=
 
S
i
d
e
3
)
 
 
 
5
4
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
t
r
i
_
o
u
t
 
+
 
3
;
 
 
 
5
5
 
 
 
 
 
i
f
 
(
t
r
i
_
o
u
t
 
=
=
 
0
)
 
 
 
5
6
 
 
 
 
 
{
 
 
/
/
 
C
o
n
f
i
r
m
 
i
t
s
 
a
 
l
e
g
a
l
 
t
r
i
a
n
g
l
e
 
b
e
f
o
r
e
 
d
e
c
l
a
r
i
n
g
 
 
 
5
7
 
 
 
 
 
 
 
 
/
/
 
i
t
 
t
o
 
b
e
 
s
c
a
l
e
n
e
 
 
 
 
 
 
 
5
9
 
 
 
 
 
 
 
 
i
f
 
(
S
i
d
e
1
+
S
i
d
e
2
<
=
S
i
d
e
3
|
|
S
i
d
e
2
+
S
i
d
e
3
 
<
=
 
S
i
d
e
1
 
 
 
6
0
 
 
 
 
 
 
 
 
 
 
 
 
|
|
 
S
i
d
e
1
+
S
i
d
e
3
 
<
=
 
S
i
d
e
2
)
 
 
 
6
1
 
 
 
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
4
;
 
 
 
6
2
 
 
 
 
 
 
 
 
e
l
s
e
 
 
 
6
3
 
 
 
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
1
;
 
 
 
6
4
 
 
 
 
 
 
 
 
r
e
t
u
r
n
 
(
t
r
i
_
o
u
t
)
;
 
 
 
6
5
 
 
 
 
 
}
 
 
 
 
6
7
 
 
 
 
 
/
*
 
C
o
n
f
i
r
m
 
i
t
s
 
a
 
l
e
g
a
l
 
t
r
i
a
n
g
l
e
 
b
e
f
o
r
e
 
d
e
c
l
a
r
i
n
g
 
 
 
6
8
 
 
 
 
 
 
 
 
i
t
 
t
o
 
b
e
 
i
s
o
s
c
e
l
e
s
 
o
r
 
e
q
u
i
l
a
t
e
r
a
l
 
 
*
/
 
 
 
6
9
 
 
 
7
0
 
 
 
 
 
i
f
 
(
t
r
i
_
o
u
t
 
>
 
3
)
 
 
 
7
1
 
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
3
;
 
 
 
7
2
 
 
 
 
 
e
l
s
e
 
i
f
 
(
t
r
i
_
o
u
t
 
=
=
 
1
 
&
&
 
S
i
d
e
1
+
S
i
d
e
2
 
>
 
S
i
d
e
3
)
 
 
 
7
3
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
2
;
 
 
 
7
4
 
 
 
 
 
e
l
s
e
 
i
f
 
(
t
r
i
_
o
u
t
 
=
=
 
2
 
&
&
 
S
i
d
e
1
+
S
i
d
e
3
 
>
 
S
i
d
e
2
)
 
 
 
7
5
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
2
;
 
 
 
7
6
 
 
 
 
 
e
l
s
e
 
i
f
 
(
t
r
i
_
o
u
t
 
=
=
 
3
 
&
&
 
S
i
d
e
2
+
S
i
d
e
3
 
>
 
S
i
d
e
1
)
 
 
 
7
7
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
2
;
 
 
 
7
8
 
 
 
 
 
e
l
s
e
 
 
 
7
9
 
 
 
 
 
 
 
t
r
i
_
o
u
t
 
=
 
4
;
 
 
 
8
0
 
 
 
 
 
r
e
t
u
r
n
 
(
t
r
i
_
o
u
t
)
;
 
 
 
8
1
 
 
}
 
/
/
 
e
n
d
 
T
r
i
a
n
g
undefined
 
T
e
n
 
T
r
i
a
n
g
l
e
 
P
r
e
d
i
c
a
t
e
s
 
4
 
4
2
:
 
(
S
i
d
e
1
 
<
=
 
0
 
|
|
 
S
i
d
e
2
 
<
=
 
0
 
|
|
 
S
i
d
e
3
 
<
=
 
0
)
4
9
:
 
(
S
i
d
e
1
 
=
=
 
S
i
d
e
2
)
5
1
:
 
(
S
i
d
e
1
 
=
=
 
S
i
d
e
3
)
5
3
:
 
(
S
i
d
e
2
 
=
=
 
S
i
d
e
3
)
5
5
:
 
(
t
r
i
O
u
t
 
=
=
 
0
)
5
9
:
 
(
S
i
d
e
1
+
S
i
d
e
2
 
<
=
 
S
i
d
e
3
 
|
|
 
S
i
d
e
2
+
S
i
d
e
3
 
<
=
 
S
i
d
e
1
 
|
|
 
 
 
 
 
 
 
 
S
i
d
e
1
+
S
i
d
e
3
 
<
=
 
S
i
d
e
2
)
7
0
:
 
(
t
r
i
O
u
t
 
>
 
3
)
7
2
:
 
(
t
r
i
O
u
t
 
=
=
 
1
 
&
&
 
S
i
d
e
1
+
S
i
d
e
2
 
>
 
S
i
d
e
3
)
7
4
:
 
(
t
r
i
O
u
t
 
=
=
 
2
 
&
&
 
S
i
d
e
1
+
S
i
d
e
3
 
>
 
S
i
d
e
2
)
7
6
:
 
(
t
r
i
O
u
t
 
=
=
 
3
 
&
&
 
S
i
d
e
2
+
S
i
d
e
3
 
>
 
S
i
d
e
1
)
 
 
undefined
R
e
a
c
h
a
b
i
l
i
t
y
 
f
o
r
 
T
r
i
a
n
g
 
P
r
e
d
i
c
a
t
e
s
5
4
2
:
 
T
r
u
e
4
9
:
 
P
1
 
=
 
s
1
>
0
 
&
&
 
s
2
>
0
 
&
&
 
s
3
>
0
5
1
:
 
P
1
5
3
:
 
P
1
5
5
:
 
P
1
5
9
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
=
 
0
6
2
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
=
 
0
 
 
 
 
 
 
 
&
&
 
(
s
1
+
s
2
 
>
 
s
3
)
 
&
&
 
(
s
2
+
s
3
 
>
 
s
1
)
 
&
&
 
(
s
1
+
s
3
 
>
 
s
2
)
7
0
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
!
=
 
0
7
2
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
!
=
 
0
 
&
&
 
t
r
i
O
u
t
 
<
=
 
3
7
4
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
!
=
 
0
 
&
&
 
t
r
i
O
u
t
 
<
=
 
3
 
&
&
 
(
t
r
i
O
u
t
 
!
=
1
 
|
|
 
s
1
+
s
2
<
=
s
3
)
7
6
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
!
=
 
0
 
&
&
 
t
r
i
O
u
t
 
<
=
 
3
 
&
&
 
(
t
r
i
O
u
t
 
!
=
1
 
|
|
 
s
1
+
s
2
<
=
s
3
)
 
 
 
 
 
 
&
&
 
(
t
r
i
O
u
t
 
!
=
2
 
|
|
 
s
1
+
s
3
<
=
s
2
)
7
8
:
 
P
1
 
&
&
 
t
r
i
O
u
t
 
!
=
 
0
 
&
&
 
t
r
i
O
u
t
 
<
=
 
3
 
&
&
 
(
t
r
i
O
u
t
 
!
=
1
 
|
|
 
s
1
+
s
2
<
=
s
3
)
 
 
 
 
 
 
&
&
 
(
t
r
i
O
u
t
 
!
=
2
 
|
|
 
s
1
+
s
3
 
<
=
 
s
2
)
 
&
&
 
(
t
r
i
O
u
t
 
!
=
3
 
|
|
 
s
2
+
s
3
 
<
=
 
s
1
)
N
e
e
d
 
t
o
 
s
o
l
v
e
 
f
o
r
 
t
h
e
i
n
t
e
r
n
a
l
 
v
a
r
i
a
b
l
e
t
r
i
O
u
t
undefined
S
o
l
v
i
n
g
 
f
o
r
 
I
n
t
e
r
n
a
l
 
V
a
r
i
a
b
l
e
 
t
r
i
O
u
t
6
A
t
 
l
i
n
e
 
5
5
,
 
t
r
i
O
u
t
 
h
a
s
 
a
 
v
a
l
u
e
 
i
n
 
t
h
e
 
r
a
n
g
e
 
(
0
 
.
.
 
6
)
t
r
i
O
u
t
 
=
 
0
 
 
 
s
1
!
=
s
2
 
 
 
&
&
 
 
 
s
1
!
=
s
3
 
 
 
&
&
 
 
 
s
2
!
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
 
 
s
1
=
s
2
 
 
 
 
&
&
 
 
 
s
1
!
=
s
3
 
 
 
&
&
 
 
 
s
2
!
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
s
1
!
=
s
2
 
 
 
&
&
 
 
 
s
1
=
s
3
 
 
 
 
&
&
 
 
 
s
2
!
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
 
 
s
1
!
=
s
2
 
 
 
&
&
 
 
 
s
1
!
=
s
3
 
 
 
&
&
 
 
 
s
2
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
 
 
s
1
=
s
2
 
 
 
 
&
&
 
 
 
s
1
!
=
s
3
 
 
 
&
&
 
 
 
s
2
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
 
 
s
1
!
=
s
2
 
 
 
&
&
 
 
 
s
1
=
s
3
 
 
 
 
&
&
 
 
 
s
2
=
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
 
 
s
1
=
s
2
 
 
 
 
&
&
 
 
 
s
1
=
s
3
 
 
 
 
&
&
 
 
 
s
2
=
s
3
 
 
undefined
R
e
a
c
h
a
b
i
l
i
t
y
 
f
o
r
 
T
r
i
a
n
g
 
P
r
e
d
i
c
a
t
e
s
(
s
o
l
v
e
d
 
f
o
r
 
t
r
i
O
u
t
 
 
r
e
d
u
c
e
d
)
7
4
2
:
 
T
r
u
e
4
9
:
 
P
1
 
=
 
s
1
>
0
 
&
&
 
s
2
>
0
 
&
&
 
s
3
>
0
5
1
:
 
P
1
5
3
:
 
P
1
5
5
:
 
P
1
5
9
:
 
P
1
 
&
&
 
s
1
 
!
=
 
s
2
 
&
&
 
s
2
 
!
=
 
s
3
 
&
&
 
s
2
 
!
=
 
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(
t
r
i
O
u
t
 
=
 
0
)
6
2
:
 
P
1
 
&
&
 
s
1
 
!
=
 
s
2
 
&
&
 
s
2
 
!
=
 
s
3
 
&
&
 
s
2
 
!
=
 
s
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(
t
r
i
O
u
t
 
=
 
0
)
 
 
 
 
 
 
 
 
 
 
 
 
&
&
 
(
s
1
+
s
2
 
>
 
s
3
)
 
&
&
 
(
s
2
+
s
3
 
>
 
s
1
)
 
&
&
 
(
s
1
+
s
3
 
>
 
s
2
)
7
0
:
 
P
1
 
&
&
 
P
2
 
=
 
(
s
1
=
s
2
 
|
|
 
s
1
=
s
3
 
|
|
 
s
2
=
s
3
)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(
t
r
i
O
u
t
 
!
=
 
0
)
7
2
:
 
P
1
 
&
&
 
P
2
 
&
&
 
P
3
 
=
 
(
s
1
!
=
s
2
 
|
|
 
s
1
!
=
s
3
 
|
|
 
s
2
!
=
s
3
)
 
 
 
 
 
 
 
 
 
 
 
 
 
(
t
r
i
O
u
t
 
<
=
 
3
)
7
4
:
 
P
1
 
&
&
 
P
2
 
&
&
 
P
3
 
&
&
 
(
s
1
 
!
=
 
s
2
 
|
|
 
s
1
+
s
2
<
=
s
3
)
7
6
:
 
P
1
 
&
&
 
P
2
 
&
&
 
P
3
 
&
&
 
(
s
1
 
!
=
 
s
2
 
|
|
 
s
1
+
s
2
<
=
s
3
)
 
 
 
 
 
 
&
&
 
(
s
1
 
!
=
 
s
3
 
|
|
 
s
1
+
s
3
<
=
s
2
)
7
8
:
 
P
1
 
&
&
 
P
2
 
&
&
 
P
3
 
&
&
 
(
s
1
 
!
=
 
s
2
 
|
|
 
s
1
+
s
2
<
=
s
3
)
 
 
 
 
 
 
&
&
 
(
s
1
 
!
=
 
s
3
 
|
|
 
s
1
+
s
3
<
=
s
2
)
 
&
&
 
(
s
2
 
!
=
 
s
3
 
|
|
 
s
2
+
s
3
<
=
s
1
)
L
o
o
k
s
 
c
o
m
p
l
i
c
a
t
e
d
,
b
u
t
 
a
 
l
o
t
 
o
f
r
e
d
u
n
d
a
n
c
y
undefined
P
r
e
d
i
c
a
t
e
 
C
o
v
e
r
a
g
e
8
p
4
2
:
 
(
S
1
 
<
=
 
0
 
|
|
 
S
2
 
<
=
 
0
 
|
|
 
S
3
 
<
=
 
0
)
p
4
9
:
 
(
S
1
 
=
=
 
S
2
)
p
5
1
:
 
(
S
1
 
=
=
 
S
3
)
p
5
3
:
 
(
S
2
 
=
=
 
S
3
)
p
5
5
:
 
(
t
r
i
O
u
t
 
=
=
 
0
)
p
5
9
:
 
(
S
1
+
S
2
 
<
=
 
S
3
 
|
|
 
 
 
 
 
 
 
 
 
S
2
+
S
3
 
<
=
 
S
1
 
|
|
 
 
 
 
 
 
 
 
 
S
1
+
S
3
 
<
=
 
S
2
)
p
7
0
:
 
(
t
r
i
O
u
t
 
>
 
3
)
p
7
2
:
 
(
t
r
i
O
u
t
 
=
=
 
1
 
&
&
 
S
1
+
S
2
 
>
 
S
3
)
p
7
4
:
 
(
t
r
i
O
u
t
 
=
=
 
2
 
&
&
 
S
1
+
S
3
 
>
 
S
2
)
p
7
6
:
 
(
t
r
i
O
u
t
 
=
=
 
3
 
&
&
 
S
2
+
S
3
 
>
 
S
1
)
 
 
 
 
 
 
T
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
F
S
1
 
S
2
 
S
3
 
 
 
 
 
S
1
 
S
2
 
S
3
0
 
 
 
0
 
 
0
 
 
 
 
 
 
 
 
 
1
 
 
1
 
 
1
1
 
 
 
1
 
 
1
 
 
 
 
 
 
 
 
 
1
 
 
2
 
 
2
1
 
 
 
1
 
 
1
 
 
 
 
 
 
 
 
 
1
 
 
2
 
 
2
1
 
 
 
1
 
 
1
 
 
 
 
 
 
 
 
 
2
 
 
1
 
 
2
1
 
 
 
2
 
 
3
 
 
 
 
 
 
 
 
 
1
 
 
1
 
 
1
1
 
 
 
2
 
 
3
 
 
 
 
 
 
 
 
 
2
 
 
3
 
 
4
1
 
 
 
1
 
 
1
 
 
 
 
 
 
 
 
 
2
 
 
2
 
 
3
2
 
 
 
2
 
 
3
 
 
 
 
 
 
 
 
 
2
 
 
2
 
 
4
2
 
 
 
3
 
 
2
 
 
 
 
 
 
 
 
 
2
 
 
4
 
 
2
3
 
 
 
2
 
 
2
 
 
 
 
 
 
 
 
 
4
 
 
2
 
 
2
 
 
undefined
 
C
l
a
u
s
e
 
C
o
v
e
r
a
g
e
 
9
 
 
 
 
 
 
 
 
 
 
T
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
F
S
1
 
S
2
 
S
3
 
E
O
 
S
1
 
S
2
 
S
3
 
E
O
0
 
 
 
1
 
 
 
1
 
 
 
 
4
 
 
 
1
 
 
1
 
 
1
 
 
 
 
 
3
1
 
 
 
0
 
 
 
1
 
 
 
4
 
 
 
 
1
 
 
1
 
 
1
 
 
 
 
 
3
1
 
 
 
1
 
 
 
0
 
 
 
4
 
 
 
 
1
 
 
1
 
 
1
 
 
 
 
 
3
2
 
 
 
3
 
 
 
6
 
 
 
4
 
 
 
 
2
 
 
 
3
 
 
4
 
 
 
 
1
6
 
 
 
2
 
 
 
3
 
 
 
4
 
 
 
 
2
 
 
 
3
 
 
4
 
 
 
 
1
2
 
 
 
6
 
 
 
3
 
 
 
4
 
 
 
 
2
 
 
 
3
 
 
4
 
 
 
 
1
2
 
 
 
2
 
 
 
3
 
 
 
2
 
 
 
 
2
 
 
 
3
 
 
2
 
 
 
 
2
2
 
 
 
2
 
 
 
3
 
 
 
2
 
 
 
 
2
 
 
 
2
 
 
5
 
 
 
 
4
2
 
 
 
3
 
 
 
2
 
 
 
2
 
 
 
 
3
 
 
 
2
 
 
2
 
 
 
 
2
2
 
 
 
3
 
 
 
2
 
 
 
2
 
 
 
 
2
 
 
 
5
 
 
2
 
 
 
 
4
3
 
 
 
2
 
 
 
2
 
 
 
2
 
 
 
 
1
 
 
 
2
 
 
1
 
 
 
 
4
3
 
 
 
2
 
 
 
2
 
 
 
2
 
 
 
 
5
 
 
 
2
 
 
2
 
 
 
 
4
 
 
 
p
4
2
:
 
(
S
1
 
<
=
 
0
)
 
 
 
 
 
 
 
 
 
(
S
2
 
<
=
 
0
 
)
 
 
 
 
 
 
 
 
 
(
S
3
 
<
=
 
0
)
p
5
9
:
 
(
S
1
+
S
2
 
<
=
 
S
3
 
)
 
 
 
 
 
 
 
 
 
(
S
2
+
S
3
 
<
=
 
S
1
)
 
 
 
 
 
 
 
 
 
(
S
1
+
S
3
 
<
=
 
S
2
)
p
7
2
:
 
(
t
r
i
O
u
t
 
=
=
 
1
)
 
 
 
 
 
 
 
 
 
(
S
1
+
S
2
 
>
 
S
3
)
p
7
4
:
 
(
t
r
i
O
u
t
 
=
=
 
2
)
 
 
 
 
 
 
 
 
 
(
S
1
+
S
3
 
>
 
S
2
)
p
7
6
:
 
(
t
r
i
O
u
t
 
=
=
 
3
)
 
 
 
 
 
 
 
 
 
(
S
2
+
S
3
 
>
 
S
1
)
 
 
undefined
C
o
r
r
e
l
a
t
e
d
 
A
c
t
i
v
e
 
C
l
a
u
s
e
 
C
o
v
e
r
a
g
e
10
p
4
2
:
 
(
S
1
 
<
=
 
0
 
|
|
 
S
2
 
<
=
 
0
 
|
|
 
S
3
 
<
=
 
0
)
p
5
9
:
 
(
S
1
+
S
2
 
<
=
 
S
3
 
|
|
 
S
2
+
S
3
 
<
=
 
S
1
 
|
|
 
 
 
 
 
 
 
 
S
1
+
S
3
 
<
=
 
S
2
)
p
7
2
:
 
(
t
r
i
O
u
t
 
=
=
 
1
 
&
&
 
S
1
+
S
2
 
>
 
S
3
)
p
7
4
:
 
(
t
r
i
O
u
t
 
=
=
 
2
 
&
&
 
S
1
+
S
3
 
>
 
S
2
)
p
7
6
:
 
(
t
r
i
O
u
t
 
=
=
 
3
 
&
&
 
S
2
+
S
3
 
>
 
S
1
)
T
 
 
 
f
 
 
 
f
 
 
 
 
 
 
0
 
 
 
1
 
 
 
1
 
 
 
 
 
 
4
F
 
 
 
f
 
 
 
f
 
 
 
 
 
 
1
 
 
 
1
 
 
 
1
 
 
 
 
 
 
3
f
 
 
 
T
 
 
 
f
 
 
 
 
 
 
1
 
 
 
0
 
 
 
1
 
 
 
 
 
 
4
f
 
 
 
f
 
 
 
T
 
 
 
 
 
 
1
 
 
 
1
 
 
 
0
 
 
 
 
 
 
4
T
 
 
 
f
 
 
 
f
 
 
 
 
 
 
2
 
 
 
3
 
 
 
6
 
 
 
 
 
 
4
F
 
 
 
f
 
 
 
f
 
 
 
 
 
 
2
 
 
 
3
 
 
 
4
 
 
 
 
 
 
1
f
 
 
 
T
 
 
 
f
 
 
 
 
 
 
6
 
 
 
2
 
 
 
3
 
 
 
 
 
 
4
f
 
 
 
f
 
 
 
T
 
 
 
 
 
 
2
 
 
 
6
 
 
 
3
 
 
 
 
 
 
4
T
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
2
 
 
 
3
 
 
 
 
 
 
2
F
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
3
 
 
 
3
 
 
 
 
 
 
2
t
 
 
 
F
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
2
 
 
 
5
 
 
 
 
 
 
4
T
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
3
 
 
 
2
 
 
 
 
 
 
2
F
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
3
 
 
 
3
 
 
 
 
 
 
2
t
 
 
 
F
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
5
 
 
 
2
 
 
 
 
 
 
4
T
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
3
 
 
 
2
 
 
 
2
 
 
 
 
 
 
2
F
 
 
 
t
 
 
 
 
 
 
 
 
 
 
 
1
 
 
 
2
 
 
 
2
 
 
 
 
 
 
4
t
 
 
 
F
 
 
 
 
 
 
 
 
 
 
 
5
 
 
 
2
 
 
 
2
 
 
 
 
 
 
4
S
1
 
S
2
 
S
3
 
 
 
E
O
s
1
=
s
2
 
&
&
 
s
1
!
=
s
3
 
&
&
 
s
2
!
=
s
3
 
 
undefined
 
11
P
r
o
g
r
a
m
 
T
r
a
n
s
f
o
r
m
a
t
i
o
n
 
I
s
s
u
e
s
 
i
f
 
(
(
a
 
&
&
 
b
)
 
|
|
 
c
)
 
{
 
 
 
 
 
 
S
1
;
}
e
l
s
e
 
{
 
 
 
 
 
 
S
2
;
}
 
 
i
f
 
(
a
)
 
{
 
 
 
 
 
 
i
f
 
(
b
)
 
 
 
 
 
 
 
 
 
 
 
S
1
;
 
 
 
 
 
 
e
l
s
e
 
{
 
 
 
 
 
 
 
 
 
 
 
i
f
 
(
c
)
 
 
/
*
 
c
1
 
*
/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
S
1
;
 
 
 
 
 
 
 
 
 
 
 
e
l
s
e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
S
2
;
 
 
 
 
 
 
}
}
e
l
s
e
 
{
 
 
 
 
 
 
i
f
 
(
c
)
 
 
 
/
*
 
c
2
 
*
/
 
 
 
 
 
 
 
 
 
 
 
S
1
;
 
 
 
 
 
 
e
l
s
e
 
 
 
 
 
 
 
 
 
 
 
S
2
;
}
 
T
r
a
n
s
f
o
r
m
 
(
1
)
?
 
T
r
a
n
s
f
o
r
m
 
(
2
)
?
 
d
 
=
 
a
 
&
&
 
b
;
e
 
=
 
d
 
|
|
 
c
;
i
f
 
(
e
)
 
{
 
 
 
 
 
 
S
1
;
}
e
l
s
e
 
{
 
 
 
 
 
 
S
2
;
}
 
 
P
r
o
b
l
e
m
s
 
w
i
t
h
 
T
r
a
n
s
f
o
r
m
e
d
 
P
r
o
g
r
a
m
s
 
(
1
/
2
)
 
Maintenance is certainly harder with
Maintenance is certainly harder with
Transform (1)
Transform (1)
Not recommended!
Not recommended!
Coverage on Transform (1)
Coverage on Transform (1)
PC on the transform does not imply
PC on the transform does not imply
CACC on original
CACC on original
A test suit to satisfy PC on the
A test suit to satisfy PC on the
transform (1):
transform (1):
a:any element of {1,2,3,4}x{5,6,7,8}
a:any element of {1,2,3,4}x{5,6,7,8}
b:any element of {1,2}x{3,4}
b:any element of {1,2}x{3,4}
c1:{(3,4)}
c1:{(3,4)}
c2:any element of {5,7}x{6,8}
c2:any element of {5,7}x{6,8}
ex. {1,3,4,5,8}
ex. {1,3,4,5,8}
CACC on the original does not imply
CACC on the original does not imply
PC on transform
PC on transform
Ex. {(2,6),(2,4),(3,4)} does not
Ex. {(2,6),(2,4),(3,4)} does not
satisfy PC on the transform due
satisfy PC on the transform due
to c2
to c2
 
 
                    (a
b)
c
a
a
 
 
a
a
s
s
 
 
m
m
a
a
j
j
o
o
r
r
 
 
c
c
l
l
a
a
u
u
s
s
e
e
:
:
 
 
p
p
a
a
:
:
 
 
b
b
 
 
¬
c
 
 
T
R
=
{
(
2
,
6
)
}
b as major clause: p
b as major clause: p
b
b
: a 
: a 
¬c  TR={(2,4)}
c as major clause: p
c as major clause: p
c
c
: 
: 
¬(
a
a
b) TR=
any element of {3,5,7}x{4,6,8}
P
r
o
b
l
e
m
s
 
w
i
t
h
 
T
r
a
n
s
f
o
r
m
e
d
 
P
r
o
g
r
a
m
s
 
(
2
/
2
)
 
Coverage on Transform (2)
Coverage on Transform (2)
Structure used by logic
Structure used by logic
criteria is “lost”
criteria is “lost”
Hence CACC on the
Hence CACC on the
transform 2 only requires 3
transform 2 only requires 3
tests
tests
Therefore, it may not be
Therefore, it may not be
meaningful to transform a
meaningful to transform a
program for increasing
program for increasing
coverage
coverage
 
 
                    d || c
d
d
 
 
a
a
s
s
 
 
m
m
a
a
j
j
o
o
r
r
 
 
c
c
l
l
a
a
u
u
s
s
e
e
:
:
 
 
p
p
d
d
:
:
 
 
¬
c
 
 
T
R
=
{
(
2
,
4
)
,
(
2
,
6
)
,
(
2
,
8
)
}
c as major clause: p
c as major clause: p
c
c
: 
: 
¬d  TR={3,5,7}x{4,6,8} 
 
 
 
S
u
m
m
a
r
y
 
:
 
L
o
g
i
c
 
C
o
v
e
r
a
g
e
 
f
o
r
 
S
o
u
r
c
e
 
C
o
d
e
 
Predicates
 
appear in decision statements
 
if, while, for, etc.
Most predicates have less than 
four clauses
But some applications have predicates with many clauses
The hard part of applying logic criteria to source is resolving the 
internal
variables
Non-local variables 
(class, global, etc.) are also input variables if they are
used
If an input variable is changed within a method, it is treated as an
 
internal
variable
 
thereafter
To maximize effect of logic coverage criteria:
Avoid transformations that hide predicate structure
 
 
 
14
 
 
Slide Note
Embed
Share

Logic coverage in software testing involves deriving predicates from decision statements in programs. Programmers aim to keep predicates simple to ensure effective testing. Applying logic criteria to program source code can be challenging due to reachability and controllability issues. The provided code snippet illustrates the use of logic expressions to determine the type of triangle based on input side lengths.

  • Software Testing
  • Logic Coverage
  • Source Code
  • Predicates
  • Programmers

Uploaded on Oct 03, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Introduction to Software Testing Chapter 3.3 Logic Coverage from Source Code Paul Ammann & Jeff Offutt

  2. Logic Expressions from Source Predicates are derived from decision statements in programs In programs, most predicates have less than four clauses Wise programmers actively strive to keep predicates simple When a predicate only has one clause, COC, ACC, ICC, and CC all collapse to predicate coverage (PC) Applying logic criteria to program source is hard because of reachability and controllability: Reachability : Before applying the criteria on a predicate at a particular statement, we have to get to that statement Controllability : We have to find input values that indirectly assign values to the variables in the predicates Variables in the predicates that are not inputs to the program are called internal variables These issues are illustrated through the triangle example in the following slides 2

  3. 30 private static int Triang (int Side1, int Side2, int Side3) 31 { 32 int tri_out; 33 34 // tri_out is output from the routine: 35 // Triang = 1 if triangle is scalene 36 // Triang = 2 if triangle is isosceles 37 // Triang = 3 if triangle is equilateral 38 // Triang = 4 if not a triangle 39 40 // After a quick confirmation that it s a legal 41 // triangle, detect any sides of equal length 42 if (Side1 <= 0 || Side2 <= 0 || Side3 <= 0) 43 { 44 tri_out = 4; 45 return (tri_out); 46 } 47 48 tri_out = 0; 49 if (Side1 == Side2) 50 tri_out = tri_out + 1; 51 if (Side1 == Side3) 52 tri_out = tri_out + 2; 53 if (Side2 == Side3) 54 tri_out = tri_out + 3; 55 if (tri_out == 0) 56 { // Confirm it s a legal triangle before declaring 57 // it to be scalene 59 if (Side1+Side2<=Side3||Side2+Side3 <= Side1 60 || Side1+Side3 <= Side2) 61 tri_out = 4; 62 else 63 tri_out = 1; 64 return (tri_out); 65 } 67 /* Confirm it s a legal triangle before declaring 68 it to be isosceles or equilateral */ 69 70 if (tri_out > 3) 71 tri_out = 3; 72 else if (tri_out == 1 && Side1+Side2 > Side3) 73 tri_out = 2; 74 else if (tri_out == 2 && Side1+Side3 > Side2) 75 tri_out = 2; 76 else if (tri_out == 3 && Side2+Side3 > Side1) 77 tri_out = 2; 78 else 79 tri_out = 4; 80 return (tri_out); 81 } // end Triang 3

  4. Ten Triangle Predicates 42: (Side1 <= 0 || Side2 <= 0 || Side3 <= 0) 49: (Side1 == Side2) 51: (Side1 == Side3) 53: (Side2 == Side3) 55: (triOut == 0) 59: (Side1+Side2 <= Side3 || Side2+Side3 <= Side1 || Side1+Side3 <= Side2) 70: (triOut > 3) 72: (triOut == 1 && Side1+Side2 > Side3) 74: (triOut == 2 && Side1+Side3 > Side2) 76: (triOut == 3 && Side2+Side3 > Side1) 4

  5. Reachability for Triang Predicates 42: True 49: P1 = s1>0 && s2>0 && s3>0 51: P1 53: P1 55: P1 59: P1 && triOut = 0 62: P1 && triOut = 0 && (s1+s2 > s3) && (s2+s3 > s1) && (s1+s3 > s2) 70: P1 && triOut != 0 72: P1 && triOut != 0 && triOut <= 3 74: P1 && triOut != 0 && triOut <= 3 && (triOut !=1 || s1+s2<=s3) 76: P1 && triOut != 0 && triOut <= 3 && (triOut !=1 || s1+s2<=s3) && (triOut !=2 || s1+s3<=s2) 78: P1 && triOut != 0 && triOut <= 3 && (triOut !=1 || s1+s2<=s3) && (triOut !=2 || s1+s3 <= s2) && (triOut !=3 || s2+s3 <= s1) Need to solve for the internal variable triOut 5

  6. Solving for Internal Variable triOut At line 55, triOut has a value in the range (0 .. 6) triOut = 0 s1!=s2 && s1!=s3 && s2!=s3 1 s1=s2 && s1!=s3 && s2!=s3 2 s1!=s2 && s1=s3 && s2!=s3 3 s1!=s2 && s1!=s3 && s2=s3 4 s1=s2 && s1!=s3 && s2=s3 5 s1!=s2 && s1=s3 && s2=s3 6 s1=s2 && s1=s3 && s2=s3 Contradiction Contradiction 6

  7. Reachability for Triang Predicates (solved for triOut reduced) 42: True 49: P1 = s1>0 && s2>0 && s3>0 51: P1 53: P1 55: P1 59: P1 && s1 != s2 && s2 != s3 && s2 != s3 (triOut = 0) 62: P1 && s1 != s2 && s2 != s3 && s2 != s3 (triOut = 0) && (s1+s2 > s3) && (s2+s3 > s1) && (s1+s3 > s2) 70: P1 && P2 = (s1=s2 || s1=s3 || s2=s3) (triOut != 0) 72: P1 && P2 && P3 = (s1!=s2 || s1!=s3 || s2!=s3) (triOut <= 3) 74: P1 && P2 && P3 && (s1 != s2 || s1+s2<=s3) 76: P1 && P2 && P3 && (s1 != s2 || s1+s2<=s3) && (s1 != s3 || s1+s3<=s2) 78: P1 && P2 && P3 && (s1 != s2 || s1+s2<=s3) && (s1 != s3 || s1+s3<=s2) && (s2 != s3 || s2+s3<=s1) Looks complicated, but a lot of redundancy 7

  8. Predicate Coverage These values are don t care , needed to complete the test. T F S1 S2 S3 S1 S2 S3 0 0 0 1 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 1 2 3 1 1 1 p42: (S1 <= 0 || S2 <= 0 || S3 <= 0) p49: (S1 == S2) p51: (S1 == S3) p53: (S2 == S3) p55: (triOut == 0) p59: (S1+S2 <= S3 || S2+S3 <= S1 || S1+S3 <= S2) p70: (triOut > 3) p72: (triOut == 1 && S1+S2 > S3) p74: (triOut == 2 && S1+S3 > S2) p76: (triOut == 3 && S2+S3 > S1) 1 2 3 2 3 4 1 1 1 2 2 3 2 2 3 2 2 4 2 3 2 2 4 2 3 2 2 4 2 2 8

  9. Clause Coverage T F S1 S2 S3 EO S1 S2 S3 EO 0 1 1 4 1 1 1 3 1 0 1 4 1 1 1 3 1 1 0 4 1 1 1 3 2 3 6 4 2 3 4 1 6 2 3 4 2 3 4 1 2 6 3 4 2 3 4 1 2 2 3 2 2 3 2 2 2 2 3 2 2 2 5 4 2 3 2 2 3 2 2 2 2 3 2 2 2 5 2 4 3 2 2 2 1 2 1 4 3 2 2 2 5 2 2 4 p42: (S1 <= 0) (S2 <= 0 ) (S3 <= 0) p59: (S1+S2 <= S3 ) (S2+S3 <= S1) (S1+S3 <= S2) p72: (triOut == 1) (S1+S2 > S3) p74: (triOut == 2) (S1+S3 > S2) p76: (triOut == 3) (S2+S3 > S1) 9

  10. Correlated Active Clause Coverage S1 S2 S3 EO T f f 0 1 1 4 F f f 1 1 1 3 f T f 1 0 1 4 f f T 1 1 0 4 T f f 2 3 6 4 F f f 2 3 4 1 f T f 6 2 3 4 f f T 2 6 3 4 T t 2 2 3 2 F t 2 3 3 2 t F 2 2 5 4 T t 2 3 2 2 F t 2 3 3 2 t F 2 5 2 4 T t 3 2 2 2 F t 1 2 2 4 t F 5 2 2 4 p42: (S1 <= 0 || S2 <= 0 || S3 <= 0) p59: (S1+S2 <= S3 || S2+S3 <= S1 || S1+S3 <= S2) p72: (triOut == 1 && S1+S2 > S3) s1=s2 && s1!=s3 && s2!=s3 p74: (triOut == 2 && S1+S3 > S2) s1!=s2 && s1=s3 && s2!=s3 p76: (triOut == 3 && S2+S3 > S1) s1!=s2 && s1!=s3 && s2=s3 10

  11. Program Transformation Issues if ((a && b) || c) { S1; } else { S2; } if (a) { if (b) S1; else { if (c) /* c1 */ S1; else S2; } } else { if (c) /* c2 */ S1; else S2; } Transform (1)? Transform (2)? d = a && b; e = d || c; if (e) { S1; } else { S2; } 11

  12. Problems with Transformed Programs (1/2) (a b) c a b c CACC PC(1) Maintenance is certainly harder with Transform (1) Not recommended! Coverage on Transform (1) PC on the transform does not imply CACC on original A test suit to satisfy PC on the transform (1): a:any element of {1,2,3,4}x{5,6,7,8} b:any element of {1,2}x{3,4} c1:{(3,4)} c2:any element of {5,7}x{6,8} ex. {1,3,4,5,8} CACC on the original does not imply PC on transform Ex. {(2,6),(2,4),(3,4)} does not satisfy PC on the transform due to c2 1 T T T 2 T T F 3 T F T 4 T F F 5 F T T 6 F T F 7 F F T 8 F F F T T T F T F T F O O O O O O O O O (a b) c a as major clause: pa: b c TR={(2,6)} b as major clause: pb: a c TR={(2,4)} c as major clause: pc: (a b) TR= any element of {3,5,7}x{4,6,8}

  13. Problems with Transformed Programs (2/2) b d c(a b) c 1 T T T T 2 T T T F 3 T F F T 4 T F F F 5 F T F T 6 F T F F 7 F F F T 8 F F F F a CACC PC(1) Coverage on Transform (2) Structure used by logic criteria is lost Hence CACC on the transform 2 only requires 3 tests Therefore, it may not be meaningful to transform a program for increasing coverage CACC(2) T T T F T F T F O O O O O O O O O O O O d || c d as major clause: pd: c TR={(2,4),(2,6),(2,8)} c as major clause: pc: d TR={3,5,7}x{4,6,8}

  14. Summary : Logic Coverage for Source Code Predicates appear in decision statements if, while, for, etc. Most predicates have less than four clauses But some applications have predicates with many clauses The hard part of applying logic criteria to source is resolving the internal variables Non-local variables (class, global, etc.) are also input variables if they are used If an input variable is changed within a method, it is treated as an internal variable thereafter To maximize effect of logic coverage criteria: Avoid transformations that hide predicate structure 14

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#