Principle 1: Definition
To test a program is to try to make it fail.
Principle 2: Tests versus specs
Tests are no substitute for specifications.
Principle 3: Regression testing
Any failed execution must yield a test case, to remain a permanent part of the project’s test suite.
Principle 4: Applying oracles
Determining success or failure of tests must be an automatic process.
Principle 4 (variant): Contracts as oracles
Oracles should be part of the program text, as contracts. Determining test success or failure should be an automatic process consisting of monitoring contract satisfaction during execution.
Principle 5: Manual and automatic test cases
An effective testing process must include both manually and automatically produced test cases.
Principle 6: Empirical assessment of testing strategies
Evaluate any testing strategy, however attractive in principle, through objective assessment using explicit criteria in a reproducible testing process.
Principle 7: Assessment criteria