Cause-Effect Graphing
One weakness of boundary-value analysis and
equivalence partitioning is that they do not explore
combinations of input circumstances. For instance, perhaps the
MTEST program of the previous section fails if the product of
the number of questions and the number of students exceeds
some limit (the program runs out of memory, for example).
Boundary-value testing would not necessarily detect such an
error. The testing of input combinations is not a simple task
because even if you equivalence-partition the input
conditions, the number of combinations usually is
astronomical. If you have no systematic way of selecting a
subset of input conditions, you'll probably select an
arbitrary subset of conditions, which could lead to an
ineffective test. Cause-effect graphing aids in selecting, in
a systematic way, a high yield set of test cases. It has a
beneficial side effect in pointing out incompleteness and
ambiguities in the specification.
A cause-effect graph is a formal language
into which a natural language specification is translated. The
graph actually is a digital logic circuit (a combinatorial
logic network), but instead of standard electronics notation,
a somewhat simpler notation is used. No knowledge of
electronics is necessary other than an understanding of
Boolean logic (understanding the logic operators and, or, and
not).
The following process is used to derive test
cases:
- The specification is divided into workable pieces. This
is necessary because cause-effect graphing becomes unwieldy
when used on large specifications. For instance, when
testing an e-commerce system, a "workable piece" might be
the specification for choosing and verifying a single item
placed in a shopping cart. When testing a Web page design,
you might test a single menu tree or even a less complex
navigation sequence.
- The causes and effects in the specification are
identified. A cause is a distinct input condition or an
equivalence class of input conditions. An effect is an
output condition or a system transformation (a lingering
effect that an input has on the state of the program or
system). For instance, if a transaction causes a file or
database record to be updated, the alteration is a system
transformation; a confirmation message 66 The Art of
Software Testing would be an output condition. You identify
causes and effects by reading the specification word by word
and underlining words or phrases that describe causes and
effects. Once identified, each cause and effect is assigned
a unique number.
- The semantic content of the specification is analyzed
and transformed into a Boolean graph linking the causes and
effects. This is the cause-effect graph.
- The graph is annotated with constraints describing
combinations of causes and/or effects that are impossible
because of syntactic or environmental constraints.
- By methodically tracing state conditions in the graph,
you convert the graph into a limited-entry decision table.
Each column in the table represents a test case.
- The columns in the decision table are converted into
test cases.
- The columns in the decision table are converted into
test cases.
|