We start with a general approach to introducing software fault tolerance (S
FT) into object-oriented (OO) systems [Xu, J., Randell, B., Rubira, C.M.F.,
Stroud, R.J., 1995. Toward an object-oriented approach to software fault-t
olerance. In: Avreski, D. (Ed.) Fault-Tolerant Parallel and Distributed Sys
tems. DEEE CS Press, Silver Spring, MD.] and proceed in two directions. The
first one is the use of SFT schemes within standard OO languages. New ques
tions which arise when we are dealing with these languages are addressed. O
ur intention is to thoroughly analyse all engineering steps which allow div
ersity to be introduced in systems programmed in these languages. Some new
general problems are spotted and discussed as well. The second direction is
dealing with version concurrency and distributedness in a general way. We
investigate providing SFT by class diversity, which is the most general way
of designing diverse software in OO systems. We concentrate on N-version p
rogramming (NVP) and give an exhaustive discussion of this approach. One of
the main reasons for this choice is that we have come to believe that the
general approach which allows a unified discussion of all SFT schemes is ra
ther restrictive because it-does not properly address the differences betwe
en these schemes which represent their essences and the most difficult part
s of their implementation and support. Our intention is to discuss the use
of NVP in OO terms and to outline all novelties arising from this. The re-u
sability of SFT features is a key point in our approach. One of the conclus
ions we have arrived at is that, generally speaking, the entire states of v
ersion objects should be compared to defect and mask the faulty one. We pro
pose unifying in one component features dealing with adjudication and fault
y object recovery because these functionalities have a lot in common. Our a
pproach is demonstrated using Ada 95. (C) 1999 Elsevier Science Inc. All ri
ghts reserved.