Sunday 26 January 2014

SOFTWARE ENGINEERING

SWhen the first digital computers appeared in the early 1940s,[10] the instructions to make them operate were wired into the machine. Practitioners quickly realized that this design was not flexible and came up with the "stored program architecture" or von Neumann architecture. Thus the division between "hardware" and "software" began with abstraction being used to deal with the complexity of computing.

Programming languages started to appear in the 1950s and this was also another major step in abstraction. Major languages such as Fortran, ALGOL, and COBOL were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively. E.W. Dijkstra wrote his seminal paper, "Go To Statement Considered Harmful",[11] in 1968 and David Parnas introduced the key concept of modularity and information hiding in 1972[12] to help programmers deal with the ever increasing complexity of software systems.

The term "Software Engineering" was first used in 1968 as a title for the world's first conference on Software Engineering, sponsored and facilitated by NATO. The conference was attended by international experts on software who agreed on defining best practices for software grounded in the application of engineering. The result of the conference is a report that defines how software should be developed [i.e., software engineering foundations]. The original report is publicly available.[13]

The discipline of Software Engineering was coined to address poor quality of software, get projects exceeding time and budget under control, and ensure that software is built systematically, rigorously, measurably, on time, on budget, and within specification. Engineering already addresses all these issues, hence the same principles used in engineering can be applied to software. The widespread lack of best practices for software at the time was perceived as "software crisis".[14][15][16]

Barry W. Boehm documented several key advances to the field in his 1981 book, 'Software Engineering Economics'.[17] These include his Constructive Cost Model (COCOMO), which relates software development effort for a program, in man-years T, to source lines of code (SLOC).

The book analyzes sixty-three software projects and concludes the cost of fixing errors escalates as we move the project toward field use. The book also asserts that the key driver of software cost is the capability of the software development team.

In 1984, the Software Engineering Institute (SEI) was established as a federally funded research and development center headquartered on the campus of Carnegie Mellon University in Pittsburgh, Pennsylvania, United States. Watts Humphrey founded the SEI Software Process Program, aimed at understanding and managing the software engineering process. His 1989 book, Managing the Software Process,[18] asserts that the Software Development Process can and should be controlled, measured, and improved. The Process Maturity Levels introduced would become the Capability Maturity Model Integration for Development(CMMi-DEV), which has defined how the US Government evaluates the abilities of a software development team.

The modern generally accepted practice for Software Engineering has been cataloged as a Guide to the Software Engineering Body of Knowledge (SWEBOK) which has become an internationally accepted standard ISO/IEC TR 19759:2005.[19oftware Engineering is the study and application of engineering to the design, development, and maintenance of software.[1][2][3]

Typical formal definitions of software engineering are:

"the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software".[4]
"an engineering discipline that is concerned with all aspects of software production"[5]
"the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machines"[6]
The term has been used less formally:

as the informal contemporary term for the broad range of activities that were formerly called computer programming and systems analysis;[7]
as the broad term for all aspects of the practice of computer programming, as opposed to the theory of computer programming, which is called computer science;[8]
as the term embodying the advocacy of a specific approach to computer programming, one that urges that it be treated as an engineering discipline rather than an art or a craft, and advocates the codification of recommended practices.[9


G

No comments:

Post a Comment