Method of software testing that examines the functionality of an application without peering into its internal structures or workings