This document discusses techniques for black box testing software. It defines black box testing as testing software functionality without knowledge of its internal implementation or code structure. The techniques described are equivalence partitioning, boundary value analysis, state transition testing, graph-based testing, error guessing, and comparison testing. Equivalence partitioning divides inputs into classes based on similar outcomes to reduce test cases. Boundary value analysis focuses on edge cases rather than the full input range. State transition testing checks behavior changes between states with the same inputs. Graph-based testing visualizes the relationships between inputs and outputs. Error guessing leverages the tester's experience to find common mistakes. Comparison testing looks for differences between versions of the same software.