This document discusses finite state machines and state testing strategies. It begins by defining states, state graphs, inputs, transitions and outputs. It provides examples of state graphs and state tables for a car transmission and text detection program. It discusses properties of good and bad state graphs like the number of states, reachable states, and equivalence. It also covers potential bugs like unspecified transitions, dead states, and incorrect outputs. Finally, it discusses principles of state testing like prioritizing coverage over completing every path and using shorter test sequences.