This chapter discusses several theories of program testing. It covers the theory of Goodenough and Gerhart which defines concepts like ideal tests, test selection criteria, and test predicates. The theory of Weyuker and Ostrand defines the concepts of uniformly valid and reliable criteria. The theory of Gourlay establishes relationships between specifications, programs, and tests. The chapter also discusses adequacy of testing, fault seeding, program mutation, and limitations of testing such as the small size of test sets compared to input domains and the need for test oracles.