Software Reliability: what we believe
Software Reliability: what we believe #
This is part one of Project Cinnte (KIN-TEH), an effort to look at some foundational questions in software reliability.
Introduction #
Being professionally interested in questions of software reliability, we have often wondered whether or not we can find good models to help explain, characterise, or predict failure. The industry doesn’t have much in the way of such models today. What we have is practitioner’s intuition, and it’s often the best thing we do have, but it’s hard to know if it’s the best thing we could have.
In the act of reflecting on this question, we realised that there isn’t a good source that documents precisely what that intuition actually says. The rest of this document is an attempt to do that.
The standard doctrine #
Here is our take on the “standard doctrine” on bugs, outages, and how software development typically happens - happened? - in the pre-AI SWE era.
We label the following propositions for ease of reference, together with their commentary.
P0: Bugs happen as a function of the sustained intellectual effort underpinning writing software. The longer the effort or the more intense the effort required, the larger the chance of incorrect software being written.
Software engineers believe this because they model the act of writing software as having a problem to deal with, thinking of a way to solve that problem, and writing down the solution. The tougher the problem, the more chance you get it wrong; the larger the problem, the more chance you get it wrong.
P1: Other things being equal, the bigger or more complex the software, the more bugs there are.
P2: Other things being equal, the newer the software, the more bugs there are.
These look like simple corollaries of the above, though there is more complexity there when you tease it apart. When we say “bigger” above, that follows clearly from P0, but “more complex” also brings in scenarios where the problem might not require a large mass of software to solve, but might be algorithmically complex, have a very large number of business domain exceptions, have uncommon constraints (e.g. latency), or similar. P2 in particular introduces a new idea: newly made software has not encountered reality yet, and will have more bugs than software which has encountered reality.
P3: Bugs can occur for a variety of reasons, and on a number of different levels. The category of “bug” itself is quite wide, and includes at least typos, inaccurately writing what you want, accurately writing what you want but it turns out it’s not the right thing to want, incorrectly capturing your own requirements, incorrectly understanding other people’s requirements, working with third-party software or services with different models of the problem domain, compiler errors, microcode errors, firmware errors, or cosmic rays.
The current authors have had all of these happen to them at one stage or another. There is probably some kind of long-tail distribution of the frequency of occurrence, but the structure doesn’t matter for most of these observations.
[Continued…]