chniques classified as applications-oriented, but its operation is through applications software rather than hardware acting to provide fault masking. The software components are called assertions. The application of a set of metrics to a problem specification results in software assertions that are embedded in the program code. Executable assertions are integrated into program code, having the form "if not ASSERTION then ERROR". The extent of error detection is determined by the perceptiveness of assertions to discern a compromised state of program execution. The recovery capability of the fault tolerance provision is determined by the response which is embodied in the error branch path. Applications-oriented fault tolerance works on the principle that testing of a program's intermediate results for conformance to specification ensures that the end result will be within specification, and that if an error does not manifest itself in a failure, then the fault is of no consequence or interest. A multi-processor environment limits the amount of information which is available to an executable assertion and creates a more complex problem than the generation of such assertions for a sequential environment. In the case of the multiprocessor environment, the creation of assertions at the message passing interchange granularity is essential, utilizing local program state and received messages from other parallel components. The primary question is how to generate, in a systematic way, assertions that result in efficient and effective fault detection capability. Fault detection in most computer science research focuses on the presence of hard repeatable faults and thus segments the problem into acceptance tests to detect the presence of a fault, and the use of diagnosis to identify and isolate the faulty element. The problem of intermittent or transient faults, such as the consequences of single event upset or transient pulses within a system, requires effective acceptance tests to detect the presence of faults. The use o