Black box testing tests the functionality of software without knowledge of its internal structure or design. It is performed by testers and clients to test the software from an end user's perspective. There are various techniques used in black box testing including equivalence partitioning, boundary value analysis, and error guessing.