0% found this document useful (0 votes)
71 views174 pages

STM Unit 1

This document provides an overview of control flow graphs and path testing. It defines control flow graphs as simplified, graphical representations of a program's control structure using blocks, decisions, and junctions. Path testing is described as a structural testing technique that aims to execute every statement at least once by selecting test paths. The document discusses concepts like predicates, achievable paths, and path instrumentation. It also covers creating control flow graphs from programs and representing them using linked list notation.

Uploaded by

Guna Sekaran
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views174 pages

STM Unit 1

This document provides an overview of control flow graphs and path testing. It defines control flow graphs as simplified, graphical representations of a program's control structure using blocks, decisions, and junctions. Path testing is described as a structural testing technique that aims to execute every statement at least once by selecting test paths. The document discusses concepts like predicates, achievable paths, and path instrumentation. It also covers creating control flow graphs from programs and representing them using linked list notation.

Uploaded by

Guna Sekaran
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 174

Unit 1

Compiled with reference from:


Software Testing Techniques: Boris Beizer
Craft of Software Testing: Brain Marrick
Control Flow Graphs and Path Testing U2

We will see in Unit 2:

• Concepts of path testing

• Predicates

• Path predicates and Achievable paths

• Path Sensitizing

• Path Instrumentation

• Applications of path testing

In addition we have also,

• Control flow graphs, flowcharts

• Testing when program contains iterative loop statements.

ref boris beizer 2


Control Flow Graphs and Path Testing U2

Path Testing Definition

A family of structural test techniques based on judiciously selecting a set of test paths
through the programs.

 Goal: Pick enough paths to assure that every source statement is executed at least once.

 It is a measure of thoroughness of code coverage.

 It is used most for unit testing on new software.

 Its effectiveness reduces as the software size increases.

 We use Path testing techniques indirectly.

 Path testing concepts are used in and along with other testing techniques

Code Coverage: During unit testing: # stmts executed at least once / total # stmts

ref boris beizer 3


Control Flow Graphs and Path Testing U2

Path Testing contd..

Assumptions:

• Software takes a different path than intended due to some error.

• Specifications are correct and achievable.

• Processing bugs are only in control flow statements

• Data definition & access are correct

Observations

• Structured programming languages need less of path testing.

• Assembly language, Cobol, Fortran, Basic & similar languages make path testing necessary.

ref boris beizer 4


Control Flow Graphs and Path Testing U2

Control Flow Graph

A simplified, abstract, and graphical representation of a program’s control structure


using process blocks, decisions and junctions.

IF NO: ELSE DO
Process Block Do Process A Decisions
A=B?

YES: THEN DO

Junctions 1 2

CASE-OF

CASE 1
1

CASE 2
Case Statement 2

CASE N
N
Control Flow Graph Elements

ref boris beizer 5


Control Flow Graphs and Path Testing U2

Control Flow Graph Elements:

Process Block:

• A sequence of program statements uninterrupted by decisions or junctions with a single


entry and single exit.

Junction:

• A point in the program where control flow can merge (into a node of the graph)
• Examples: target of GOTO, Jump, Continue

Decisions:

• A program point at which the control flow can diverge (based on evaluation of a condition).
• Examples: IF stmt. Conditional branch and Jump instruction.

Case Statements:

• A Multi-way branch or decision.


• Examples: In assembly language: jump addresses table, Multiple GOTOs, Case/Switch

• For test design, Case statement and decision are similar.


ref boris beizer 6
Control Flow Graphs and Path Testing U2

Control Flow Graph Vs Flow Charts

Control Flow Graph Flow Chart


Compact representation of the program Usually a multi-page description

Focuses on Inputs, Outputs, and the control Focuses on the process steps inside
flow into and out of the block.

Inside details of a process block are not Every part of the process block are drawn
shown

ref boris beizer 7


Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

NO
INPUT X, Y INPUT X, Y Z := X + Y V := X - Y Z >= 0 ? JOE
Z := X + Y
V := X - Y
IF Z >= 0 GOTO SAM
LOOP SAM Z := Z + V
JOE: Z := Z + V Z := Z - 1 N := 0 Z := Z - V

SAM: Z := Z - V
FOR N = 0 TO V
NO
Z := Z - 1 N=V? N := N+1
NEXT N
END
YES END One to One Flow Chart

ref boris beizer 8


Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

NO
INPUT X, Y P1 Z >= 0 ? JOE
Z := X + Y
V := X - Y
IF Z >= 0 GOTO SAM
LOOP SAM P2
JOE: Z := Z + V P4 P3

SAM: Z := Z - V
FOR N = 0 TO V
NO
Z := Z - 1 N=V? P5
NEXT N
END
YES END

Simplified Flow Graph


ref boris beizer 9
Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

INPUT X, Y
Z := X + Y 1 2 3 4 5
V := X - Y
IF Z >= 0 GOTO SAM
JOE: Z := Z + V
6 7
SAM: Z := Z - V
FOR N = 0 TO V
Z := Z - 1
NEXT N
END

Simplified Flow Graph


ref boris beizer 10
Control Flow Graphs and Path Testing U2

Linked List Notation of a Control Flow Graph

1 2 3 4 5

6 7
Node Processing, label, Decision Next-Node

1 (BEGIN; INPUT X, Y; Z := X+Y ; V := X-Y) : 2


2 ( Z >= 0 ? ) : 4 (TRUE)
: 3 (FALSE)
3 (JOE: Z := Z + V) : 4
4 (SAM: Z := Z – V; N := 0) : 5
5 (LOOP; Z := Z -1) : 6
6 (N = V ?) : 7 (FALSE)
: END (TRUE)
7 (N := N + 1) :5

ref boris beizer 11


Control Flow Graphs and Path Testing U2

Path Testing Concepts

1. Path is a sequence of statements starting at an entry, junction or decision and ending at


another, or possibly the same junction or decision or an exit point.

Link is a single process (block) in between two nodes.

Node is a junction or decision.

Segment is a sequence of links. A path consists of many segments.

Path segment is a succession of consecutive links that belongs to the same path. (3,4,5)

Length of a path is measured by # of links in the path or # of nodes traversed.

Name of a path is the set of the names of the nodes along the path. (1,2,3 4,5, 6)
(1,2,3,4, 5,6,7, 5,6,7, 5,6)

Path-Testing Path is an “entry to exit” path through a processing block.

ref boris beizer 12


Control Flow Graphs and Path Testing U2

Path Testing Concepts..

2. Entry / Exit for a routines, process blocks and nodes.

Single entry and single exit routines are preferable.

Called well-formed routines.

Formal basis for testing exists.

Tools could generate test cases.

ref boris beizer 13


Control Flow Graphs and Path Testing U2

Path Testing Concepts..

Multi-entry / Multi-exit routines: (ill-formed)

• A Weak approach: Hence, convert it to single-entry / single-exit routine.

• Integration issues:

Large # of inter-process interfaces. Creates problem in Integration.


More # test cases and also a formal treatment is more difficult.

Valid for caller A, B Valid only for x

Multi- Called by x, y Multi-


Valid for caller A Valid for x or y
entry Exit
routine Routine
Valid for caller B, C Valid only for Y

• Theoretical and tools based issues

• A good formal basis does not exist.


• Tools may fail to generate important
ref boris test cases.
beizer 14
Control Flow Graphs and Path Testing U2

Path Testing Concepts contd..

Convert a multi-entry / exit routine to a single entry / exit routine:


• Use an entry parameter and a case statement at the entry => single-entry

Case
Begin 1
1
Begin 2 Begin
2

Begin N
N

• Merge all exits to Single-exit point after setting one exit parameter to a value.

Exit 1 SET E = 1
1

Exit 2
2 SET E = 1

Exit N
N SET E = 1

ref boris beizer 15


Control Flow Graphs and Path Testing U2

Path Testing Concepts


3. Fundamental Path Selection Criteria

Path Testing Criteria :

1. Path Testing (P ):


Execute all possible control flow paths thru the program; but typically restricted to
entry-exit paths.
Implies 100% path coverage. Impossible to achieve.
2. Statement Testing ( P1) :
Execute all statements in the program at least once under the some test.
100% statement coverage => 100% node coverage.
Denoted by C1
C1 is a minimum testing requirement in the IEEE unit test standard: ANSI 87B.

3. Branch Testing (P2) :

Execute enough tests to assure that every branch alternative has been exercised
at least once under some test.
Denoted by C2
Objective: 100% branch coverage and 100% Link coverage.
ref boris beizer 16
Control Flow Graphs and Path Testing U2

Picking enough (the fewest) paths for achieving C1+C2

2
1
Z >= 0 ?
f P1
a
b
NO c NO
YES
END LOOP SAM
N=V?
g e d
6 4 3
5

Paths Decisions Process-link


1. Does every decision have Y & N (C2)? 2 5 a b c d e f g

2. Are call cases of case statement marked (C2)?


abdeg Y Y Y Y Y Y Y
3. Is every three way branch covered (C2)?
4. Is every link covered at least once (C1)? acdeg No Y Y Y Y Y Y

abdefeg Y N Y Y Y Y Y Y

acdefeg N N Y Y Y Y Y Y
ref boris beizer 17
Make small changes in the path changing only 1 link or
Control Flow Graphs and Path Testing U2

Revised path selection Rules

1. Pick the simplest and functionally sensible entry/exit path

2. Pick additional paths as small variations from previous paths. (pick those with no loops,
shorter paths, simple and meaningful)

3. Pick additional paths but without an obvious functional meaning (only to achieve C1+C2
coverage).

4. Be comfortable with the chosen paths. play hunches, use intuition to achieve C1+C2

5. Don’t follow rules slavishly – except for coverage

ref boris beizer 18


Control Flow Graphs and Path Testing U2

4. Testing of Paths involving loops

Bugs in iterative statements apparently are not discovered by C1+C2.


But by testing at the boundaries of loop variable.

Types of Iterative statements

1. Single loop statement. 1 2

2. Nested loops.
1 2 3 4
3. Concatenated Loops.

4. Horrible Loops
1 2 3 4

1 2 3 4 5 6

ref boris beizer 19


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions

Path Predicate Expression


• Every selected path leads to an associated boolean expression, called the path predicate
expression, which characterizes the input values (if any) that will cause that path to be
traversed.

• Select an entry/exit path. Write down un-interpreted predicates for the decisions along the
path. If there are iterations, note also the value of loop-control variable for that pass.
Converting these into predicates that contain only input variables, we get a set of boolean
expressions called path predicate expression.

• Example (inputs being numerical values):

If X 5 > 0 .OR. X 6 < 0 then

X1 + 3X2 + 17 >= 0
X3 = 17
X4 – X1 >= 14 X2

ref boris beizer 20


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

A: X5>0 E: X 6 < 0
B: X1 + 3X2 + 17 >= 0 F: X1 + 3X2 + 17 >= 0
C: X3 = 17 G: X3 = 17
D: X4 – X1 >= 14 X2 H: X4 – X1 >= 14 X2

Converting into the predicate expression form:

ABCD+EBCD (A+E)BCD

If we take the alternative path for the expression: D then

(A + E ) B C D

ref boris beizer 21


Control Flow Graphs and Path Testing U2

Path Sensitization
It’s the act of finding a set of solutions to the path predicate expression.
In practice, for a selected path finding the required input vector is not difficult. If there is difficulty, it
may be due to some bugs.

Heuristic procedures:
Choose an easily sensitizable path set, & pick hard-to-sensitize paths to achieve more coverage.
Identify all the variables that affect the decisions. For process dependent variables,
express the nature of the process dependency as an equation, function, or whatever is
convenient and clear. For correlated variables, express the logical, arithmetic, or
functional relation defining the correlation.

1. Identify correlated predicates and document the nature of the correlation as for variables.
If the same predicate appears at more than one decision, the decisions are obviously
correlated.
2. Start path selection with uncorrelated & independent predicates. If coverage is achieved,
but the path had dependent predicates, something is wrong.
ref boris beizer 22
Control Flow Graphs and Path Testing U2

