Proofs that software systems meet standards for functional safety have depended on exhaustive testing. This method is inadequate for today’s multi-threaded systems, whose complexity precludes their being treated as deterministic systems in practice. In Part II of this whitepaper series, we propose how a combination of procedural rigor, statistical testing, and design verification can be used to increase confidence in the functional safety of complex software systems.