Cyclomatic Complexity V(G)=E-N+2 = 4 Independent Paths 1: 1,11 2: 1,2,3,4,5,10,1,11 3: 1,2,3,6,8,9,10,1,11 4: 1,2,3,6,7,9,10,1,11 V(G): upper bound on number of tests to ensure all code has been executed [From SEPA 5/e] SACHIN
Black Box Testing
Focus on functional requirements
Incorrect / missing functions
Errors in external data access
Initialization and termination errors
Black Box Testing 
How is functional validity tested?
What classes of input will make good test cases?
Is the system sensitive to certain inputs?
How are data boundaries isolated?
Black Box Testing 
What data rates and volume can the system tolerate?
What effect will specific combinations of data have on system operation?
Compare software versions
“ Regression testing”: finding the outputs that changed
Improvements vs. degradations
Net effect depends on frequency and impact of degradations
When error rate is low, a large corpus can be used
Generic Testing Strategies
Testing starts at module level and moves “outward”
Different testing techniques used at different times
Testing by developer(s) and independent testers
Testing and debugging are separate activities
Verification and Validation
“ Are we building the product right?”
“ Are we building the right product?”
Achieved by life-cycle SQA activities, assessed by testing
“ You can’t create quality by testing”
Organization of Testing [From SEPA 5/e] SACHIN
Logarithmic Poisson execution-time model With sufficient fit, model predicts testing time required to reach acceptable failure rate [From SEPA 5/e] SACHIN
[From SEPA 5/e] SACHIN
PRO: Higher-level (logic) modules tested early CON: Lower-level (reusable) modules tested late [From SEPA 5/e] SACHIN
PRO: Lower-level (reusable) modules tested early CON: Higher-level (logic) modules tested late [From SEPA 5/e] SACHIN
Sandwich Integration: combination of top-down and bottom-up