Path Sensitization… Heuristic procedures: contd..

4. If the coverage is not achieved yet with independent uncorrelated predicates, extend the
path set by using correlated predicates; preferably process independent (not needing
interpretation)

5. If the coverage is not achieved, extend the path set by using dependent predicates
(typically required to cover loops), preferably uncorrelated.
6. Last, use correlated and dependent predicates.

7. For each of the path selected above, list the corresponding input variables. If the variable
is independent, list its value. For dependent variables, interpret the predicate ie., list the
relation. For correlated variables, state the nature of the correlation to other variables.
Determine the mechanism (relation) to express the forbidden combinations of variable
values, if any.
8. Each selected path yields a set of inequalities, which must be simultaneously satisfied to
force the path.

ref boris beizer 23


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization

1. Simple Independent Uncorrelated Predicates

2. Independent Correlated Predicates

3. Dependent Predicates

4. Generic

ref boris beizer 24


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization..


1. Simple Independent Uncorrelated Predicates
_
3 A 5 C
1 4 6 7 2
a _ A b c C d e f
A
C 4 predicates => 16 combinations
h j k Set of possible paths = 8
8
B B i _
_ D
B
l 10
9
D D
m

Path Predicate Values Path Predicate Values

abcdef A C abcdef A C
aghcimkf A B C D abcimjef A C D
aglmjef A B D  abcimkf A C D
aghcdef A B C
aglmkf A B D

A Simple case of solving inequalities. (obtained bybeizer


ref boris the procedure for finding a covering set of paths) 25
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …

2. Correlated Independent Predicates


b Correlated paths => some paths are unachievable
_
Y Y ie., redundant paths.
3 5 ie., n decisions but # paths are < 2 n
1 Y 4 Y 6 2
a d g
_ Due to practice of saving code which makes
Y Y the code very difficult to maintain.
c f

Eliminate the correlated decisions.


Reproduce common code.
b d f
_ 4 5 If a chosen sensible path is not achievable,
Y
3
- there’s a bug.
1 Y 6 2
a g
- design can be simplified.
Y - get better understanding of correlated decisions
c 4’ 5’
d’ e

Correlated decision removed & CFG simplified


ref boris beizer 26
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …

3. Dependent Predicates

Usually most of the processing does not affect the control flow.

Use computer simulation for sensitization in a simplified way.

Dependent predicates contain iterative loop statements usually.

For Loop statements:

Determine the value of loop control variable for a certain # of iterations, and then
work backward to determine the value of input variables (input vector).

ref boris beizer 27


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …


4. The General Case

No simple procedure to solve for values of input vector for a selected path.

1. Select cases to provide coverage on the basis of functionally sensible paths.


Well structured routines allow easy sensitization.
Intractable paths may have a bug.

2. Tackle the path with the fewest decisions first. Select paths with least # of loops.

3. Start at the end of the path and list the predicates while tracing the path in reverse.
Each predicate imposes restrictions on the subsequent (in reverse order) predicate.

4. Continue tracing along the path. Pick the broadest range of values for variables affected
and consistent with values that were so far determined.
5. Continue until the entrance & therefore have established a set of input conditions for the path.

If the solution is not found, pathrefisboris


not achievable,
beizer it could be a bug. 28
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …


4. The General Case contd..

Alternately:

1. In the forward direction, list the decisions to be traversed.


For each decision list the broadest range of input values.

2. Pick a path & adjust all input values. These restricted values are used for next decision.

3. Continue. Some decisions may be dependent on and/or correlated with earlier ones.

4. The path is unachievable if the input values become contradictory, or, impossible.
If the path is achieved, try a new path for additional coverage.

Advantages & Disadvantages of the two approaches:


The forward method is usually less work.
you do not know where you are going as you are tracing the graph.
ref boris beizer 29
Control Flow Graphs and Path Testing U2-1

PATH INSTRUMENTATION

Output of a test:

Results observed. But, there may not be any expected output for a test.

Outcome:
Any change or the lack of change at the output.

Expected Outcome:
Any expected change or the lack of change at the output (predicted as part of
design).

Actual Outcome:
Observed outcome

ref boris beizer 30


Control Flow Graphs and Path Testing U2-1

PATH INSTRUMENTATION

Coincidental Correctness:

When expected & actual outcomes match,


• Necessary conditions for test to pass are met.
• Conditions met are probably not sufficient.
(the expected outcome may be achieved due to a wrong reason)

X = 16 CASE SELECT Y := X - 14

Here
Y := 2
Y is 2

Y := X mod 14

Path Instrumentation is what we have to do confirm that the outcome was


achieved by the intended path.
ref boris beizer 31
Control Flow Graphs and Path Testing – Questions from previous exams U2
PATH INSTRUMENTATION METHODS

1. General strategy:

1. Based on Interpretive tracing & use interpreting trace program.

2. A trace confirms the expected outcome is or isn’t obtained along the intended path.

3. Computer trace may be too massive. Hand tracing may be simpler.

2. Traversal or Link Makers:

Simple and effective

1. Name every link.

2. Instrument the links so that the link is recorded when it is executed (during the test)

3. The succession of letters from a routine’s entry to exit corresponds to the pathname.

ref boris beizer 32


Control Flow Graphs and Path Testing U2

Single Link Marker Instrumentation: An example

No
Input B$ = C=
i A = 7? j k l
A,B,C “a” ? 0?

No No
m
n

No No
B$ = C≤
o p q
“d” ? 0?

r
s

Sample path: ijn

ref boris beizer 33


Control Flow Graphs and Path Testing U2

PATH INTRUMENTATION techniques…

Limitations

• Instrumentation probe (marker, counter) may disturb the timing relations & hide
racing condition bugs.

• Instrumentation probe (marker, counter) may not detect location dependent


bugs.

If the presence or absence of probes modifies things (for example in the data base)
in a faulty way, then the probes hide the bug in the program.

ref boris beizer 34


Control Flow Graphs and Path Testing U2

Implementation & Application of Path Testing

1. Integration, Coverage, and Paths in Called Components

• Mainly used in Unit testing, especially new software.

• In an Idealistic bottom-up integration test process – integrating one component at a time.


Use stubs for lower level component (sub-routines), test interfaces and then replace stubs by
real subroutines.
• In reality, integration proceeds in associated blocks of components. Stubs may be avoided.
Need to think about paths inside the subroutine.

To achieve C1 or C2 coverage:
• Predicate interpretation may require us to treat a subroutine as an in-line-code.
• Sensitization becomes more difficult.
• Selected path may be unachievable as the called components’ processing may block it.

Weaknesses of Path testing:

• It assumes that effective testing can be done one level at a time without bothering what
happens at lower levels.
• predicate coverage problems & blinding.
ref boris beizer 35
Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

2. Application of path testing to New Code

• Do Path Tests for C1 + C2 coverage

• Use the procedure similar to the idealistic bottom-up integration testing, using a
mechanized test suite.

• A path blocked or not achievable could mean a bug.

• When a bug occurs the path may be blocked.

ref boris beizer 36


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

3. Application of path testing to Maintenance

• Path testing is applied first to the modified component.

• Use the procedure similar to the idealistic bottom-up integration testing, but without using
stubs.

• Select paths to achieve C2 over the changed code.

• Newer and more effective strategies could emerge to provide coverage in maintenance
phase.

ref boris beizer 37


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

4. Application of path testing to Rehosting

• Path testing with C1 + C2 coverage is a powerful tool for rehosting old software.

• Software is rehosted as it’s no more cost effective to support the application


environment.

• Use path testing in conjunction with automatic or semiautomatic structural test


generators.

ref boris beizer 38


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing
Application of path testing to Rehosting..

Process of path testing during rehosting

• A translator from the old to the new environment is created & tested. Rehosting
process is to catch bugs in the translator software.

• A complete C1 + C2 coverage path test suite is created for the old software. Tests
are run in the old environment. The outcomes become the specifications for the
rehosted software.

• Another translator may be needed to adapt the tests & outcomes to the new
environment.

• The cost of the process is high, but it avoids risks associated with rewriting the code.

• Once it runs on new environment, it can be optimized or enhanced for new


functionalities (which were not possible in the old environment.)

ref boris beizer 39


Control Flow Graphs and Path Testing – Questions from previous exams U2

For reference – just to see that we have covered these:

Q. Define Path Testing. Explain three path testing criteria.

Q. Illustrate with an example, how statement and branch coverage can be achieved during path selection.
Write all steps involved in it.

Q. Write the effectiveness and limitations of path testing.

Q. Define Path Sensitization. Explain heuristic procedure for sensitizing paths with the help of an example.

Q. How can a program control structure be represented graphically? Explain with the help of required
diagrams.

Q. How is a flowchart differed from a control flow chart?

Q. Explain about Multi entry and Multi exit routines & fundamental path selection criteria

Q. Explain about path instrumentation. How are link counters useful in Path Instrumentation method?

Q. Write about implementation of path testing. What are the various applications of path testing?

Q. Categorize different kinds of loops and explain.

ref boris beizer 40


Unit 1

Compiled with reference from:


Software Testing Techniques: Boris Beizer
Craft of Software Testing: Brain Marrick
Introduction
 Syllabus of Unit 1

 Purpose of testing

 Dichotomies

 Model for testing

 Consequences of bugs

 Taxonomy of bugs

STM-boris beizer 42
Introduction
 What is Testing?

 Related terms : SQA, QC, Verification, Validation

 Verification of functionality for conformation against given specifications


 By execution of the software application

A Test
 Passes: Functionality OK.
 Fails: Application functionality NOK.
 Bug/Defect/Fault: Deviation from expected functionality.
It’s not always obvious.

STM-boris beizer 43
Purpose of Testing

1. To Catch Bugs

2. Productivity Related Reasons

3. Goals for testing

4. 5 Phases in tester’s thinking

5. Testing & Inspection

STM-boris beizer 44
Purpose of Testing
1. To Catch Bugs

• Bugs are due to imperfect Communication among programmers


• Specs, design, low level functionality
• Statistics say: about 3 bugs / 100 statements

2. Productivity Related Reasons


• Insufficient effort in QA => High Rejection Ratio =>
Higher Rework => Higher Net Costs

• Statistics:
• QA costs: 2% for consumer products
80% for critical software

• Quality  Productivity

STM-boris beizer 45
Purpose of Testing
Purpose of testing contd…

3. Goals for testing

Primary goal of Testing: Bug Prevention


Bug prevented  rework effort is saved [bug reporting, debugging, correction, retesting]

If it is not possible, Testing must reach its secondary goal of bug discovery.

Good test design & tests  clear diagnosis  easy bug correction

Test Design Thinking


 From the specs, write test specs first and then code.
 Eliminates bugs at every stage of SDLC.
 If this fails, testing is to detect the remaining bugs.

4. 5 Phases in tester’s thinking

Phase 0: no difference between debugging & testing


 Today, it’s a barrier to good testing & quality software.

STM-boris beizer 46
Purpose of Testing
Purpose of testing contd…

Phase 1: Testing is to show that the software works


 A failed test shows software does not work, even if many tests pass.
 Objective not achievable.

Phase 2: Software does not work

 One failed test proves that.


 Tests are to be redesigned to test corrected software.
 But we do not know when to stop testing.

Phase 3: Test for Risk Reduction

 We apply principles of statistical quality control.


 Our perception of the software quality changes – when a test passes/fails.
 Consequently, perception of product Risk reduces.
 Release the product when the Risk is under a predetermined limit.

STM-boris beizer 47
Purpose of Testing
5 Phases in tester’s thinking continued…

Phase 4: A state of mind regarding “What testing can do & cannot do. What makes
software testable”.
 Applying this knowledge reduces amount of testing.
 Testable software reduces effort
 Testable software has less bugs than the code hard to test

