Functional testing generates test inputs based on a program's specifications. Testers derive clues from specifications, which inform test requirements and test specifications. Equivalence partitioning divides the input domain into equivalence classes, with the goal of selecting one test per class to cover all classes. Boundary value analysis focuses on boundary values as important test cases. Together, partitioning and boundary analysis aim to thoroughly test a program.