A History of Quality in Software Engineering

speckx1 pts0 comments

A History of Quality in Software Engineering | My blog

Share via

Subscribe for a few deep articles per year

Subscribe

Thank you for sharing the article

Share via

Software quality practices have evolved over six decades. What began as a response<br>to the “software crisis” of the 1960s has grown into collaborative specification<br>techniques that bridge the gap between business and technical teams.

Contents

Evolution of Quality Approaches

The Software Crisis (1968)

Structured Programming (1968)

Fagan Inspections (1976)

Cleanroom Software Engineering (1980s)

Personal Software Process (1990s)

User Stories (1990s, XP origin)

Extreme Programming (1996-1999)

UML and Design Communication (1997)

Test-Driven Development (~2000)

Given-When-Then Format (early 2000s)

Behavior-Driven Development (2006)

Specification by Example (2010s)

The C4 Model (2011)

Example Mapping (mid-2010s)

TDD vs BDD

Common Pitfalls

Key Figures

Further Reading

Example Story: Customer Books a Cleaning Appointment

Evolution of Quality Approaches

1968-1990s: Quality through PROCESS

The early focus was on disciplined processes to catch defects: Fagan Inspections (formal peer review), Cleanroom (defect prevention), and PSP (individual measurement).

1994-1997: Quality through DESIGN COMMUNICATION

Teams needed shared visual languages. UML unified competing notations into a standard for modeling software systems.

1996-2001: Quality through PRACTICE

Extreme Programming shifted focus to lightweight practices: TDD, pair programming, and continuous integration.

2001: The Agile Manifesto

Seventeen practitioners valued “working software over comprehensive documentation,” creating tension with UML-heavy approaches. Source: Agile Manifesto

2006-2011: Quality through LIGHTWEIGHT COMMUNICATION

Bridging business and technical teams: BDD (natural language specs), C4 Model (just enough diagrams), and Specification by Example (collaborative examples).

PROCESS --------> DESIGN --------> PRACTICE --------> LIGHTWEIGHT<br>1968-1990s 1994-1997 1996-2001 2006-2011<br>| | | |<br>v v v v<br>Inspections UML XP & TDD BDD & C4<br>Cleanroom Sequence Pair prog. SbE<br>PSP diagrams CI Example Map

The Software Crisis and Birth of Software Engineering (1968)

The term “software crisis” was coined at the first NATO Software Engineering<br>Conference in Garmisch, Germany in 1968. The conference, attended by over fifty<br>experts from eleven countries including Edsger Dijkstra, Tony Hoare, and Niklaus<br>Wirth, confronted a growing problem: software projects were consistently over<br>budget, overdue, and unreliable.

As Dijkstra later observed in his 1972 Turing Award lecture:

“The major cause of the software crisis is that the machines have become<br>several orders of magnitude more powerful… as long as there were no<br>machines, programming was no problem at all; when we had a few weak<br>computers, programming became a mild problem, and now we have gigantic<br>computers, programming has become an equally gigantic problem.”

The conference deliberately adopted the provocative term “software engineering”<br>to suggest that software development needed the rigor of traditional engineering<br>disciplines. This event marked the beginning of systematic approaches to<br>software quality.

Structured Programming (1968)

That same year, Dijkstra published his famous letter “Go To Statement Considered<br>Harmful” in Communications of the ACM, marking the beginning of structured<br>programming.

Definition: A programming paradigm using block-based control flow instead of<br>arbitrary jumps via goto statements.

The Three Control Structures

Dijkstra showed that any program can be written using just three constructs:

Sequence - Statements execute one after another in order:

read_input()<br>process_data()<br>write_output()

Selection - Choose different paths based on a condition:

if user_is_authenticated:<br>show_dashboard()<br>else:<br>show_login_form()

Iteration - Repeat statements while a condition holds:

while items_remaining:<br>process_next_item()

Core principle: These three control structures are sufficient to express any<br>computable function (the structured program theorem).

Key insight: Dijkstra observed that the quality of a programmer’s code was<br>inversely proportional to the number of gotos used. Code without gotos can more<br>easily be proven correct.

By the end of the 20th century, nearly all programming languages had adopted<br>structured programming constructs. Languages that originally lacked them<br>(FORTRAN, COBOL, BASIC) added support.

Fagan Inspections (1976)

Michael Fagan at IBM developed formal software inspections as a systematic<br>method for finding defects in documents, code, and specifications.

Definition: A formal peer review process with predefined roles, entry/exit<br>criteria, and structured meetings focused solely on defect detection.

Inspection Roles

Moderator: Leads the inspection and ensures the process is followed

Reader: Presents the material being inspected to the team

Author: Created the work...

software programming quality engineering structured crisis

Related Articles