Cumulative goal of all these phases:


 Cumulative and complementary. One leads to the other.
 Phase2 tests alone will not show software works
 Use of statistical methods to test design to achieve good testing at acceptable
risks.
 Most testable software must be debugged, must work, must be hard to break.

STM-boris beizer 48
Purpose of Testing
purpose of testing contd..

5. Testing & Inspection


Inspection is also called static testing.

Methods and Purposes of testing and inspection are different, but the objective is to
catch & prevent different kinds of bugs.

To prevent and catch most of the bugs, we must


Review

Inspect &

Read the code


Do walkthroughs on the code

& then do Testing

STM-boris beizer 49
Purpose of Testing
Further…

Some important points:


Test Design After testing & corrections, Redesign tests & test the redesigned tests

Bug Prevention
 Mix of various approaches, depending on factors
culture, development environment, application, project size, history, language

 Inspection Methods

 Design Style

 Static Analysis

 Languages – having strong syntax, path verification & other controls

 Design methodologies & development environment

Its better to know:

Pesticide paradox

Complexity Barrier
STM-boris beizer 50
STM-boris beizer 51
Dichotomies
Dichotomies

 division into two especially mutually exclusive or contradictory groups or entities


 the dichotomy between theory and practice

Let us look at six of them:

1. Testing & Debugging

2. Functional Vs Structural Testing

3. Designer vs Tester

4. Modularity (Design) vs Efficiency

5. Programming in SMALL Vs programming in BIG

6. Buyer vs Builder

STM-boris beizer 52
Dichotomies
1. Testing Vs Debugging

Testing is to find bugs.

Debugging is to find the cause or misconception leading to the bug.


Their roles are confused to be the same. But, there are differences in goals, methods and
psychology applied to these

# Testing Debugging
1 Starts with known conditions. Uses predefined Starts with possibly unknown initial conditions.
procedure. Has predictable outcomes. End cannot be predicted.

2 Planned, Designed and Scheduled. Procedures & Duration are not constrained.

3 A demo of an error or apparent correctness. A Deductive process.

4 Proves programmer’s success or failure. It is programmer’s Vindication.

5 Should be predictable, dull, constrained, rigid There are intuitive leaps, conjectures,
& inhuman. experimentation & freedom.

STM-boris beizer 53
Dichotomies
Dichotomies contd…

# Testing Debugging

6 Much of testing can be without design Impossible without a detailed design


knowledge. knowledge.
7 Can be done by outsider to the development Must be done by an insider (development
team. team).

8 A theory establishes what testing can do or There are only Rudimentary Results (on how
cannot do. much can be done. Time, effort, how etc.
depends on human ability).

9 Test execution and design can be automated. Debugging - Automation is a dream.

STM-boris beizer 54
Dichotomies
Dichotomies contd..

2. Functional Vs Structural Testing


Functional Testing: Treats a program as a black box. Outputs are verified for conformance to
specifications from user’s point of view.


Structural Testing: Looks at the implementation details: programming style, control method,
source language, database & coding details.


Interleaving of functional & Structural testing:

A good program is built in layers from outside.

Outside layer is pure system function from user’s point of view.

Each layer is a structure with its outer layer being its function.

Examples:

Application2
Malloc()
Link block()

User Devices
O.S.
Application1
STM-boris beizer 55
Dichotomies

Interleaving of functional & Structural testing: (contd..)


For a given model of programs, Structural tests may be done first and later the Functional,
Or vice-versa. Choice depends on which seems to be the natural choice.


Both are useful, have limitations and target different kind of bugs. Functional tests can
detect all bugs in principle, but would take infinite amount of time. Structural tests are
inherently finite, but cannot detect all bugs.


The Art of Testing is how much allocation % for structural vs how much % for functional.

STM-boris beizer 56
Dichotomies
Dichotomies contd..

3. Designer vs Tester

 Completely separated in black box testing. Unit testing may be done by either.
 Artistry of testing is to balance knowledge of design and its biases against ignorance &
inefficiencies.
 Tests are more efficient if the designer, programmer & tester are independent in all of unit,
unit integration, component, component integration, system, formal system feature testing.
 The extent to which test designer & programmer are separated or linked depends on testing
level and the context.

# Programmer / Designer Tester


1 Tests designed by designers are more With knowledge about internal test design, the
oriented towards structural testing and are tester can eliminate useless tests, optimize & do an
limited to its limitations. efficient test design.
2 Likely to be biased. Tests designed by independent testers are bias-
free.
3 Tries to do the job in simplest & cleanest Tester needs to suspicious, uncompromising,
way, trying to reduce the complexity. hostile and obsessed with destroying program.
STM-boris beizer 57
Dichotomies
Dichotomies contd..

4. Modularity (Design) vs Efficiency

4. system and test design can both be modular.

5. A module implies a size, an internal structure and an interface, Or, in other words.

6. A module (well defined discrete component of a system) consists of internal complexity &
interface complexity and has a size.

STM-boris beizer 58
Dichotomies
# Modularity Efficiency
1 Smaller the component easier to understand. Implies more number of components & hence more #
of interfaces increase complexity & reduce efficiency
(=> more bugs likely)
2 Small components/modules are repeatable Higher efficiency at module level, when a bug occurs
independently with less rework (to check if a with small components.
bug is fixed).
3 Microscopic test cases need individual setups More # of test cases implies higher possibility of bugs
with data, systems & the software. Hence can in test cases. Implies more rework and hence less
have bugs. efficiency with microscopic test cases
4 Easier to design large modules & smaller Less complex & efficient. (Design may not be enough
interfaces at a higher level. to understand and implement. It may have to be
broken down to implementation level.)

So:
 Optimize the size & balance internal & interface complexity to increase efficiency

 Optimize the test design by setting the scopes of tests & group of tests (modules) to minimize cost of
test design, debugging, execution & organizing – without compromising effectiveness.

STM-boris beizer 59
Dichotomies
Dichotomies contd..

5. Programming in SMALL Vs programming in BIG

 Impact on the development environment due to the volume of customer requirements.

# Small Big
1 More efficiently done by informal, intuitive A large # of programmers & large # of
means and lack of formality – components.
if it’s done by 1 or 2 persons for small
& intelligent user population.

2 Done for e.g., for oneself, for one’s office or Program size implies non-linear effects (on
for the institute. complexity, bugs, effort, rework quality).

3 Complete test coverage is easily done. Acceptance level could be: Test coverage of 100%
for unit tests and for overall tests ≥ 80%.

STM-boris beizer 60
Dichotomies
6. Buyer Vs Builder (customer vs developer organization)


Buyer & Builder being the same (organization) clouds accountability.

Separate them to make the accountability clear, even if they are in the same organization.

The accountability increases motivation for quality.


The roles of all parties involved are:


Builder:

Designs for & is accountable to the Buyer.
Buyer

Buyer:

Pays for the system.

Hopes to get profits from the services to the User.
User

User:
User

Ultimate beneficiary of the system.
system

Interests are guarded by the Tester.
Tester

Tester:
Tester

Dedicated to the destruction of the s/w (builder)

Tests s/w in the interests of User/Operator.

Operator:

Lives with: Mistakes of the Builder Murky specs of Buyer
Oversights of Tester Complaints of User
STM-boris beizer 61
STM-boris beizer 62
A Model for Testing
 A model for testing - with a project environment - with tests at various levels.
 (1) understand what a project is. (2) look at the roles of the Testing models.

1. PROJECT:


An Archetypical System (product) allows tests without complications (even for a large project).

Testing a one shot routine & very regularly used routine is different.


A model for project in a real world consists of the following 8 components:

1) Application:
Application An online real-time system (with remote terminals) providing timely responses to
user requests (for services).

2) Staff: Manageable size of programming staff with specialists in systems design.

3) Schedule: project may take about 24 months from start to acceptance. 6 month maintenance
period.

4) Specifications:
Specifications is good. documented. Undocumented ones are understood well in the team.

STM-boris beizer 63
A Model for Testing

4) Acceptance test: Application is accepted after a formal acceptance test. At first it’s the
customer’s & then the software design team’s responsibility.

5) Personnel:
Personnel The technical staff comprises of : A combination of experienced professionals &
junior programmers (1 – 3 yrs) with varying degrees of knowledge of the application.

6) Standards:
Standards

Programming, test and interface standard (documented and followed).

A centralized standards data base is developed & administrated

STM-boris beizer 64
A Model for Testing
1. PROJECT: contd …

6) Objectives:
Objectives (of a project)
 A system is expected to operate profitably for > 10 yrs (after installation).
 Similar systems with up to 75% code in common may be implemented in future.

7) Source: (for a new project) is a combination of


 New Code - up to 1/3rd
 From a previous reliable system - up to 1/3rd
 Re-hosted from another language & O.S. - up to 1/3rd
8) History: Typically:
 Developers quit before his/her components are tested.
 Excellent but poorly documented work.
 Unexpected changes (major & minor) from customer may come in
 Important milestones may slip, but the delivery date is met.
 Problems in integration, with some hardware, redoing of some component etc…..

 A model project is

 A Well Run & Successful Project.


 Combination of Glory and Catastrophe.
STM-boris beizer 65
A Model for Testing

The World The Model World

Environment Unexpected
Environment
Model

Expected
Program
Program Tests Outcome
Model

Nature &
Bug Model
Psychology

STM-boris beizer 66
A Model for Testing contd..

2. Roles of Models for Testing


1) Overview:
 Testing process starts with a program embedded in an environment.
 Human nature of susceptibility to error leads to 3 models.
 Create tests out of these models & execute
 Results is expected  It’s okay
unexpected  Revise tests and program. Revise bug model and
program.

2) Environment: includes
 All hardware & software (firmware, OS, linkage editor, loader, compiler, utilities,
libraries) required to make the program run.
 Usually bugs do not result from the environment. (with established h/w & s/w)
 But arise from our understanding of the environment.

3) Program:
 Complicated to understand in detail.
 Deal with a simplified overall view.
 Focus on control structure ignoring processing & focus on processing ignoring
control structure.
 If bug’s not solved, modify the program model to include more facts, & if that fails,
modify the program.
STM-boris beizer 67
A Model for Testing contd..

2. Roles of Models for Testing contd …

4) Bugs: (bug model)


 Categorize the bugs as initialization, call sequence, wrong variable etc..
 An incorrect spec. may lead us to mistake for a program bug.
 There are 9 Hypotheses regarding Bugs.

a. Benign Bug Hypothesis:


 The belief that the bugs are tame & logical.
 Weak bugs are logical & are exposed by logical means.
 Subtle bugs have no definable pattern.

b. Bug locality hypothesis:


 Belief that bugs are localized.
 Subtle bugs affect that component & external to it.

c. Control Dominance hypothesis:


 Belief that most errors are in control structures, but data flow & data structure
errors are common too.
 Subtle bugs are not detectable only thru control structure.
(subtle bugs => from violation of data structure boundaries & data-code separation)

STM-boris beizer 68
A Model for Testing contd..
2. Roles of Models for Testing contd …
4) Bugs: (bug model) contd ..

d. Code/data Separation hypothesis:

 Belief that the bugs respect code & data separation in HOL programming.
 In real systems the distinction is blurred and hence such bugs exist.

e. Lingua Salvator Est hypothesis:

 Belief that the language syntax & semantics eliminate most bugs.
 But, such features may not eliminate Subtle Bugs.

f. Corrections Abide hypothesis:

 Belief that a corrected bug remains corrected.


 Subtle bugs may not. For e.g.
A correction in a data structure ‘DS’ due to a bug in the interface
between modules A & B, could impact module C using ‘DS’.

STM-boris beizer 69
A Model for Testing contd..
2. Roles of Models for Testing contd …
4) Bugs: (bug model) contd ..

g. Silver Bullets hypothesis:

 Belief that - language, design method, representation, environment etc. grant


immunity from bugs.
 Not for subtle bugs.
 Remember the pesticide paradox.

