|
1 |
Introduction to software testing and analysis
- Beizer maturity model
- Why exhaustive bug finding is impossible
- RIPR model (Reachability, Infection, Propagation, Revealability)
|
|
2 |
Testing big and small (Part 1)
- Test automation
- Test scope and the test triangle
- Unit testing fundamentals (Part 1), avoiding brittle tests
- Practical: Defects, infections, failures (DIF)
|
|
3 |
Testing big and small (Part 2)
- Unit testing fundamentals (Part 2), writing clear tests
- Test doubles
- Practical: Improve weak forum unit tests
|
|
4 |
Testing big and small (Part 3) + Coverage criteria (Part 1)
- Larger-scope tests
- Intro to coverage criteria
- Practical: Test doubles with calculator-style I/O abstractions
|
|
5 |
Coverage criteria (Part 2)
- Control-flow analysis and testing
- Data-flow analysis and testing
- Coverage criteria conclusions and trade-offs
- Practical: JaCoCo coverage analysis + CFG/CCFG exercises
|
|
6 |
Mutation testing
- Mutation concepts and fault-revealing power
|
|
7 |
Regression testing
- Test suite minimization
- Test prioritization
- Test selection
- Practical: algorithmic regression-testing exercises
|
|
8 |
Fuzzing
- Random test generation concepts
- Practical: build a basic Java fuzzer driver in Python
|
|
9 |
Search-based test generation
- Search-based software testing (SBST)
- Practical: EvoSuite/EvoMaster tutorial (generation, execution, configuration)
|
|
10 |
Model-based testing
- FSM-based testing concepts
- State cover, transition tour, UIO, characterizing set, W-method
- Practical: FSM exercise set
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|