  The structures for the expression of fault-tolerance provisions into the
application software are the central topic of this paper. Structuring
techniques answer the questions "How to incorporate fault-tolerance in the
application layer of a computer program" and "How to manage the fault-tolerant
code". As such, they provide means to control complexity, the latter being a
relevant factor for the introduction of design faults. This fact and the ever
increasing complexity of today's distributed software justify the need for
simple, coherent, and effective structures for the expression of
fault-tolerance in the application software. In this text we first define a
"base" of structural attributes with which application-level fault-tolerance
structures can be qualitatively assessed and compared with each other and with
respect to the above mentioned needs. This result is then used to provide an
elaborated survey of the state-of-the-art of application-level fault-tolerance
structures.