h. Sadism Suffices hypothesis:


 Belief that a sadistic streak, low cunning & intuition (by independent testers) are
sufficient to extirpate most bugs.
 Subtle & tough bugs are may not be … - these need methodology & techniques.

i. Angelic Testers hypothesis:

 Belief that testers are better at test design than programmers at code design.

STM-boris beizer 70
A Model for Testing contd..

2. Roles of Models for Testing contd..

5) Tests:
 Formal procedures.
 Input preparation, outcome prediction and observation, documentation of test,
execution & observation of outcome are subject to errors.
 An unexpected test result may lead us to revise the test and test model.

6) Testing & Levels:


3 kinds of tests (with different objectives)

1) Unit & Component Testing


a. A unit is the smallest piece of software that can be compiled/assembled,
linked, loaded & put under the control of test harness / driver.
b. Unit testing - verifying the unit against the functional specs & also the
implementation against the design structure.
c. Problems revealed are unit bugs.

d. Component is an integrated aggregate of one or more units (even entire system)


e. Component testing - verifying the component against functional specs and the
implemented structure against the design.
f. Problems revealed are component bugs.

STM-boris beizer 71
A Model for Testing contd..
2. Roles of Models for Testing contd …

2) Integration Testing:

 Integration is a process of aggregation of components into larger components.


 Verification of consistency of interactions in the combination of components.
 Examples of integration testing are improper call or return sequences, inconsistent
data validation criteria & inconsistent handling of data objects.
 Integration testing & Testing Integrated Objects are different

A B D
A B

C
 Sequence of Testing:
 Unit/Component tests for A, B. Integration tests for A & B. Component testing
for (A,B) component

STM-boris beizer 72
A Model for Testing contd..
2. Roles of Models for Testing contd …

3) System Testing

a. System is a big component.


b. Concerns issues & behaviors that can be tested at the level of entire or major part
of the integrated system.
c. Includes testing for performance, security, accountability, configuration sensitivity,
start up & recovery

After understanding a Project, Testing Model, now let’s see finally,

Role of the Model of testing :

 Used for the testing process until system behavior is correct or until the model is
insufficient (for testing).

 Unexpected results may force a revision of the model.

 Art of testing consists of creating, selecting, exploring and revising models.

 The model should be able to express the program.

STM-boris beizer 73
Oracles, completeness of testing

Additional reading …

Oracles – expected outcome of testing

Sources of Oracles -

Possibility of complete testing (100%) - approaches

STM-boris beizer 74
Taxonomy of Bugs etc..

We will now look at

1. Importance of Bugs - statistical quantification of impact

2. Consequences of Bugs, Nightmares, To stop testing

3. Taxonomy of Bugs - along with some remedies

In order to be able to create an organization’s own Bug Importance Model


for the sake of controlling associated costs…

STM-boris beizer 75
Importance of Bugs
We will see the importance and the consequences of Bugs before turning to the taxonomy of bugs.

Importance of Bugs
Depends on frequency, correction cost, installation cost & consequences of bugs
1. Frequency
• Statistics from different sources are in table 2.1 (Beizer)
• Note the bugs with higher frequency & mark them in this order:

Control structures, Data structures, Features & Functionality, Coding,


Integration, Requirements & others…

• Higher frequency  higher rework & other consequences


• Frequency may not depend on the application in context or the environment.

2. Correction Cost

• Sum of detection & Correction.


• High if a bug is detected later in the SDLC.
• Depends on system size, application and the environment too.

STM-boris beizer 76
Importance of Bugs
Importance of Bugs contd …

3. Installation Cost
• Depends on # of installations.
• May dominate all other costs, as we nee to distribute bug fixes across all installations.
• Depends also on application and environment.

4. Consequences (effects)

• Measure by the mean size of the awards given to the victims of the bug.
• Depend on the application and environment.

A metric for Importance of Bugs

Importance = frequency * ( Correction_cost + Installation_cost + Consequential_cost )

• Bug importance is more important than the raw frequency


• Own Importance model for bugs may need to be created (the above costs depend on
application and the environment)

• Hence we look at consequences and taxonomy in detail….


STM-boris beizer 77
Consequences of Bugs
Consequences: (how bugs may affect users)

These range from mild to catastrophic on a 10 point scale.

• Mild
• Aesthetic bug such as misspelled output or mal-aligned print-out.

• Moderate
• Outputs are misleading or redundant impacting performance.

• Annoying
• Systems behavior is dehumanizing for e.g. names are truncated/modified arbitrarily,
bills for $0.0 are sent.
• Till the bugs are fixed operators must use unnatural command sequences to get
proper response.

• Disturbing
• Legitimate transactions refused.
• For e.g. ATM machine may malfunction with ATM card / credit card.

• Serious
• Losing track of transactions & transaction events. Hence accountability is lost.
STM-boris beizer 78
Consequences of Bugs
Consequences contd …

• Very serious
System does another transaction instead of requested e.g. Credit another account,
convert withdrawals to deposits.

• Extreme
• Frequent & Arbitrary - not sporadic & unusual.

• Intolerable
• Long term unrecoverable corruption of the Data base.
(not easily discovered and may lead to system down.)

• Catastrophic
• System fails and shuts down.

• Infectious
• Corrupts other systems, even when it may not fail.

STM-boris beizer 79
Consequences of Bugs
Consequences contd …

Assignment of severity

• Assign flexible & relative rather than absolute values to the bug (types).
• Number of bugs and their severity are factors in determining the quality quantitatively .
• Organizations design & use quantitative, quality metrics based on the above.

• Parts are weighted depending on environment, application, culture, correction cost,


current SDLC phase & other factors.

• Nightmares

• Define the nightmares – that could arise from bugs – for the context of the
organization/application.

• Quantified nightmares help calculate importance of bugs.


• That helps in making a decision on when to stop testing & release the product.

STM-boris beizer 80
Consequences of Bugs
Consequences contd …

When to stop Testing

1. List all nightmares in terms of the symptoms & reactions of the user to their consequences.
2. Convert the consequences of into a cost. There could be rework cost. (but if the scope extends to
the public, there could be the cost of lawsuits, lost business, nuclear reactor meltdowns.)

3. Order these from the costliest to the cheapest. Discard those with which you can live with.
4. Based on experience, measured data, intuition, and published statistics postulate the kind of
bugs causing each symptom. This is called ‘bug design process’. A bug type can cause
multiple symptoms.
5. Order the causative bugs by decreasing probability (judged by intuition, experience, statistics etc.) .
Calculate the importance of a bug type as:

Importance of bug type j =  ∑ C j k P j k where,


all k
C j k = cost due to bug type j causing nightmare k
P j k = probability of bug type j causing nightmare k

( Cost due to all bug types = ∑ ∑ C jk P jk )


all k all j
STM-boris beizer 81
Consequences of Bugs
Consequences contd … When to stop Testing contd ..

6. Rank the bug types in order of decreasing importance.

7. Design tests & QA inspection process with most effective against the most important bugs.

8. If a test is passed or when correction is done for a failed test, some nightmares disappear.
As testing progresses, revise the probabilities & nightmares list as well as the test strategy.

9. Stop testing when probability (importance & cost) proves to be inconsequential.

This procedure could be implemented formally in SDLC.

Important points to Note:

• Designing a reasonable, finite # of tests with high probability of removing the nightmares.
• Test suites wear out.
• As programmers improve programming style, QA improves.
• Hence, know and update test suites as required.

STM-boris beizer 82
Taxonomy of Bugs ..
we had seen the:

1. Importance of Bugs - statistical quantification of impact


2. Consequences of Bugs - causes, nightmares, to stop testing

We will now see the:

3. Taxonomy of Bugs - along with some remedies

In order to be able to create an organization’s own Bug Importance Model


for the sake of controlling associated costs…

STM-boris beizer 83
Taxonomy of Bugs .. and remedies
Reference of IEEE Taxonomy: IEEE 87B

 Why Taxonomy ?
To study the consequences, nightmares, probability, importance, impact and the methods of prevention
and correction.

 Adopt known taxonomy to use it as a statistical framework on which your testing strategy is based.

 6 main categories with sub-categories..

1)Requirements, Features, Functionality Bugs 24.3% bugs

2)Structural Bugs 25.2%

3)Data Bugs 22.3%

4)Coding Bugs 9.0%

5)Interface, Integration and System Bugs 10.7%

6)Testing & Test Design Bugs 2.8 %

STM-boris beizer 84
Taxonomy of Bugs .. and remedies
Reference of IEEE Taxonomy: IEEE 87B

1) Requirements, Features, Functionality Bugs

3 types of bugs : Requirement & Specs, Feature, & feature interaction bugs

I. Requirements & Specs.

 Incompleteness, ambiguous or self-contradictory


 Analyst’s assumptions not known to the designer

 Some thing may miss when specs change


 These are expensive: introduced early in SDLC and removed at the last

II. Feature Bugs

 Specification problems create feature bugs


 Wrong feature bug has design implications

 Missing feature is easy to detect & correct


 Gratuitous enhancements can accumulate bugs, if they increase complexity

 Removing features may foster bugs

STM-boris beizer 85
Taxonomy of Bugs .. and remedies
1) Requirements, Features, Functionality Bugs contd..

III. Feature Interaction Bugs

 Arise due to unpredictable interactions between feature groups or individual features. The
earlier removed the better as these are costly if detected at the end.
 Examples: call forwarding & call waiting. Federal, state & local tax laws.
 No magic remedy. Explicitly state & test important combinations

Remedies

 Use high level formal specification languages to eliminate human-to-human communication


 It’s only a short term support & not a long term solution

 Short-term Support:
 Specification languages formalize requirements & so automatic test generation is possible.
It’s cost-effective.

 Long-term support:
 Even with a great specification language, problem is not eliminated, but is shifted to a higher
level. Simple ambiguities & contradictions may only be removed, leaving tougher bugs.

Testing Techniques

 Functional test techniques - transaction flow testing, syntax testing, domain testing, logic
testing, and state testing - can eliminate requirements & specifications bugs.
STM-boris beizer 86
Taxonomy of Bugs .. and remedies
2. Structural Bugs

we look at the 5 types, their causes and remedies.

I. Control & Sequence bugs


II. Logic Bugs
III. Processing bugs
IV. Initialization bugs
V. Data flow bugs & anomalies

1. Control & Sequence Bugs:

 Paths left out, unreachable code, spaghetti code, and pachinko code.
 Improper nesting of loops, Incorrect loop-termination or look-back, ill-conceived switches.

 Missing process steps, duplicated or unnecessary processing, rampaging GOTOs.

 Novice programmers.
 Old code (assembly language & Cobol)

Prevention and Control:

 Theoretical treatment and,


 Unit, structural, path, & functional testing .
STM-boris beizer 87
Taxonomy of Bugs .. and remedies
2. Structural Bugs contd..

II. Logic Bugs

 Misunderstanding of the semantics of the control structures & logic operators


 Improper layout of cases, including impossible & ignoring necessary cases,

 Using a look-alike operator, improper simplification, confusing Ex-OR with inclusive OR.
 Deeply nested conditional statements & using many logical operations in 1 stmt.

Prevention and Control:

Logic testing, careful checks, functional testing

III. Processing Bugs

 Arithmetic, algebraic, mathematical function evaluation, algorithm selection & general.


processing, data type conversion, ignoring overflow, improper use of relational operators.

Prevention

 Caught in Unit Testing & have only localized effect


 Domain testing methods

STM-boris beizer 88
Taxonomy of Bugs .. and remedies
Structural bugs contd..
IV. Initialization Bugs

 Forgetting to initialize work space, registers, or data areas.


 Wrong initial value of a loop control parameter.

 Accepting a parameter without a validation check.


 Initialize to wrong data type or format.
 Very common.

Remedies (prevention & correction)

 Programming tools, Explicit declaration & type checking in source language,


