In this week's NewScientist magazine there's an article on software bugs in airplanes. Allow me to quote some parts of it:
Software failures remain a risk, though, and with aircraft makers set to increase the proportion of aircraft functions controlled by software, experts are warning that they will become more frequent, increasing the chance that one will cause an accident. […] But the addition of software led to different problems. Some of these are documented in a report completed last year by the US National Academy of Sciences (NAS). It lists a number of instances in which software bugs caused frightening problems during flight. […] All software is susceptible to bugs, so it must be tested under as many different circumstances as possible. Ideally, the bugs get discovered at this time and are removed before the software is actually used. This is very difficult in complex systems like aircraft because the number of possible scenarios – such as different combinations of air densities, engine temperatures and specific aerodynamics – is huge.
The article then goes on, quoting Martyn Thomas, a systems engineering consultant, and member of the NAS panel that produced the report:
"MCDC testing is not removing any significant numbers of bugs", says Thomas. "It highlights the fact that testing is a completely hopeless way of showing that software does not contain errors."
Thomas claims that the industry should move towards the use of "safe" programming languages:
These languages and their compiler software have strict controls within them, so it is very difficult for programmers to write vague or ambiguous code. […] "How long are we prepared to go on using tools we know are broken to develop software on which people's lives depend? No other engineering discipline would rely on tools that have dangerous faults."
What I find most interesting is the reference to complex systems and the drive to seek a solution in better tools. I am confident that better tools will help. A little bit. But they will not be sufficient to control complexity, and the problems that it brings along.