Modern software is often built by layering upon layers of code development. This makes those software intrinsically unsafe and impossible to test in all possible situations. This excellent post in The Atlantic ‘The Coming Software Apocalypse‘ describes both the extent of the problem and the possible solution.
In this first post we will concentrate on the intrinsic failure-prone characteristic of traditionally-developed software. One example is developed in this post which is striking: after a few accidents involving car speed regulation systems, an expert examined the code and they “described what they found as “spaghetti code,” programmer lingo for software that has become a tangled mess. Code turns to spaghetti when it accretes over many years, with feature after feature piling on top of, and being woven around, what’s already there; eventually the code becomes impossible to follow, let alone to test exhaustively for flaws. Using the same model as the Camry involved in the accident, Barr’s team demonstrated that there were actually more than 10 million ways for the onboard computer to cause unintended acceleration. They showed that as little as a single bit flip—a one in the computer’s memory becoming a zero or vice versa—could make a car run out of control.”
Particularly scary when we note that cars are nowadays the most sophisticated machines on the planet! And a huge challenge for regulators too!
The solution is to implement a new way to produce software: automatic generation from a systems model basis. We’ll examine this in the next post.