preprocessors.
 Data flow test methods help design of tests and debugging.

V. Dataflow Bugs & Anomalies

 Run into an un-initialized variable.


 Not storing modified data.

 Re-initialization without an intermediate use.


 Detected mainly by execution (testing).

Remedies (prevention & correction)

 STM-boris
Data flow testing methods & beizer
matrix based testing methods. 89
Taxonomy of Bugs .. and remedies
3. Data Bugs

Depend on the types of data or the representation of data. There are 4 sub categories.

I. Generic Data Bugs

II. Dynamic Data Vs Static Data

III. Information, Parameter, and Control Bugs

IV. Contents, Structure & Attributes related Bugs

STM-boris beizer 90
Taxonomy of Bugs .. and remedies
Data Bugs contd…

I. Generic Data Bugs

 Due to data object specs., formats, # of objects & their initial values.

 Common as much as in code, especially as the code migrates to data.

 Data bug introduces an operative statement bug & is harder to find.

 Generalized components with reusability – when customized from a large parametric data to
specific installation.

Remedies (prevention & correction):

 Using control tables in lieu of code facilitates software to handle many transaction types with
fewer data bugs. Control tables have a hidden programming language in the database.

 Caution - there’s no compiler for the hidden control language in data tables

STM-boris beizer 91
Taxonomy of Bugs .. and remedies
II. Dynamic Data Vs Static Data

Dynamic Data Bugs Static Data Bugs


Transitory. Difficult to catch. Fixed in form & content.
Due to an error in a shared storage object initialization. Appear in source code or data base, directly or
indirectly
Due to unclean / leftover garbage in a shared resource. Software to produce object code creates a static data
table – bugs possible
Examples Examples
Generic & shared variable Telecom system software: generic parameters, a
generic large program & site adapter program to set
parameter values, build data declarations etc.
Shared data structure Postprocessor : to install software packages. Data is
initialized at run time – with configuration handled by
tables.
Prevention Prevention

Data validation, unit testing Compile time processing


Source language features

STM-boris beizer 92
Taxonomy of Bugs .. and remedies
Data Bugs contd..

III. Information, Parameter, and Control Bugs

Static or dynamic data can serve in any of the three forms. It is a matter of perspective.

What is information can be a data parameter or control data else where in a program.

Examples: name, hash code, function using these. A variable in different contexts.

 Information: dynamic, local to a single transaction or task.


 Parameter: parameters passed to a call.
 Control: data used in a control structure for a decision.

Bugs

 Usually simple bugs and easy to catch.


 When a subroutine (with good data validation code) is modified, forgetting to update the
data validation code, results in these bugs.

Preventive Measures (prevention & correction)

 Proper Data validation code.

STM-boris beizer 93
Taxonomy of Bugs .. and remedies
Data Bugs contd..

IV. Contents, Structure & Attributes related Bugs

 Contents: are pure bit pattern & bugs are due to misinterpretation or corruption of it.
 Structure: Size, shape & alignment of data object in memory. A structure may have
substructures.
 Attributes: Semantics associated with the contents (e.g. integer, string, subroutine).

Bugs

 Severity & subtlety increases from contents to attributes as they get less formal.
 Structural bugs may be due to wrong declaration or when same contents are interpreted by
multiple structures differently (different mapping).

 Attribute bugs are due to misinterpretation of data type, probably at an interface

Preventive Measures (prevention & correction)

 Good source lang. documentation & coding style (incl. data dictionary).
dictionary
 Data structures be globally administered. Local data migrates to global.

 Strongly typed languages prevent mixed manipulation of data.


 In an assembly lang. program, use field-access macros & not directly accessing any field.

STM-boris beizer 94
Taxonomy of Bugs .. and remedies
4. Coding Bugs

 Coding errors create other kinds of bugs.

 Syntax errors are removed when compiler checks syntax.

 Coding errors
typographical, misunderstanding of operators or statements or could be just arbitrary.

 Documentation Bugs

 Erroneous comments could lead to incorrect maintenance.

 Testing techniques cannot eliminate documentation bugs.

 Solution:

Inspections, QA, automated data dictionaries & specification systems.

STM-boris beizer 95
Taxonomy of Bugs .. and remedies
5. Interface, Integration and Systems Bugs

There are 9 types of bugs of this type. User

1) External Interfaces System

2) Internal Interfaces component

component
3) Hardware Architecture Bugs

4) Operating System Bugs

5) Software architecture bugs


hardware

6) Control & Sequence bugs

7) Resource management bugs O. S.


Drivers

8) Integration bugs
Application
9) System bugs software

STM-boris beizer 96
Taxonomy of Bugs .. and remedies
5. Interface, Integration and Systems Bugs contd..

1) External Interfaces

 Means to communicate with the world: drivers, sensors, input terminals, communication lines.
 Primary design criterion should be - robustness.

 Bugs: invalid timing, sequence assumptions related to external signals, misunderstanding external
formats and no robust coding.
 Domain testing, syntax testing & state testing are suited to testing external interfaces.

2) Internal Interfaces

 Must adapt to the external interface.


 Have bugs similar to external interface

 Bugs from improper


 Protocol design, input-output formats, protection against corrupted data, subroutine call
sequence, call-parameters.

 Remedies (prevention & correction):

 Test methods of domain testing & syntax testing.


 Good design & standards: good trade off between # of internal interfaces & complexity of the
interface.
 Good integration testing is to testSTM-boris
all internal beizer
interfaces with external world. 97
Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

3) Hardware Architecture Bugs:

 A s/w programmer may not see the h/w layer / architecture.

 S/w bugs originating from hardware architecture are due to misunderstanding of how h/w works.

 Bugs are due to errors in:

 Paging mechanism, address generation


 I/O device instructions, device status code, device protocol

 Expecting a device to respond too quickly, or to wait for too long for response, assuming a
device is initialized, interrupt handling, I/O device address

 H/W simultaneity assumption, H/W race condition ignored, device data format error etc..

 Remedies (prevention & correction):

 Good software programming & Testing.

 Centralization of H/W interface software.

 Nowadays hardware has special test modes & test instructions to test the H/W function.

 An elaborate H/W simulator STM-boris beizer


may also be used. 98
Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

4) Operating System Bugs:

 Due to:

 Misunderstanding of H/W architecture & interface by the O. S.

 Not handling of all H/W issues by the O. S.

 Bugs in O. S. itself and some corrections may leave quirks.

 Bugs & limitations in O. S. may be buried some where in the documentation.

 Remedies (prevention & correction):

 Same as those for H/W bugs.

 Use O. S. system interface specialists

 Use explicit interface modules or macros for all O.S. calls.

 The above may localize bugs and make testing simpler.

STM-boris beizer 99
Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

5) Software Architecture Bugs: (called Interactive)

The subroutines pass thru unit and integration tests without detection of these bugs. Depend on
the Load, when the system is stressed. These are the most difficult to find and correct.

 Due to:

 Assumption that there are no interrupts, Or, Failure to block or unblock an interrupt.
 Assumption that code is re-entrant or not re-entrant.
 Bypassing data interlocks, Or, Failure to open an interlock.
 Assumption that a called routine is memory resident or not.
 Assumption that the registers and the memory are initialized, Or, that their content did not
change.
 Local setting of global parameters & Global setting of local parameters.

 Remedies:

 Good design for software architecture.

 Test Techniques

 All test techniques are useful in detecting these bugs, Stress tests in particular.

STM-boris beizer 100


Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

6) Control & Sequence Bugs:

 Due to:

 Ignored timing
 Assumption that events occur in a specified sequence.
 Starting a process before its prerequisites are met.
 Waiting for an impossible combination of prerequisites.
 Not recognizing when prerequisites are met.
 Specifying wrong priority, Program state or processing level.
 Missing, wrong, redundant, or superfluous process steps.

 Remedies:

 Good design.
 highly structured sequence control - useful
 Specialized internal sequence-control mechanisms such as an internal job control language
– useful.
 Storage of Sequence steps & prerequisites in a table and interpretive processing by control
processor or dispatcher - easier to test & to correct bugs.

 Test Techniques

 Path testing as applied to Transaction Flow graphs is effective.


STM-boris beizer 101
Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

7) Resource Management Problems:


 Resources: Internal: Memory buffers, queue blocks etc. External: discs etc.

 Due to:

 Wrong resource used (when several resources have similar structure or different kinds of
resources in the same pool).
 Resource already in use, or deadlock

 Resource not returned to the right pool, Failure to return a resource. Resource use forbidden
to the caller.

 Remedies:

 Design: keeping resource structure simple with fewest kinds of resources, fewest pools,
and no private resource mgmt.
 Designing a complicated resource structure to handle all kinds of transactions to save
memory is not right.
 Centralize management of all resource pools thru managers, subroutines, macros etc.

 Test Techniques

 Path testing, transaction flow testing, data-flow testing & stress testing.
STM-boris beizer 102
Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

8) Integration Bugs:

Are detected late in the SDLC and cause several components and hence are very costly.

 Due to:

 Inconsistencies or incompatibilities between components.


 Error in a method used to directly or indirectly transfer data between components. Some
communication methods are: data structures, call sequences, registers, semaphores,
communication links, protocols etc..

 Remedies:

 Employ good integration strategies. ***

 Test Techniques

 Those aimed at interfaces, domain testing, syntax testing, and data flow testing when
applied across components.

STM-boris beizer 103


Taxonomy of Bugs .. and remedies
Interface, Integration and Systems Bugs contd …

9) System Bugs:

 Infrequent, but are costly

 Due to:

 Bugs not ascribed to a particular component, but result from the totality of interactions
among many components such as:
programs, data, hardware, & the O.S.

 Remedies:
 Thorough testing at all levels and the test techniques mentioned below

 Test Techniques

 Transaction-flow testing.

 All kinds of tests at all levels as well as integration tests - are useful.

STM-boris beizer 104


Taxonomy of Bugs .. and remedies
6. Testing & Test Design Bugs

Bugs in Testing (scripts or process) are not software bugs.

It’s difficult & takes time to identify if a bug is from the software or from the test script/procedure.

1) Bugs could be due to:

 Tests require code that uses complicated scenarios & databases, to be executed.

 Though an independent functional testing provides an un-biased point of view, this lack of bias
may lead to an incorrect interpretation of the specs.

 Test Criteria

 Testing process is correct, but the criterion for judging software’s response to tests is
incorrect or impossible.

 If a criterion is quantitative (throughput or processing time), the measurement test can perturb
the actual value.

STM-boris beizer 105


Taxonomy of Bugs .. and remedies
Testing & Test Design Bugs contd…

 Remedies:

1. Test Debugging:

Testing & Debugging tests, test scripts etc. Simpler when tests have
localized affect.

2. Test Quality Assurance:

To monitor quality in independent testing and test design.

3. Test Execution Automation:

Test execution bugs are eliminated by test execution automation tools


&
not using manual testing.

4. Test Design Automation:

Test design is automated like automation of software development.


For a given productivity rate, It reduces bug count.
STM-boris beizer 106
Taxonomy of Bugs .. and remedies
A word on productivity

At the end of a long study on taxonomy, we could say

Good design inhibits bugs and is easy to test. The two factors are multiplicative and results in
high productivity.

Good test works best on good code and good design.

Good test cannot do a magic on badly designed software.

STM-boris beizer 107


30.0

25.0
Bugs percentage

20.0

15.0

10.0

5.0

0.0

Activity

Source: Boris Beizer


STM-boris beizer 108
Questions from Previous Exams U1

Q. Give Differences between functional and structural testing.


Ans: Dichotomies 2

Q. Differentiate between function and structure


Ans: Dichotomies 2

Q. Specify on which factors the importance of bugs depends. Give the metric for it.
Ans: Importance of bugs as discussed in chapter 2

Q. Briefly explain various consequences of bugs.


Ans: consequences as seen from the user point of view

Q. What are different types of testing? Explain them briefly.


