This document discusses software testing and provides guidance on best practices. It defines software testing as empirically investigating a product to provide stakeholders with quality information. The key aspects of testing discussed are modeling the system, making observations, asking useful questions, using logical reasoning, and taking a process of discovery approach. Testing is distinguished from checking and the importance of test design, exploratory testing, and testability over large automated test suites is emphasized. Credits are given to influential thinkers in the field.