- Test behaviour not code
- If behaviour isn’t simple, stable and well defined, don’t use assertions
- Capture system behaviour, filter it and manage things in it
- Approval testing - reject it (a bug), intentional change, or ignore it (we don’t care)
- Blacklisting vs Whitelisting
- More checks implies more effective but less maintainable
- Assertion based checking - start checking nothing but blacklist outcomes up front - repeat until bored - what are all failure modes
- Approval checking - start checking everything and whitelist outcomes on demand - repeat until maintenance feels manageable - is this change correct, incorrect, or uninteresting
- Legacy code - correct behaviour is what it does now - cannot change to get it under test, APIs may be lacking
- Characterization testing - what it does
- TextTest.org (open source)
- http://www.methodsandtools.com/archive/archive.php