White box testing tests the internal structure and coding of software. It focuses on checking predefined inputs against expected outputs. Popular white box testing techniques include statement coverage, loop testing, path testing, and branch testing. Statement coverage aims to execute all statements in a method. Loop testing checks for exceptions in loops and causes loops to execute in different ways. Path testing aims to cover all paths in the code by constructing logic flow charts. Branch testing, also known as conditional testing, ensures each possible outcome of a condition is tested at least once.