The software design technology is assumed to have reached extremely mature state.
Very complex software design tasks such as developing a flight-controller for autonomous scramjet roaring at mach-10 seem to be achievable automatically(Have a look at this story on MATLAB website.)
In such scenario, we assume that software tools available to us are perfect enough to be employed in critical applications such as design of software for life-support machine.
No doubt there are unsolved problems (especially posed by artificial intelligence and information extraction), but we all assume that absolutely essential algorithms (like sorting, searching, reading or writing a file etc. ) used in any program have been perfected.
If you think so, you should look at this post written by Joshua Bloch (one of the developers of JDK.)
Joshua points out how a simple code for finding out a mid-index of an array turns out to be buggy after 20 years of it being written first.
This post clearly points to the need for any software developer to be humble about the quality of his algorithm. The bug-free algorithm works all the time and in all situations. We must admit that we are unlikely to forsee all the situations to which our algorithms may be subjected, so we can never quite get a bug-free algorithm – no matter how simple a thing it does. So we must be very vigilant about bugs – especially in basic algorithms because their cumulative effect is pervasive and huge.
Again, is it fine to use automated tools to develop software for life-support machine?
