Testing a system's behaviour from its inputs and outputs alone, without reference to its internal code.