Testing runs a program on defined inputs and compares what happens with the expected outcome. Good test inputs sit at or just beyond the minimum and maximum. Errors come in four kinds: logic, syntax, run-time and overflow. Hand tracing, test cases and extra output lines help find them, and documentation and troubleshooting guides help other people fix them too.