Department of Computer Science and Technology

Technical reports

Murphy’s law, the fitness of evolving species, and the limits of software reliability

Robert M. Brady, Ross J. Anderson, Robin C. Ball

September 1999, 14 pages

DOI: 10.48456/tr-471

Abstract

We tackle two problems of interest to the software assurance community. Firstly, existing models of software development (such as the waterfall and spiral models) are oriented towards one-off software development projects, while the growth of mass market computing has led to a world in which most software consists of packages which follow an evolutionary development model. This leads us to ask whether anything interesting and useful may be said about evolutionary development. We answer in the affirmative. Secondly, existing reliability growth models emphasise the Poisson distribution of individual software bugs, while the empirically observed reliability growth for large systems is asymptotically slower than this. We provide a rigorous explanation of this phenomenon. Our reliability growth model is inspired by statistical thermodynamics, but also applies to biological evolution. It is in close agreement with experimental measurements of the fitness of an evolving species and the reliability of commercial software products. However, it shows that there are significant differences between the evolution of software and the evolution of species. In particular, we establish maximisation properties corresponding to Murphy’s law which work to the advantage of a biological species, but to the detriment of software reliability.

Full text

PDF (0.2 MB)

BibTeX record

@TechReport{UCAM-CL-TR-471,
  author =	 {Brady, Robert M. and Anderson, Ross J. and Ball, Robin C.},
  title = 	 {{Murphy's law, the fitness of evolving species, and the
         	   limits of software reliability}},
  year = 	 1999,
  month = 	 sep,
  url = 	 {https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-471.pdf},
  institution =  {University of Cambridge, Computer Laboratory},
  doi = 	 {10.48456/tr-471},
  number = 	 {UCAM-CL-TR-471}
}