Traditionally, proofs that software systems meet functional safety standards have depended on exhaustive testing. This method is adequate for simple, deterministic systems, with single-threaded, run-to-completion processes. It is inadequate, however, for today’s multi-threaded systems. The complexity of these systems precludes their being treated as deterministic systems in practice. This white paper discusses the limits of testing of complex software systems, and some factors that should be weighed when deciding how to build complex software systems that must meet functional safety standards.