- •Identify architectural archetypes (collection of abstractions that must be modeled if the system is to be constructed)
- •Infrastructure components are responsible for functions needed to support the processing required in a domain application
- •Verification and Validation
- •Is the cause of the bug reproduced in another part of the program?
- •Is the system particularly sensitive to certain input values?
- •Volatility (likelihood a design component will change)
- •Interface design metrics (e.G., layout appropriateness)
- •Inheritance
Is the cause of the bug reproduced in another part of the program?
What "next bug" might be introduced by the fix that is being proposed?
What could have been done to prevent this bug in the first place?
Chapter 14:
Software Testing Objectives
Testing is the process of executing a program with the intent of finding errors.
A good test case is one with a high probability of finding an as-yet undiscovered error.
A successful test is one that discovers an as-yet-undiscovered error.
Software Testability Checklist
Operability - the better it works the more efficiently it can be tested
Observabilty - what you see is what you test
Controllability - the better software can be controlled the more testing can be automated and optimized
Decomposability - by controlling the scope of testing, the more quickly problems can be isolated and retested intelligently
Simplicity - the less there is to test, the more quickly we can test
Stability - the fewer the changes, the fewer the disruptions to testing
Understandability - the more information known, the smarter the testing
Good Test Attributes
A good test has a high probability of finding an error.
A good test is not redundant.
A good test should be best of breed.
A good test should not be too simple or too complex.
Test Case Design Strategies
Black-box or behavioral testing - knowing the specified function a product is to perform and demonstrating correct operation based solely on its specification without regard for its internal logic
White-box or glass-box testing - knowing the internal workings of a product, tests are performed to check the workings of all possible logic paths
White-Box Testing Questions
Can you guarantee that all independent paths within a module will be executed at least once?
Can you exercise all logical decisions on their true and false branches?
Will all loops execute at their boundaries and within their operational bounds?
Can you exercise internal data structures to ensure their validity?
Basis Path Testing
White-box technique usually based on the program flow graph
The cyclomatic complexity of the program computed from its flow graph using the formula V(G) = E - N + 2 or by counting the conditional statements in the program design language (PDL) representation and adding 1
Determine the basis set of linearly independent paths (the cardinality of this set is the program cyclomatic complexity)
Prepare test cases that will force the execution of each path in the basis set.
Control Structure Testing
White-box technique focusing on control structures present in the software
Condition testing (e.g., branch testing) - focuses on testing each decision statement in a software module, it is important to ensure coverage of all logical combinations of data that may be processed by the module (a truth table may be helpful)
Data flow testing - selects test paths based according to the locations of variable definitions and uses in the program (e.g., definition use chains)
Loop testing - focuses on the validity of the program loop constructs (i.e., simple loops, concatenated loops, nested loops, unstructured loops), involves checking to ensure loops start and stop when they are supposed to (unstructured loops should be redesigned whenever possible)
Black-Box Testing Questions
