Structural testing examines a program's internal structure like code, design, and implementation. It uses white box testing to analyze program flow and ensure all statements, branches, and paths are executed. Various structural testing techniques exist like path coverage testing, cyclomatic complexity, data flow testing, and mutational testing. Path coverage testing aims to execute every path in a program at least once by generating test cases for all branches and paths. Cyclomatic complexity measures a program's structural complexity based on control flow. Mutational testing creates program mutants by altering code and tests whether test cases can detect the mutations.