What to expect
This chapter discusses robust programs, including defensive design, validation, testing.
Like every chapter, I’ve included a summary headed “TL:DR” (too long, didn’t read). Here is the TL:DR for Robust Programs…
Early programmers designed and debugged their own programs. Building in code to prevent failures due to user error or hardware failure was pioneered by Margaret Hamilton for the Apollo space programme. Her work led to the creation of a new discipline: Software Engineering, popularised by a
NATO conference in 1968. At the same conference, Fritz Bauer coined the term software crisis to describe a critical shortage of programmers. New techniques and tools were created throughout the 1970s to address the crisis and improve software quality including new languages that encouraged structured programming, and new paradigms such as functional programming and object-oriented programming.
Testing began to be recognised as separate from debugging in the 1970s with Glenford Myers writing The Art of Software Testing in 1979. The software development life cycle (SDLC) was formalised in the
1980s and the waterfall model became commonplace after the US Department of Defence adopted it in 1985. The model described several distinct project phases: requirements gathering, design, implementation, testing and maintenance. Software testing became a separate discipline performed
by a different team to the developers. Industry found the waterfall model unresponsive to changing user requirements and Iterative techniques often known as agile grew popular in the 1990s. Testing now consumes a large part of the IT budget, and many companies began to employ test automation software. Modern robust programming includes anticipating misuse through authentication, sanitisation and
validation, plus a formal development methodology such as Agile, structured programming
techniques focused on modular, maintainable code, and a rigorous testing regime.