Observability. "What you see is what you test." Inputs provided as part of testing produce distinct outputs.
System states and variables are visible or queriable during execution. Incorrect output is easily identified.
Internal errors are automatically detected and reported.
Source code is accessible