软件工程基础教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 Why Do We Need Software Engineering?

1.3.1 Software Crisis

The following is abstracted from [wiki2011]:

Software crisis was a term used in the early days of computing science. The term was used to describe the impact of rapid increases in computer power and the complexity of the problems which could be tackled. In essence, it refers to the difficulty of writing correct, understandable, and verifiable computer programs.”{2}

The term “software crisis” was coined by F. L. Bauer Bauer1968 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.”-Edsger Dijkstra, the Humble Programmer (EWD340), Communications of the ACM

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 was 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 “tame”the software crisis, with varying degrees of success. However, it is widely agreed that there is no“silver bullet”―that is, no single approach which will prevent project overruns and failures in all cases. In general, software projects which are large, complicated, poorly-specified, and involve unfamiliar aspects, are still particularly vulnerable to large, unanticipated problems.

1.3.2 An Economist’s View of Software and Software Engineering

Firstly, engineering is defined as following:

● The art or science of making practical application of the knowledge of pure science (as phy. and chem. construction etc.)

● The action, work, or profession of an engineer

An economist’s view of software and software engineering [Pressman2005] is:

● Software development is a social learning process because knowledge is initially dispersed, latent and incomplete.

● The process provides interaction (dialogue) among users, designers, and evolving tools,

● It is an iterative process, with each new round of the dialogue eliciting more useful knowledge from the people involved.

1.3.3 The Formal Definition of Software Engineering

The IEEE Computer Society defines software engineering as: “(1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1).” {3}

Also some people think that software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.