software development processes and methods have
been studied for decades. Despite that, we still do not
have reliable tools for ensuring that complicated software
systems intended for high-confidence tasks are free from
faults and operational failures.Faults may result from root causes that range from knowledge errors, to
communication errors, to incomplete analysis errors, to
transcription errors. Exacerbating the problem is the evergrowing expectations of the end-users and the growth in
the complexity of the tasks. There are essentially three
ways of dealing with faults