Ans: levels of testing as mentioned in a model for testing: unit, component, integration, system.
(possibly could add … functional & structural)..
Q. Give brief explanation of white box testing & black box testing and give the differences between them.
Ans: same as for dichotomies 2 : function vs structure

Q. What are the differences between static data and dynamic data?
Ans: 2nd point in Data bugs in taxonomy of bugs

Q. What are the principles of test case design? Explain.


Ans: Dichotomies 4

Q. What are the remedies for test bugs?


Ans: 6th and last point in taxonomy of bugs.. Remedies.
STM-boris beizer 109
Unit 1

Compiled with reference from:


Software Testing Techniques: Boris Beizer
Craft of Software Testing: Brain Marrick
Control Flow Graphs and Path Testing U2

We will see in Unit 2:

• Concepts of path testing

• Predicates

• Path predicates and Achievable paths

• Path Sensitizing

• Path Instrumentation

• Applications of path testing

In addition we have also,

• Control flow graphs, flowcharts

• Testing when program contains iterative loop statements.

ref boris beizer 111


Control Flow Graphs and Path Testing U2

Path Testing Definition

A family of structural test techniques based on judiciously selecting a set of test paths
through the programs.

 Goal: Pick enough paths to assure that every source statement is executed at least once.

 It is a measure of thoroughness of code coverage.

 It is used most for unit testing on new software.

 Its effectiveness reduces as the software size increases.

 We use Path testing techniques indirectly.

 Path testing concepts are used in and along with other testing techniques

Code Coverage: During unit testing: # stmts executed at least once / total # stmts

ref boris beizer 112


Control Flow Graphs and Path Testing U2

Path Testing contd..

Assumptions:

• Software takes a different path than intended due to some error.

• Specifications are correct and achievable.

• Processing bugs are only in control flow statements

• Data definition & access are correct

Observations

• Structured programming languages need less of path testing.

• Assembly language, Cobol, Fortran, Basic & similar languages make path testing necessary.

ref boris beizer 113


Control Flow Graphs and Path Testing U2

Control Flow Graph

A simplified, abstract, and graphical representation of a program’s control structure


using process blocks, decisions and junctions.

IF NO: ELSE DO
Process Block Do Process A Decisions
A=B?

YES: THEN DO

Junctions 1 2

CASE-OF

CASE 1
1

CASE 2
Case Statement 2

CASE N
N
Control Flow Graph Elements

ref boris beizer 114


Control Flow Graphs and Path Testing U2

Control Flow Graph Elements:

Process Block:

• A sequence of program statements uninterrupted by decisions or junctions with a single


entry and single exit.

Junction:

• A point in the program where control flow can merge (into a node of the graph)
• Examples: target of GOTO, Jump, Continue

Decisions:

• A program point at which the control flow can diverge (based on evaluation of a condition).
• Examples: IF stmt. Conditional branch and Jump instruction.

Case Statements:

• A Multi-way branch or decision.


• Examples: In assembly language: jump addresses table, Multiple GOTOs, Case/Switch

• For test design, Case statement and decision are similar.


ref boris beizer 115
Control Flow Graphs and Path Testing U2

Control Flow Graph Vs Flow Charts

Control Flow Graph Flow Chart


Compact representation of the program Usually a multi-page description

Focuses on Inputs, Outputs, and the control Focuses on the process steps inside
flow into and out of the block.

Inside details of a process block are not Every part of the process block are drawn
shown

ref boris beizer 116


Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

NO
INPUT X, Y INPUT X, Y Z := X + Y V := X - Y Z >= 0 ? JOE
Z := X + Y
V := X - Y
IF Z >= 0 GOTO SAM
LOOP SAM Z := Z + V
JOE: Z := Z + V Z := Z - 1 N := 0 Z := Z - V

SAM: Z := Z - V
FOR N = 0 TO V
NO
Z := Z - 1 N=V? N := N+1
NEXT N
END
YES END One to One Flow Chart

ref boris beizer 117


Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

NO
INPUT X, Y P1 Z >= 0 ? JOE
Z := X + Y
V := X - Y
IF Z >= 0 GOTO SAM
LOOP SAM P2
JOE: Z := Z + V P4 P3

SAM: Z := Z - V
FOR N = 0 TO V
NO
Z := Z - 1 N=V? P5
NEXT N
END
YES END

Simplified Flow Graph


ref boris beizer 118
Control Flow Graphs and Path Testing U2

Creation of Control Flow Graph from a program

• One statement to one element translation to get a Classical Flow chart


• Add additional labels as needed
• Merge process steps
• A process box is implied on every junction and decision
• Remove External Labels
• Represent the contents of elements by numbers.
• We have now Nodes and Links

INPUT X, Y
Z := X + Y 1 2 3 4 5
V := X - Y
IF Z >= 0 GOTO SAM
JOE: Z := Z + V
6 7
SAM: Z := Z - V
FOR N = 0 TO V
Z := Z - 1
NEXT N
END

Simplified Flow Graph


ref boris beizer 119
Control Flow Graphs and Path Testing U2

Linked List Notation of a Control Flow Graph

1 2 3 4 5

6 7
Node Processing, label, Decision Next-Node

1 (BEGIN; INPUT X, Y; Z := X+Y ; V := X-Y) : 2


2 ( Z >= 0 ? ) : 4 (TRUE)
: 3 (FALSE)
3 (JOE: Z := Z + V) : 4
4 (SAM: Z := Z – V; N := 0) : 5
5 (LOOP; Z := Z -1) : 6
6 (N = V ?) : 7 (FALSE)
: END (TRUE)
7 (N := N + 1) :5

ref boris beizer 120


Control Flow Graphs and Path Testing U2

Path Testing Concepts

1. Path is a sequence of statements starting at an entry, junction or decision and ending at


another, or possibly the same junction or decision or an exit point.

Link is a single process (block) in between two nodes.

Node is a junction or decision.

Segment is a sequence of links. A path consists of many segments.

Path segment is a succession of consecutive links that belongs to the same path. (3,4,5)

Length of a path is measured by # of links in the path or # of nodes traversed.

Name of a path is the set of the names of the nodes along the path. (1,2,3 4,5, 6)
(1,2,3,4, 5,6,7, 5,6,7, 5,6)

Path-Testing Path is an “entry to exit” path through a processing block.

ref boris beizer 121


Control Flow Graphs and Path Testing U2

Path Testing Concepts..

2. Entry / Exit for a routines, process blocks and nodes.

Single entry and single exit routines are preferable.

Called well-formed routines.

Formal basis for testing exists.

Tools could generate test cases.

ref boris beizer 122


Control Flow Graphs and Path Testing U2

Path Testing Concepts..

Multi-entry / Multi-exit routines: (ill-formed)

• A Weak approach: Hence, convert it to single-entry / single-exit routine.

• Integration issues:

Large # of inter-process interfaces. Creates problem in Integration.


More # test cases and also a formal treatment is more difficult.

Valid for caller A, B Valid only for x

Multi- Called by x, y Multi-


Valid for caller A Valid for x or y
entry Exit
routine Routine
Valid for caller B, C Valid only for Y

• Theoretical and tools based issues

• A good formal basis does not exist.


• Tools may fail to generate important
ref boris test cases.
beizer 123
Control Flow Graphs and Path Testing U2

Path Testing Concepts contd..

Convert a multi-entry / exit routine to a single entry / exit routine:


• Use an entry parameter and a case statement at the entry => single-entry

Case
Begin 1
1
Begin 2 Begin
2

Begin N
N

• Merge all exits to Single-exit point after setting one exit parameter to a value.

Exit 1 SET E = 1
1

Exit 2
2 SET E = 1

Exit N
N SET E = 1

ref boris beizer 124


Control Flow Graphs and Path Testing U2

Path Testing Concepts contd..

Test Strategy for Multi-entry / exit routines

1. Get rid of them.


2. Control those you cannot get rid of.

3. Convert to single entry / exit routines.


4. Do unit testing by treating each entry/exit combination as if it were a completely different
routine.

5. Recognize that integration testing is heavier


6. Understand the strategies & assumptions in the automatic test generators and confirm that
they do (or do not) work for multi-entry/multi exit routines.

ref boris beizer 125


Control Flow Graphs and Path Testing U2

Path Testing Concepts

3. Fundamental Path Selection Criteria

A minimal set of paths to be able to do complete testing.

• Each pass through a routine from entry to exit, as one traces through it, is a potential path.

• The above includes the tracing of 1..n times tracing of an interactive block each separately.

• Note: A bug could make a mandatory path not executable or could create new paths not
related to processing.

Complete Path Testing prescriptions:

1. Exercise every path from entry to exit.


2. Exercise every statement or instruction at least once.
3. Exercise every branch and case statement in each direction, at least once.

 Point 1 => point 2 and 3.  Point 2 & 3 are not the same
 Point 1 is impractical.  For a structured language, Point 3 => Point 2

ref boris beizer 126


Control Flow Graphs and Path Testing U2

Path Testing Concepts

Path Testing Criteria :

1. Path Testing (P ):


Execute all possible control flow paths thru the program; but typically restricted
to entry-exit paths.
Implies 100% path coverage. Impossible to achieve.
2. Statement Testing ( P1) :
Execute all statements in the program at least once under the some test.
100% statement coverage => 100% node coverage.
Denoted by C1
C1 is a minimum testing requirement in the IEEE unit test standard: ANSI 87B.

3. Branch Testing (P2) :

Execute enough tests to assure that every branch alternative has been
exercised at least once under some test.
Denoted by C2
Objective: 100% branch coverage and 100% Link coverage.
ref boris
For well structured software, beizer testing & coverage include statement 127
branch
coverage
Control Flow Graphs and Path Testing U2

Picking enough (the fewest) paths for achieving C1+C2

2
1 NO
Z >= 0 ?
f P1
a
b
NO c
YES
END LOOP SAM
N=V?
g e d
6 4 3
5

Paths Decisions Process-link


1. Does every decision have Y & N (C2)? 2 5 a b c d e f g

2. Are call cases of case statement marked (C2)?


abdeg Y Y Y Y Y Y Y
3. Is every three way branch covered (C2)?
4. Is every link covered at least once (C1)? acdeg No Y Y Y Y Y Y

abdefeg Y N Y Y Y Y Y Y

acdefeg No Y Y Y Y Y Y Y
ref boris beizer 128
Make small changes in the path changing only 1 link or
Control Flow Graphs and Path Testing U2

Revised path selection Rules

1. Pick the simplest and functionally sensible entry/exit path

2. Pick additional paths as small variations from previous paths. (pick those with no loops,
shorter paths, simple and meaningful)

3. Pick additional paths but without an obvious functional meaning (only to achieve C1+C2
coverage).

4. Be comfortable with the chosen paths. play hunches, use intuition to achieve C1+C2

5. Don’t follow rules slavishly – except for coverage

ref boris beizer 129


Control Flow Graphs and Path Testing U2

4. Testing of Paths involving loops

Bugs in iterative statements apparently are not discovered by C1+C2.


But by testing at the boundaries of loop variable.

Types of Iterative statements

1. Single loop statement.

2. Nested loops.

3. Concatenated Loops.

4. Horrible Loops

Let us denote the Minimum # of iterations by nmin


the Maximum # of iterations by nmax
the value of loop control variable by V
the #of test cases by T
the # of iterations carried out by n

• Later, we analyze the Loop-Testing times


ref boris beizer 130
Control Flow Graphs and Path Testing U2

Testing of path involving loops…

1. Testing a Single Loop Statement (three cases)

Case 1. nmin = 0, nmax = N, no excluded values

1. Bypass the loop.


If you can’t, there is a bug, nmin ≠ 0 or a wrong case.
2. Could the value of loop (control) variable V be negative? 1 2
could it appear to specify a –ve n ?
3. Try one pass through the loop statement: n = 1
4. Try two passes through the loop statement: n = 2
To detect initialization data flow anomalies:
Variable defined & not used in the loop, or
Initialized in the loop & used outside the loop.
5. Try n = typical number of iterations : nmin < n < nmax
6. Try n = nmax -1

