preface
前言
1 introduction
1.1 the software industry
1.2 software testing and quality
1.3 errors.faults and failures
1.3.1 software faults
1.3.2 software failures
1.3.3 need for testing
1.4 the role of sdecifications
1.5 overview of testing
1.5.1 testing in the development process
1.5.2 test automation
1.6 the theory of testing
1.6.1 exhaustive testing example
1.6.2 implications
1.7 when to finish testing
1.8 notes on book structure
2 principles of software testing
.2.1 dynamic and static verification
2.1.1 static verification
2.1.2 dynamic verification
2.2 black-box and white.box testing
2.2.1 errors of“omission”and“commission”
2.3 test approaches
2.3.1 black-box testing
2.3.2 white-box testing
2.3.3 fault insertion
2.4 test activities
2.4.1 analysis outputs
2.4.2 test cases
2.4.3 test data
2.4.4 test code for test proceduresl
2.5 analysis of software specifications
2.5.1 parameters
2.5.2 parameter ranges
2.5.3 equivalence partitions
2.5.4 boundary values
2.5.5 combinations of values
2.5.6 sequences of values
2.6 analysis of software components
2.6.1 control flow graphs
2.6.2 decisions and conditions
2.6.3 paths
2.6.4 data-flow testing
2.6.5 ranking
2.7 analysis of targets for fault insertion
2.7.1 offutt’s 5 sufficient mutations
2.8 test artefacts
3 unit testing
3.1 introduction
3.2 usage
3.3 black-box techniques
3.3.1 equivalence partitioning(ep)
3.3.2 boundary value analysis fbval
3.3.3 testing combinations of inputs(ci)
3.3.4 testing sequences of inputs(si)or state
3.3.5 random input data fridl
3.3.6 error guessing fegl
3.4 white.box techniques
3.4.1 statement coverage fscl
3.4.2 branch coverage fbcl
3.4.3 condition coverage fccl
3.4.4 decision condition coverage fdccl
3.4.5 multiple condition coverage(mcc)
3.4.6 path coverage fpci
3.4.7 d—u pair coverage(dup)
3.5 fault insertion
3.5.1 strong mutation testing(smt)
4 unit testing examples
4.1 example one:seatsavailable()
4.1.1 description
4.1.2 specification
4.1.3 source code
4.1.4 equivalence partitioning
4.1.5 boundary value analysis
4.1.6 combinational testing
4.1.7 tests
4.1.8 using random test data
4.1.9 statement coverage
4.1.10 branch coverage
4.1.11 condition coverage
4.1.12 decision/condition coverage
4.1.13 multiple condition coverage
4.1.14 path coverage
4.1.15 d-u pair coverage
4.1.16 strong mutation testing
4.2 example two:premiumfl
4.2.1 description
4.2.2 specification
4.2.3 source code
4.2.4 equivalence partitioning
4.2.5 boundary value analysis
4.2.6 combinational testing
4.2.7 statement coverage
4.2.8 branch testing
4.2.9 condition coverage
4.2.10 multiple condition coverage
4.2.11 path testing
4.2.12 d-u pair testing
4.2.13 strong mutation testing.
5 static v_erification
5.1 design reviews
5.1.1 informal、valk-through
5.1.2 f0rmal design review
5.2 static code analysis
5.2.1 walk-throughs
5.2.2 code inspections
6 testing object-oriented software
6.1 characteristics of object-oriented software
6.2 effects of oo on testing
6.3 object oriented testing models
6.3.1 conventional models
6.3.2 combinational models
6.3.3 state machine models
6.3.4 specification&design models
6.3.5 built-in-test
6.4 example
6.4.1 class cartax
6.4.2 black-box testing in class context
6.4.3 white.box testing in class context
6.4.4 combinational testing
6.4.5 state-machine testing
6.4.6 specification/design testing
6.4.7 built-in testing
7 integration and system testing
7.1 integration testing
7.1.1 drivers and stubs
7.1.2 top-down integration
7.1.3 bottom-up integration
7.1.4 sandwich integration
7.1.5 end-to-end user functionality
7.1.6 test cases
7.1.7 conclusion
7.2 system testing
7.2.1 system test categories
7.2.2 system level functional testing
7.2.3 test cases
7.2.4 gui example
7.3 field testing and acceptance testing
8 software test automation
8.1 coverage measurement
8.1.1 lazy evaluation
8.2 junit
8.2.1 junit example
8.2.2 test documentation
8.3 junit testing in an ide
8.4 regression/inheritance testing with junit
8.5 writing your own test runner
8.6 mutation testing
8.7 automated system testing
9 testing in the software process
9.1 test planning.
9.2 software development life cycle
9.3 the、vaterfau model
9.4 the v-model
9.5 incremental and agile development
9.5.1 incremental development
9.5.2 extreme programming
9.5.3 scrum
9.5.4 synch and stabilize
9.5.5 process.related quality standards and models
9.6 repair.based testing
9.6.1 specific repair test
9.6.2 generic repair test
9.6.3 abstracted repair test
9.6.4 example
9.6.5 repair-based test suites
10 advanced testing issues
10.1 philosophy of testing
10.2 test technique selection
10.3 inserting data faults
10.4 design for testability(dft)
10.5 testing with floating point numbers
10.6 unit testing of gui components
10.7 testing with complex data structures
10.8 automated random testing
10.9 automated statement and branch testing
10.10 overlapping and discontinuous partitions
10.11 handling relative values
10.11.1 classie triangle problem
10.12 paivwise testing
10.13 testing boundary crossings(bx)
10.14 varying input parameters
10.15 extended combinational testing
10.15.1 no“don’t-caxe”s
10.15.2 tlest“don’t-care”s individually
10.16 including testing in the build procedure
10.17 testing concurrent and parallel software
10.17.1 unit testing
10.17.2system testing
10.17.3static analysis
10.17.4tools
10.18 testing embedded softwaxe
10.19 testing network protocol processing
10.19.1text.based protocols
10.19.2binary protocols
10.19.3protocol stacks and dft
10.20 research directions
appendices
a terminology
b exercises
b.1 junit and eclipse
b.2 unit test-exercise 1
b.3 unit test-exercise 2
b.4 unit test-exercise 3
b.5 unit test-exercise 4
b.6 unit test-exercise 5
b.7 unit test-exercise 6
b.8 unit test-exercise 7
b.9 unit test-exercise 8
b.10 unit test-exercise 9
b.11 exercise 10-test projects
select bibliography
· · · · · · (
收起)