testing types in software