The designation “fault tolerant software” has been used for techniques ranging from roll-back and retry to N-version programming, from data mirroring to functional redundancy. If the term is to be meaningful, qualifying definitions are required. This paper attempts to provide these by analyzing the capabilities of representative software fault tolerance techniques described in prior literature and matching these with the needs of representative environments in which fault tolerance may be applied. This paper suggests five categories for comparison of application needs and fault-tolerance capabilities: accuracy, deadline, state preservation, coverage, and economy of resources. It then shows how representative needs and capabilities can be characterized in identical terms by these categories. Algorithms are developed for either ranking (ordering) the importance of categories or assigning weighting factors to them. The algorithms suggest partially-suitable matches where there is no c...