There are several techniques for black box software testing that can help reduce the number of tests needed while still providing good coverage. Equivalence partitioning involves dividing inputs and outputs into partitions containing sets of values expected to behave the same way. Boundary analysis refines equivalence partitioning by testing partition boundaries. State transition testing uses a model of component states, transitions, events and actions to systematically test all state transitions. Decision tables present conditions and corresponding actions to define test cases. Together, these techniques help test complex systems efficiently without knowledge of internal design or code.