7. Try n = nmax
8. Try n = nmax + 1.
What prevents V (& n) from having this value?
What happens if it is forced?

ref boris beizer 131


Control Flow Graphs and Path Testing U2

Testing of path involving loops…

Case 2. nmin = +ve, nmax = N, no excluded values

1. Try nmin - 1
Could the value of loop (control) variable V be < nmin? 1 2
What prevents that ?
2. Try nmin
3. Try nmin + 1

4. Once, unless covered by a previous test.


5. Twice, unless covered by a previous test.

4. Try n = typical number of iterations : nmin < n < nmax


5. Try n = nmax -1

6. Try n = nmax
7. Try n = nmax + 1.
What prevents V (& n) from having this value?
What happens if it is forced?

Note: only a case of no iterations, n = 0 is not


there. ref boris beizer 132
Control Flow Graphs and Path Testing U2

Path Testing Concepts…

Case 3. Single loop with excluded values

1. Treat this as single loops with excluded values as two sets.

2. Example: 1 2

V = 1 to 20 excluding 7,8,9 and10

Test cases to attempt are for:


V = 0,1,2,4,6,7 and V = 10,11,15,19,20,21
(underlined cased are not supposed to work)

ref boris beizer 133


Control Flow Graphs and Path Testing U2

Testing of path involving loops…

2. Testing a Nested Loop Statement

1 2 3 4

• Multiplying # of tests for each nested loop => very large # of tests

• A test selection technique:

1. Start at the inner-most loop. Set all outer-loops to Min iteration parameter values: Vmin.
2. Test the Vmin, Vmin + 1, typical V, Vmax - 1, Vmax for the inner-most loop. Hold the outer-
loops to Vmin. Expand tests are required for out-of-range & excluded values.

3. If you have done with outer most loop, Go To step 5. Else, move out one loop and do
step 2 with all other loops set to typical values.
4. Do the five cases for all loops in the nest simultaneously.

• Assignment: check # test cases = 12 for nesting = 2, 16 for 3, 19 for 4.


ref boris beizer 134
Control Flow Graphs and Path Testing U2

Testing of path involving loops…

1 2 3 4

• Compromise on # test cases for processing time.

• Expand tests for solving potential problems associated with initialization of variables and
with excluded combinations and ranges.

• Apply Huang’s twice thorough theorem to catch data initialization problems.

ref boris beizer 135


Control Flow Graphs and Path Testing U2

Testing of path involving loops…

3. Testing Concatenated Loop Statements

1 2 3 4

• Two loops are concatenated if it’s possible to reach one after exiting the other while still on
the path from entrance to exit.

• If these are independent of each other, treat them as independent loops.

• If their iteration values are inter-dependent & these are same path, treat these like a nested
loop.

• Processing times are additive.

ref boris beizer 136


Control Flow Graphs and Path Testing U2

Testing of path involving loops…

4.Testing Horrible Loops

1 2 3 4 5 6

• Avoid these.

• Even after applying some techniques of paths, resulting test cases not definitive.

• Too many test cases.

• Thinking required to check end points etc. is unique for each program.

• Jumps in & out of loops and intersecting loops etc, makes test case selection an ugly task.

• etc. etc.

ref boris beizer 137


Control Flow Graphs and Path Testing U2

Testing of path involving loops…

Loop Testing Times

• Longer testing time for all loops if all the extreme cases are to be tested.

• Unreasonably long test execution times indicate bugs in the s/w or specs.

Case: Testing nested loops with combination of extreme values leads to long test times.

• Show that it’s due to incorrect specs and fix the specs.
• Prove that combined extreme cases cannot occur in the real world. Cut-off those tests.

• Put in limits and checks to prevent the combined extreme cases.


• Test with the extreme-value combinations, but use different numbers.

• The test time problem is solved by rescaling the test limit values.

• Can be achieved through a separate compile, by patching, by setting parameter values


etc..

ref boris beizer 138


Control Flow Graphs and Path Testing U2

Effectiveness of Path Testing

• Path testing (with mainly P1 & P2) catches ~65% of Unit Test Bugs ie., ~35% of all bugs.

• More effective for unstructured than structured software.

• Limitations

• Path testing may not do expected coverage if bugs occur.

• Path testing may not reveal totally wrong or missing functions.

• Unit-level path testing may not catch interface errors among routines.

• Data base and data flow errors may not be caught.

• Unit-level path testing cannot reveal bugs in a routine due to another.

• Not all initialization errors are caught by path testing.

• Specification errors cannot be caught.


ref boris beizer 139
Control Flow Graphs and Path Testing U2

Effectiveness of Path Testing

• A lot of work

• Creating flow graph, selecting paths for coverage, finding input data values to force
these paths, setting up loop cases & combinations.

• Careful, systematic, test design will catch as many bugs as the act of testing.
Test design process at all levels at least as effective at catching bugs as is running the test
designed by that process.

• More complicated path testing techniques than P1 & P2

• Between P2 & Pα


• Complicated & impractical

• Weaker than P1 or P2.


• For regression (incremental) testing, it’s cost-effective

ref boris beizer 140


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions

Path

• A sequence of process links (& nodes)

Predicate

• The logical function evaluated at a decision : True or False. (Binary , boolean)

Compound Predicate
• Two or more predicates combined with AND, OR etc.

Path Predicate

• Every path corresponds to a succession of True/False values for the predicates traversed
on that path.

• A predicate associated with a path.


“ X > 0 is True “ AND “W is either negative or equal to 122” is True

• Multi-valued Logic / Multi-way branching


ref boris beizer 141
Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

Predicate Interpretation

• The symbolic substitution of operations along the path in order to express the predicate
solely in terms of the input vector is called predicate interpretation.

An input vector is a set of inputs to a routine arranged as a one dimensional array.

• Example:
INPUT X, Y INPUT X
ON X GOTO A, B, C IF X < 0 THEN Y:= 2
A: Z := 7 @ GOTO H ELSE Y := 1
B: Z := -7 @ GOTO H IF X + Y*Y > 0 THEN …
C: Z := 0 @ GOTO H
H: DO SOMETHING
K: IF X + Z > 0 GOTO GOOD ELSE GOTO BETTER

• Predicate interpretation may or may not depend on the path. IF -7 > 3 ..

• Path predicates are the specific form of the predicates of the decisions along the selected
path after interpretation.
ref boris beizer 142
Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

Process Dependency

• An input variable is independent of the processing if its value does not change as a result of
processing.

• An input variable is process dependent if its value changes as a result of processing.

• A predicate is process dependent if its truth value can change as a result of processing.

• A predicate is process independent if its truth value does not change as a result of
processing.

• Process dependence of a predicate doesn’t follow from process dependence of variables

• Examples: X + Y = 10 Increment X & Decrement Y.


X is odd Add an even # to X

• If all the input variables (on which a predicate is based) are process independent, then
predicate is process independent.

ref boris beizer 143


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

Correlation

• Two input variables are correlated if every combination of their values cannot be specified
independently.

• Variables whose values can be specified independently without restriction are uncorrelated.

• A pair of predicates whose outcomes depend on one or more variables in common are
correlated predicates.

• Every path through a routine is achievable only if all predicates in that routine are
uncorrelated.

• If a routine has a loop, then at least one decision’s predicate must be process dependent.
Otherwise, there is an input value which the routine loops indefinitely.

ref boris beizer 144


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

Path Predicate Expression


• Every selected path leads to an associated boolean expression, called the path predicate
expression, which characterizes the input values (if any) that will cause that path to be
traversed.

• Select an entry/exit path. Write down un-interpreted predicates for the decisions along the
path. If there are iterations, note also the value of loop-control variable for that pass.
Converting these into predicates that contain only input variables, we get a set of boolean
expressions called path predicate expression.

• Example (inputs being numerical values):

If X 5 > 0 .OR. X 6 < 0 then

X1 + 3X2 + 17 >= 0
X3 = 17
X4 – X1 >= 14 X2

ref boris beizer 145


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

A: X5>0 E: X 6 < 0
B: X1 + 3X2 + 17 >= 0 F: X1 + 3X2 + 17 >= 0
C: X3 = 17 G: X3 = 17
D: X4 – X1 >= 14 X2 H: X4 – X1 >= 14 X2

Converting into the predicate expression form:

ABCD+EBCD (A+E)BCD

If we take the alternative path for the expression: D then

(A + E ) B C D

ref boris beizer 146


Control Flow Graphs and Path Testing U2

Predicates, Predicate Expressions…

Predicate Coverage:

• Look at examples & possibility of bugs: A B C D A+B+C+D

• Due to semantics of the evaluation of logic expressions in the languages, the entire
expression may not be always evaluated.

• A bug may not be detected.


• A wrong path may be taken if there is a bug.

• Realize that on our achieving C2, the program could still hide some control flow bugs.

• Predicate coverage:

• If all possible combinations of truth values corresponding to selected path have been
explored under some test, we say predicate coverage has been achieved.

• Stronger than branch coverage.

• If all possible combinations of all predicates under all interpretations are covered, we
have the equivalent of total path testing.
ref boris beizer 147
Control Flow Graphs and Path Testing U2

Testing blindness

• coming to the right path – even thru a wrong decision (at a predicate). Due to the

interaction of some statements makes a buggy predicate work, and

the bug is not detected by the selected input values.

• calculating wrong number of tests at a predicate

by ignoring the # of paths to arrive at it.

• Cannot be detected by path testing and need other strategies

ref boris beizer 148


Control Flow Graphs and Path Testing U2

Testing blindness
• Assignment blinding: A buggy Predicate seems to work correctly as the specific value
chosen in an assignment statement works with both the correct & buggy predicate.

Correct Buggy
X := 7 X := 7
IF Y > 0 THEN … IF X + Y > 0 THEN … (check for Y=1)

• Equality blinding:

• When the path selected by a prior predicate results in a value that works both for the
correct & buggy predicate.
Correct Buggy
IF Y = 2 THEN … IF Y = 2 THEN ..
IF X + Y > 3 THEN … IF X > 1 THEN … (check for any X>1)

• Self-blinding
• When a buggy predicate is a multiple of the correct one and the result is
indistinguishable along that path.
Correct Buggy
X := A X := A
IF X - 1 > 0 THEN … IF X + A -2 > 0 THEN … (check for any
ref boris beizer 149
X,A)
Control Flow Graphs and Path Testing U2

Achievable Paths

1. Objective is to select & test just enough paths to achieve a satisfactory notion of
test completeness such as C1 + C2.

2. Extract the program’s control flow graph & select a set of tentative covering paths.

3. For a path in that set, interpret the predicates.

4. Trace the path through, multiplying the individual compound predicates to achieve a
boolean expression. Example: (A + BC) ( D + E)

5. Multiply & obtain sum-of-products form of the path predicate expression:


AD + AE + BCD + BCE

6. Each product term denotes a set of inequalities that, if solved, will yield an input
vector that will drive the routine along the selected path.

7. A set of input values for that path is found when any of the inequality sets is solved.

A solution found => path is achievable. Otherwise the path is unachievable.


ref boris beizer 150
Control Flow Graphs and Path Testing U2

Path Sensitization
It’s the act of finding a set of solutions to the path predicate expression.
In practice, for a selected path finding the required input vector is not difficult. If there is difficulty, it
may be due to some bugs.

Heuristic procedures:
Choose an easily sensitizable path set, & pick hard-to-sensitize paths to achieve more coverage.
Identify all the variables that affect the decisions. For process dependent variables,
express the nature of the process dependency as an equation, function, or whatever is
convenient and clear. For correlated variables, express the logical, arithmetic, or
functional relation defining the correlation.

