Chapter 14 Slides

advertisement
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Chapter 14
CS 8532: Advanced Software Engineering
Dr. Hisham Haddad
Class
will
start
momentarily.
Please Stand By …
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Software Testing Techniques
Discussion of Software
Testing Techniques
Chapter 14
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Review - What is Testing?
- Testing is the process of exercising/examining a program with
the intent of finding errors prior to delivery to the end user.
- Errors may belong to a variety of classes (functional,
behaviour, performance).
- Among others, the objectives of testing are to:
>
>
>
>
find uncovered errors,
demonstrate conformance to requirements,
get insight on performance, and
get indication of quality and reliability.
- A testing strategy is a plan that outlines detailed testing
activities (steps, test case design, test execution, effort, time,
resources), and it results in Test Specification document.
Note: 30% - 40% of development effort is spent on testing!
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Principles
Among others, some basic testing principles include:
- Test cases should be traceable to requirements.
- Design of test cases should starts as early as completing software
requirements and before testing starts.
- Testing should begin “in the small” and progress toward testing “in the
large”.
- Exhaustive testing is not possible. Test selective execution paths.
- Testing should be conducted by independent team.
Pareto Principle: 80% of all uncovered errors during testing is
likely be traceable to 20% of all program components.
See section 5.5.2, page 114.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Software Testability
As testing become integral part of development, software is
developed with “testability” in mind! (i.e., how easy to test the
program) (evolving mind set)
Testability results from the design (good design leads to better
testability)
Testability attributes (next slides) are mapped back to the quality
of design and implementation.
When testing is performed by an independent tester, the tester
must learn the system, try to “break” it, and keep the testing
quality-driven.
Q: what attributes make software testable?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testability Attributes (1)
Characteristics that lead to a testable software:
Operability: (the program operates cleanly)
- no or few known bugs
- no serious bugs to prevent execution of test cases
- ability to conduct simultaneous testing on components
Observability: (the results of each test case are readily observed)
- distinct output for each input
- ability to see system state and variables
- ability to easily identify incorrect outputs
- ability of detect internal errors and report them
- access to source code
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testability Attributes (2)
Controllability: (the degree to which testing can be automated
and optimized)
- ability to generate all possible outputs (via inputs)
- all code is executable using combination of inputs
- ability to control SW/HW states and variables
- consistent input/output format
- tests may be automated and re-produced
Decomposeability: (component targeted testing)
- modular design of the software
- ability to test modules independently
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testability Attributes (3)
Simplicity: (reduce complex architecture and logic to simplify
testing)
- functional simplicity (specific functions of requirements)
- structural simplicity (modularized architecture)
- code simplicity (following coding and documentation
standards)
Stability: (few changes are required during testing)
- changes are infrequent, controlled, don’t invalidate test cases
- the program can recover from failures
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testability Attributes (4)
Understandability: (good knowledge of the design)
- understanding component design
- understanding of component hierarchy
- understanding of design changes
- accessibility to technical documents
> readily available
> well organized
> detailed and accurate content
Q: how about the test cases themselves?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Test Case Attributes
What is a “good” test?
- It has high probability of finding errors. This requires good
understanding of the software.
- It is not redundant. Each test case must have a well-defined
and unique purpose and objective.
- It is neither too simple nor too complex to avoid error masking
in case of combining test case together.
- It should be the “best of breed” (select the best from among
similar test cases)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Test Case Design
"Bugs lurk in corners and congregate
at boundaries ...“ Boris Beizer
OBJECTIVE:
to uncover errors
CRITERIA:
in a complete manner
CONSTRAINT:
with a minimum of effort and time
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Exhaustive Testing is not Possible!
- Two nested loops
- Each loop runs 20 iterations
- Four if-then-else constructs are
defined inside the inner loop
- There are about 1014 possible
executable paths!
- If we execute one test per
millisecond, it would take 3,170
years to test this program!!
See page 392, Info Box
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Selected Paths
Selected path
Due to large number of
possible paths, select limited
number of “important” logical
paths for testing!
(e.g., Basic Path Testing)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Methods
black-box
methods
white-box
methods
Methods
Strategies
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
White-Box Testing (1)
The goal is to ensure that all
statements and conditions have been
executed at least once
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
White-Box Testing (2)
With white-box testing, test
- all independent paths within the module/component
- all decision structures for their true and false values
- all loop structures for their boundaries and operations
- all data structures (arrays, sets, maps, stacks, etc…)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Why White-Box Testing?
- Logical errors and incorrect assumptions are inversely
proportional to a path's execution probability.
- It is often believed that a logical path is not likely to be
executed when it may be executed on regular basis!
- It is likely that untested paths will contain some typographical
errors.
- Others?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Basic Path Testing (1)
Basic path method is white-box techniques that enables the
designer to derive a logical complexity measure (number of
independent paths) that can be used for defining basic set of
execution paths.
Steps:
-
Construct flow graph (nodes and edges)
Determine the cyclomatic complexity value
Identify the basic set of execution paths
Design test cases for basic set paths
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Flow (Program) Graph
1
1
2
2
3
4
3
4
5
7
8
6
5
6
7
8
9
9
10
10
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Cyclomatic Complexity
1
Cyclomatic complexity V(G) is a metric that
provides quantitative measure of the logical
complexity of code (that is, number of
independent paths).
2
4
R
1
3
5
R3
7
8
9
10
R
2
R4
Computed as:
6
1. V(G) = E - N + 2
2. V(G) = P + 1
3. V(G) = # of regions on the graph
where E is # of edges
N is # of nodes
P is # of predicate nodes (red nodes)
(for combined conditions, see page 395 figure)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Basic Set of Paths
1
Independent path: Is a path that includes
a new edge(s) that have not need visited
by other paths.
2
3
4
6
5
7
8
9
10
Since V(G) = 4, there are 4 independent
paths (called Basic Set):
Path 1:
Path 2:
Path 3:
Path 4:
1,2,3,6,7,8,9,10
1,2,3,5,7,8,9,10
1,2,4,8,9,10
1,2,4,8,9,2, ... ,9,10
What is next?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Design Test Cases
Each test case must force the execution of the intended path.
The goal is to ensure that each statement is tested at least once.
Note: A path my not be tested stand-alone. It must be
tested as part of another path(s) (e.g., loop paths)
See complete example on page 397, figure 14.4, Procedure
average.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Basic Paths - Notes
You don't need a flow chart,
but the picture will help when
you trace program paths.
1
2
3
4
5
6
7
8
9
10
Count each simple logical test,
compound tests count as 2 or
more nodes.
Basis path testing should be
applied to critical modules.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Cyclomatic Complexity - Note
A number of industry studies have indicated that the higher
the cyclomatic complexity V(G) of a module, the higher the
probability of errors in that module.
modules
V(G)
modules in this range
are more error prone
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Graph Matrices
• A graph matrix is a square matrix whose size (i.e., number of
rows and columns) is equal to the number of nodes on a flow
graph (see page 399, figure 14.6)
• Each row and column corresponds to an identified node, and
matrix entries correspond to connections (an edge) between
nodes.
• Adding a link weight to each matrix entry, the graph matrix can
be used to calculate useful info such as
–
–
–
–
Probability of execution
Required memory
Processing time
Other resources
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Other Testing Techniques (concepts)
Other White-Box based testing techniques include:
1. Condition Testing: Focus on testing logical conditions
2. Data Flow Testing: Focus on testing variables
3. Loop Testing: Focus on testing loops
Note: these techniques are used to test “suspect” modules
and not necessarily the entire software.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Condition Testing Concept
Conditions are potential places for errors. Condition testing is
designing test cases to detect errors in conditional structures.
That is,
-
Arithmetic expressions
Relational operators
Operator precedence
Boolean operator (with compound conditions)
Boolean variables (with simple conditions)
Formation of parenthesis
A condition may require several test cases for complete
coverage.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Data Flow Testing Concept
Data flow testing is designing test cases based on the definition
and use of a variable (called DU testing). The selected path
includes the module that defines the targeted variable and all
modules that make use of that variable.
Data flow testing may be used with paths that include nested
loops and if-structures.
The difficulty with this approach is measuring test coverage and
selecting test paths.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Loop Testing Concept
Loop testing is designing test cases to validate a loop structure
and it boundaries.
A loop structure can be
- simple
- nested
- concatenated
- unstructured
Each structure requires different test cases.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Loop Structures
Simple
Loop
Nested
Loops
Concatenated
Loops
Unstructured
Loops
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Simple Loops
Typical strategy to test a simple loop that iterates n times:
1.
2.
3.
4.
5.
Skip the loop entirely
Test only one pass through the loop
Test two passes through the loop
Test m passes through the loop m < n
Test iterations n-1, n, and n+1
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Nested Loops
Typical strategy to test nested loop:
1. Set all outer loops to their minimum iteration parameter
values.
2. Test the the innermost for min+1, typical, max-1, and max
values, while holding the outer loops at their minimum values.
3. Move out one loop and test it as in step 2, holding all other
inner loops at typical values and outer loops at minimum
values. Continue this step until the outermost loop has been
tested.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Concatenated Loops
If the loops are independent of one another then test them as
simple loop, otherwise, test them as nested loops.
Two loops are dependent is when the loop counter value of first
loop is used to initialize the second loop.
Avoid unstructured loop! They can be re-designed using other
loop structures.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Black-Box (behavior) Testing (1)
requirements
output
input
events
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Black-Box (behavior) Testing (2)
Black-Box testing focuses on testing functional requirements of
program components.
Test cases should be designed to fully exercise the outlined
functions of the component.
It complements White-Box testing and uncovers:
- Incorrect/missing functions
- Interface errors
- Module initialization and termination errors
- External data errors
- Performance errors
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Black-Box (behavior) Testing (3)
Black-Box testing is applied in later stages of the testing process.
Test cases are designed to answer these questions:
•
•
•
•
•
•
•
How is functional validity tested?
How are system behavior and performance tested?
What classes of input will make good test cases?
Is the system particularly sensitive to certain input values?
How are the boundaries of a data class isolated?
What data rates and data volume can the system tolerate?
What effect will specific combinations of data have on system
operation?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Black-Box Testing Techniques (1)
Black-Box based testing techniques include:
1. Graph-Based methods: Focus on testing relationship between
modules. Different graphs my be utilized (Transition Flow,
Finite State, Data Flow, Execution Time)
2. Equivalence Partitioning: Focus on dividing input data into
equivalence classes from which test cases are derived to test
different classes of errors.
(classes may include user queries, mouse click,
prompts, output format, inputs, etc…)
(valid and invalid values (or ranges of values) for each
class are defined)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Black-Box Testing Techniques (2)
3. Boundary Value Analysis: Extends Equivalence partitioning
and focus on testing values at the edges of each partitioning
(ranges of valid and invalid values)
4. Comparison Testing: Focus on testing software systems with
redundancy. (multiple instances of the program)
5. Orthogonal Testing: Focus on minimizing number of test cases
by designing test cases with maximum coverage. (“testing one
item/parameter at a time” vs. “multiple items at a time”) (see
figure 14.10)
See textbook for details.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
OO Testing
By nature, OO design results in layered subsystems of
collaborating classes
OO testing focuses on uncovering errors in class collaborations.
OO testing starts “in the small” (testing classes and their
collaborations) toward testing “in the large” (testing
interfacing among subsystems)
OO testing is derived by “class state” changes (sequence of
operations to test class states)
Encapsulation can be an obstacle for testing! How?
Inheritance can be an obstacle for testing! How?
White-box techniques can be applied to class operations!
or shouldn't be?
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
OO Testing Methods (1)
1. Fault-based testing:
- The tester looks for plausible faults (part of
the implementation
that may result in defects). To determine
whether these faults
exist, test cases are designed to exercise
the design or code.
- Test cases focus on class methods.
2. Class hierarchy testing:
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
OO Testing Methods (2)
3. Scenario-based testing:
- It focuses on user (actor) interaction (what the user does
not what the system does)
- It uncovers interaction errors among subsystems
- Its test cases are more complex to design (than other methods)
4. Surface and deep structure testing:
- Surface structure testing is black-box testing (focus on
what the user see in (and can do with) the system)
- Deep structure testing is white-box testing (focus on the
technical (analysis and design) details of the system, such
as interactions, behavior, and dependencies)
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Class-Level Testing Methods (2)
1. Random testing at class-level:
- identify operations applicable to a class.
- define constraints on their use.
- identify a minimum test sequence
(random sequence of
operation) that defines the minimum life
history of the class
(object).
- generate a variety of random (but valid) test
sequences to
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Class-Level Testing Methods (2)
2. Partition testing (grouping of class operations):
- It is similar to equivalence partitioning for conventional
software.
- It reduces the number of test cases required to test a class.
- State-based partitioning groups and test operations based on
their ability to change the state of the class.
- Attribute-based partitioning groups and tests operations based
on the attributes that they use in the class.
- Category-based partitioning groups and tests operations
based on the generic function each operation performs.
See class “Account” testing sequences page 416.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Inter-Class Testing Methods (1)
1. Inter-Class testing: (multi-class integration testing)
- For each class, use the list of class operations to generate a
series of random test sequences.
- Use the operations to send messages to other classes.
- For each generated message, determine the collaborator class
and the corresponding operator in that class.
- For each operation in the called class, determine the messages
that it transmits.
- For each of the messages, determine the next level of
operations that are invoked and incorporate these into the test
sequence.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Inter-Class Testing Methods (2)
2. Behavior-based integration testing (state diagram based)
- Test sequences are derived based on the class behavior and
the classes it collaborates with.
- The tests should achieve all state coverage (for examples,
the operation sequences should cause the “Account” class
to make transition through all allowable states)
(see figure 14.12 for Account class states)
- In some cases, multiple state diagrams may be need to
derive test sequences.
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Specialized Testing
Black and white box testing may be specialized for different
environments, architectures and applications.
See textbook for testing guideline for (page 420):
1.
2.
3.
4.
GUI development environment
Client/Server architecture
Documentation and help application
Real-Time system
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Testing Patterns
Test patterns may be developed to define generic templates for
designing test cases, similar to analysis and design patterns.
Many testing pattern have been proposed in the literature. See
textbook, page 424, for three example patterns:
CS 8532: Adv. Software Eng. – Spring 2009
Dr. Hisham Haddad
Suggested Problems
Consider working the following problems from chapter 14,
page 427:
3, 9, 10, 11, and 12.
No submission is required for practice assignments. Work it
for yourself!
Download