The design diversity approaches have specifically
been developed to tolerate design faults in software
arising out of wrong specifications and incorrect
coding. Two or more variants of a piece of software
developed by different teams, but to a common
specification, are used. These variants are then used in
a time- or space-redundant manner to achieve fault
tolerance. Popular techniques which are based on the
design diversity concept for fault tolerance in software
are N-version programming [7], recovery blocks [37]
and N-self-checking programming [4]. The design
diversity approach was developed mainly to deal with
Bohrbugs. Of course, it can also mitigate Mandelbugs,
provided that Mandelbugs leading to a failure in a
specific situation are not contained in several (or even
all) of the different designs; however, there are less
expensive approaches to dealing with Mandelbugs.