There are two main categories of test design techniques: static techniques, which do not execute code, and dynamic techniques, which include specification-based, structure-based, and experience-based categories. Specification-based techniques test software as a black box against requirements. Structure-based techniques test internal software structures. Experience-based techniques leverage the experience of technical and business experts. These technique categories can be applied at different testing levels from component to acceptance testing.