1. Identify correlated predicates and document the nature of the correlation as for variables.
If the same predicate appears at more than one decision, the decisions are obviously
correlated.
2. Start path selection with uncorrelated & independent predicates. If coverage is achieved,
but the path had dependent predicates, something is wrong.
ref boris beizer 151
Control Flow Graphs and Path Testing U2

Path Sensitization… Heuristic procedures: contd..

4. If the coverage is not achieved yet with independent uncorrelated predicates, extend the
path set by using correlated predicates; preferably process independent (not needing
interpretation)

5. If the coverage is not achieved, extend the path set by using dependent predicates
(typically required to cover loops), preferably uncorrelated.
6. Last, use correlated and dependent predicates.

7. For each of the path selected above, list the corresponding input variables. If the variable
is independent, list its value. For dependent variables, interpret the predicate ie., list the
relation. For correlated variables, state the nature of the correlation to other variables.
Determine the mechanism (relation) to express the forbidden combinations of variable
values, if any.
8. Each selected path yields a set of inequalities, which must be simultaneously satisfied to
force the path.

ref boris beizer 152


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization

1. Simple Independent Uncorrelated Predicates

2. Independent Correlated Predicates

3. Dependent Predicates

4. Generic

ref boris beizer 153


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization..


1. Simple Independent Uncorrelated Predicates
_
3 A 5 C
1 4 6 7 2
a _ A b c C d e f
A
C 4 predicates => 16 combinations
h j k Set of possible paths = 8
8
B B i _
_ D
B
l 10
9
D D
m

Path Predicate Values Path Predicate Values

abcdef A C abcdef A C
aghcimkf A B C D abcimjef A C D
aglmjef A B D  abcimkf A C D
aghcdef A B C
aglmkf A B D

A Simple case of solving inequalities. (obtained bybeizer


ref boris the procedure for finding a covering set of paths) 154
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …

2. Correlated Independent Predicates


b Correlated paths => some paths are unachievable
_
Y Y ie., redundant paths.
3 5 ie., n decisions but # paths are < 2 n
1 Y 4 Y 6 2
a d g
_ Due to practice of saving code which makes
Y Y the code very difficult to maintain.
c f

Eliminate the correlated decisions.


Reproduce common code.
b d f
_ 4 5 If a chosen sensible path is not achievable,
Y
3
- there’s a bug.
1 Y 6 2
a g
- design can be simplified.
Y - get better understanding of correlated decisions
c 4’ 5’
d’ e

Correlated decision removed & CFG simplified


ref boris beizer 155
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …

3. Dependent Predicates

Usually most of the processing does not affect the control flow.

Use computer simulation for sensitization in a simplified way.

Dependent predicates contain iterative loop statements usually.

For Loop statements:

Determine the value of loop control variable for a certain # of iterations, and then
work backward to determine the value of input variables (input vector).

ref boris beizer 156


Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …


4. The General Case

No simple procedure to solve for values of input vector for a selected path.

1. Select cases to provide coverage on the basis of functionally sensible paths.


Well structured routines allow easy sensitization.
Intractable paths may have a bug.

2. Tackle the path with the fewest decisions first. Select paths with least # of loops.

3. Start at the end of the path and list the predicates while tracing the path in reverse.
Each predicate imposes restrictions on the subsequent (in reverse order) predicate.

4. Continue tracing along the path. Pick the broadest range of values for variables affected
and consistent with values that were so far determined.
5. Continue until the entrance & therefore have established a set of input conditions for the path.

If the solution is not found, pathrefisboris


not achievable,
beizer it could be a bug. 157
Control Flow Graphs and Path Testing U2

Examples for Path Sensitization …


4. The General Case contd..

Alternately:

1. In the forward direction, list the decisions to be traversed.


For each decision list the broadest range of input values.

2. Pick a path & adjust all input values. These restricted values are used for next decision.

3. Continue. Some decisions may be dependent on and/or correlated with earlier ones.

4. The path is unachievable if the input values become contradictory, or, impossible.
If the path is achieved, try a new path for additional coverage.

Advantages & Disadvantages of the two approaches:


The forward method is usually less work.
you do not know where you are going as you are tracing the graph.
ref boris beizer 158
Control Flow Graphs and Path Testing U2-1

PATH INSTRUMENTATION

Output of a test:

Results observed. But, there may not be any expected output for a test.

Outcome:
Any change or the lack of change at the output.

Expected Outcome:
Any expected change or the lack of change at the output (predicted as part of
design).

Actual Outcome:
Observed outcome

ref boris beizer 159


Control Flow Graphs and Path Testing U2-1

PATH INSTRUMENTATION

Coincidental Correctness:

When expected & actual outcomes match,


• Necessary conditions for test to pass are met.
• Conditions met are probably not sufficient.
(the expected outcome may be achieved due to a wrong reason)

X = 16 CASE SELECT Y := X - 14

Here
Y := 2
Y is 2

Y := X mod 14

Path Instrumentation is what we have to do confirm that the outcome was


achieved by the intended path.
ref boris beizer 160
Control Flow Graphs and Path Testing – Questions from previous exams U2
PATH INSTRUMENTATION METHODS

1. General strategy:

1. Based on Interpretive tracing & use interpreting trace program.

2. A trace confirms the expected outcome is or isn’t obtained along the intended path.

3. Computer trace may be too massive. Hand tracing may be simpler.

2. Traversal or Link Makers:

Simple and effective

1. Name every link.

2. Instrument the links so that the link is recorded when it is executed (during the test)

3. The succession of letters from a routine’s entry to exit corresponds to the pathname.

ref boris beizer 161


Control Flow Graphs and Path Testing U2

Single Link Marker Instrumentation: An example

No
Input B$ = C=
i A = 7? j k l
A,B,C “a” ? 0?

No No
m
n

No No
B$ = C≤
o p q
“d” ? 0?

r
s

Sample path: ijn

ref boris beizer 162


Control Flow Graphs and Path Testing U2

Single Link Marker Instrumentation: Not good enough

i A = 7? j Process A Process B

No

No
k Process C ? n Process D

Problem:
Processing in the links may be chewed open by bugs. Possibly due to GOTO
statements, control takes a different path, yet resulting in the intended path again.
ref boris beizer 163
Control Flow Graphs and Path Testing U2

Double Link Marker Instrumentation:

i A = 7? j Process A Process B l

m n

o Process C p ? q Process D r

The problem is solved.

Two link markers specify the path name and both the beginning & end of the link.

ref boris beizer 164


Control Flow Graphs and Path Testing U2

PATH INTRUMENTATION techniques…


3. Link Counters Technique:

• Less disruptive and less informative.

• Increment a link counter each time a link is traversed. Path length could confirm
the intended path.

• For avoiding the same problem as with markers, use double link counters.
Expect an even count = double the length.

• Now, put a link counter on every link. (earlier it was only between decisions)
If there are no loops, the link counts are = 1.

• Sum the link counts over a series of tests, say, a covering set. Confirm the total link
counts with the expected.

• Using double link counters avoids the same & earlier mentioned problem.

ref boris beizer 165


Control Flow Graphs and Path Testing U2
PATH INTRUMENTATION techniques…
3. Link Counters Technique: contd..

Check list for the procedure:

• Do begin-link counter values equal the end-link counter values?

• Does the input-link count of every decision equal to the sum of the link counts of the
output links from that decision?

• Do the sum of the input-link counts for a junction equal the output-link count for that
junction?

• Do the total counts match the values you predicted when you designed the covering
test set?

This procedure and the checklist could solve the problem of Instrumentation.

ref boris beizer 166


Control Flow Graphs and Path Testing U2

PATH INTRUMENTATION techniques…

Limitations

• Instrumentation probe (marker, counter) may disturb the timing relations & hide
racing condition bugs.

• Instrumentation probe (marker, counter) may not detect location dependent


bugs.

If the presence or absence of probes modifies things (for example in the data base)
in a faulty way, then the probes hide the bug in the program.

ref boris beizer 167


Control Flow Graphs and Path Testing U2

PATH INTRUMENTATION - IMPLEMENTATION

For Unit testing : Implementation may be provided by a comprehensive test tool .

For higher level testing or for testing an unsupported language:


• Introduction of probes could introduce bugs.
• Instrumentation is more important for higher level of program structure like transaction flow
• At higher levels, the discrepancies in the structure are more possible & overhead of
instrumentation may be less.

For Languages supporting conditional assembly or compilation:

• Probes are written in the source code & tagged into categories.
• Counters & traversal markers can be implemented.
• Can selectively activate the desired probes.

For language not supporting conditional assembly / compilation:

• Use macros or function calls for each category of probes. This may have less bugs.
• A general purpose routine may be written.

In general:
• Plan instrumentation with probes in levels of increasing detail.
ref boris beizer 168
Control Flow Graphs and Path Testing U2

Implementation & Application of Path Testing

1. Integration, Coverage, and Paths in Called Components

• Mainly used in Unit testing, especially new software.

• In an Idealistic bottom-up integration test process – integrating one component at a time.


Use stubs for lower level component (sub-routines), test interfaces and then replace stubs by
real subroutines.
• In reality, integration proceeds in associated blocks of components. Stubs may be avoided.
Need to think about paths inside the subroutine.

To achieve C1 or C2 coverage:
• Predicate interpretation may require us to treat a subroutine as an in-line-code.
• Sensitization becomes more difficult.
• Selected path may be unachievable as the called components’ processing may block it.

Weaknesses of Path testing:

• It assumes that effective testing can be done one level at a time without bothering what
happens at lower levels.
• predicate coverage problems & blinding.
ref boris beizer 169
Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

2. Application of path testing to New Code

• Do Path Tests for C1 + C2 coverage

• Use the procedure similar to the idealistic bottom-up integration testing, using a
mechanized test suite.

• A path blocked or not achievable could mean a bug.

• When a bug occurs the path may be blocked.

ref boris beizer 170


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

3. Application of path testing to Maintenance

• Path testing is applied first to the modified component.

• Use the procedure similar to the idealistic bottom-up integration testing, but without using
stubs.

• Select paths to achieve C2 over the changed code.

• Newer and more effective strategies could emerge to provide coverage in maintenance
phase.

ref boris beizer 171


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing

4. Application of path testing to Rehosting

• Path testing with C1 + C2 coverage is a powerful tool for rehosting old software.

• Software is rehosted as it’s no more cost effective to support the application


environment.

• Use path testing in conjunction with automatic or semiautomatic structural test


generators.

ref boris beizer 172


Control Flow Graphs and Path Testing U2
Implementation & Application of Path Testing
Application of path testing to Rehosting..

Process of path testing during rehosting

• A translator from the old to the new environment is created & tested. Rehosting
process is to catch bugs in the translator software.

• A complete C1 + C2 coverage path test suite is created for the old software. Tests
are run in the old environment. The outcomes become the specifications for the
rehosted software.

• Another translator may be needed to adapt the tests & outcomes to the new
environment.

• The cost of the process is high, but it avoids risks associated with rewriting the code.

• Once it runs on new environment, it can be optimized or enhanced for new


functionalities (which were not possible in the old environment.)

ref boris beizer 173


Control Flow Graphs and Path Testing – Questions from previous exams U2

For reference – just to see that we have covered these:

Q. Define Path Testing. Explain three path testing criteria.

Q. Illustrate with an example, how statement and branch coverage can be achieved during path selection.
Write all steps involved in it.

Q. Write the effectiveness and limitations of path testing.

Q. Define Path Sensitization. Explain heuristic procedure for sensitizing paths with the help of an example.

Q. How can a program control structure be represented graphically? Explain with the help of required
diagrams.

Q. How is a flowchart differed from a control flow chart?

Q. Explain about Multi entry and Multi exit routines & fundamental path selection criteria

Q. Explain about path instrumentation. How are link counters useful in Path Instrumentation method?

Q. Write about implementation of path testing. What are the various applications of path testing?

Q. Categorize different kinds of loops and explain.

ref boris beizer 174

You might also like