Originally Posted by
JDNSW
The problem of errors in software is, I suspect a sleeping monster in a lot of areas. I ran across one of these in the 1990s, in a piece of navigational software that had been used by one of our contractors for twenty years (with the code lifted from one set of software to new systems without rewriting). Increasing precision of work showed a worrying systematic degradation of data that eventually was traced to a navigational problem. This in turn was eventually found to be a software error that only operated in the southern hemisphere in changing from grid north to true north. The error was that the programmer explicitly changed the sign of a cosine function for negative angles, forgetting that the cosine is negative for negative angles.
More recently, my brother, who is a US resident, advised me of a New York court case where a drink driving case has successfully managed to get the code for a breathalyser to be opened for the court, and has found that there was a simple error in the method of determining an average of readings - instead of summing figures and dividing by the number of figures, the code added each additional figure to the previous sum and divided by two. Which does not give the same answer!
A well documented case was an unmanned space mission, one of the Mars landers, I think it was, where a mission failure was tracked down to an incorrectly handled change of units from imperial to metric.
What I am talking about is errors which do not affect whether the software runs reliably, but gives incorrect results. In most software, testing ensures that no serious errors exist for normal ranges of input, but most software today is so complex that it is impossible to test all possible routes through the software, and there is a real risk that results can be either slightly wrong a lot of the time, or wildly wrong on rare occasions, or both. And they can continue a long time like that.
In very critical systems, such as Airbus fly by wire software, they use triplicated systems, with different hardware, different software teams (not allowed to talk to each other) and different operating systems.
Any reasonable view of the software that is pervasive today in everything we do must come to the conclusion that there are a lot more of this sort of problem lurking to bite us.
John