N ‐Version Programming
JOHN C. KNIGHT · Encyclopedia of Software Engineering · 2002
Abstract N ‐version programming is a software structuring technique designed to permit software to be fault‐tolerant , i.e., able to operate and provide correct outputs despite the presence of faults. N ‐version programming is a software analogy of the N ‐modular redundancy technique used in fault‐tolerant hardware. The reason for attempting to make software fault‐tolerant is to try to increase software reliability for applications where the cost of failure is high. Despite substantial efforts aimed at fault avoidance and fault elimination during development, faults tend to remain in operational software. If the effects of such faults could be tolerated at execution time, the observed reliability of the software would be increased. N ‐version programming has been applied primarily in the aerospace industry. In the simplest form of N ‐version programming, “ N ” implementations i.e., N ‐versions of an application are developed separately. In operation, these N versions are executed in parallel and their outputs compared. Each version in an N ‐version system is a complete implementation of the specification developed separately from the N −1 versions. By developing versions separately, it is assumed that they will be based on designs that are different, a property called design diversity . Although the basic technique is quite simple, there are a number of issues that must be kept in mind when deciding whether to use N ‐version programming and how to implement it there issued are discussed.