This document discusses principles of software testing. It covers why testing is necessary, the fundamental test process, psychology of testing, re-testing and regression testing, expected results, and principles of testing. Specifically, it notes that testing is needed because software will likely contain faults, to learn about reliability and quality, and to avoid expensive failures. It outlines the typical test process of planning, specification, execution, recording, and completion checking. It also discusses test planning at different levels, test case design, and the importance of prioritization and risk-based testing.