Software crisis was a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time. The software crisis was due to the rapid increases in computer power and the complexity of the problems that could be tackled. With the increase in the complexity of the software, many software problem arose because existing methods were neither sufficient nor up to the mark.
The term "software crisis" was coined by some attendees at the first NATO Software Engineering Conference in 1968 at Garmisch, Germany. An early use of the term is in Edsger Dijkstra's 1972 ACM Turing Award Lecture:
The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem.
The causes of the software crisis were linked to the overall complexity of hardware and the software development process. The crisis manifested itself in several ways:
- Projects running over-budget.
- Projects running over-time.
- Software was very inefficient.
- Software was of low quality.
- Software often did not meet requirements.
- Projects were unmanageable and code difficult to maintain.
- Software was never delivered.
Many of the software problems were caused by increasingly complex hardware. In his essay, Dijkstra noted that the newer computers in his day "embodied such serious flaws that [he] felt that with a single stroke the progress of computing science had been retarded by at least ten years". He also believed that the influence of hardware on software was too frequently overlooked.
Various processes and methodologies have been developed over the last few decades to improve software quality management, with varying degrees of success. The most successful pattern was the introduction of object-oriented programming, which solved many software development problems and enabled the programmers to handle more complex code a lot easier, especially through encapsulation and inheritance. However, it is widely agreed[according to whom?] that there is no "silver bullet" ― that is, no single approach that will prevent project overruns and failures in all cases. In general, software projects that are large, complicated, poorly specified, and involve unfamiliar aspects, are still particularly vulnerable to large, unanticipated problems.
- Report about the NATO Software Engineering Conference dealing with the software crisis
- E. W. Dijkstra Archive
- Edsger Dijkstra: The Humble Programmer (PDF, 473Kb)
- B. Randell - The NATO Software Engineering Conferences
- Markus Bautsch: Cycles of Software Crises in: ENISA Quarterly on Secure Software (PDF file; 1,86 MB)