Software engineering
83 languages
Article
Talk
Read
Edit
View history
Tools
Appearance
hide
Text
Small
Standard
Large
Width
Standard
Wide
Color (beta)
Automatic
Light
Dark
From Wikipedia, the free encyclopedia
Part of a series on
Software development
hide
Core activities
Data modeling
Processes
Requirements
Design
Construction
Engineering
Testing
Debugging
Deployment
Maintenance
show
Paradigms and models
show
Methodologies and frameworks
show
Supporting disciplines
show
Practices
show
Tools
show
Standards and bodies of knowledge
show
Glossaries
show
Outlines
v
t
e
Software engineering is a branch of both computer
science and engineering focused on designing, developing, testing, and
maintaining software applications.[1] It involves applying engineering
principles and computer programming expertise to develop software systems that
meet user needs.[2][3][4][5]
The terms programmer and coder overlap software engineer, but they imply only the
construction aspect of a typical software engineer workload.[6]
A software engineer applies a software development process,[2][7] which involves
defining, implementing, testing, managing, and maintaining software systems, as
well as developing the software development process itself.
History
[edit]
Main article: History of software engineering
Beginning in the 1960s, software engineering was recognized as a separate field
of engineering.[8]
The development of software engineering was seen as a struggle. Problems
included software that was over budget, exceeded deadlines, required
extensive debugging and maintenance, and unsuccessfully met the needs of
consumers or was never even completed.
In 1968, NATO held the first software engineering conference, where issues related
to software were addressed. Guidelines and best practices for the development of
software were established.[9]
The origins of the term software engineering have been attributed to various
sources. The term appeared in a list of services offered by companies in the June
1965 issue of "Computers and Automation"[10] and was used more formally in the
August 1966 issue of Communications of the ACM (Volume 9, number 8) in
"President's Letter to the ACM Membership" by Anthony A. Oettinger. [11][12][13] It is also
associated with the title of a NATO conference in 1968 by Professor Friedrich L.
Bauer.[14] Margaret Hamilton described the discipline of "software engineering" during
the Apollo missions to give what they were doing legitimacy.[15] At the time, there was
perceived to be a "software crisis".[16][17][18] The 40th International Conference on
Software Engineering (ICSE 2018) celebrates 50 years of "Software Engineering"
with the Plenary Sessions' keynotes of Frederick Brooks[19] and Margaret Hamilton.[20]
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.[21] Watts
Humphrey founded the SEI Software Process Program, aimed at understanding and
managing the software engineering process.[21] The Process Maturity Levels
introduced became the Capability Maturity Model Integration for Development
(CMMI-DEV), which defined how the US Government evaluates the abilities of a
software development team.
Modern, generally accepted best practices for software engineering have been
collected by the ISO/IEC JTC 1/SC 7 subcommittee and published as the Software
Engineering Body of Knowledge (SWEBOK).[7] Software engineering is considered
one of the major computing disciplines.[22]
In modern systems, where concepts such as Edge Computing, Internet of
Things and Cyber-physical Systems are prevalent, software is a critical factor. Thus,
software engineering is closely related to the Systems Engineering discipline.
The Systems Engineering Body of Knowledge claims:
Software is prominent in most modern systems architectures and is often the primary
means for integrating complex system components. Software engineering and
systems engineering are not merely related disciplines; they are intimately
intertwined....Good systems engineering is a key factor in enabling good software
engineering.
Terminology
[edit]
Definition
[edit]
Notable definitions of software engineering include:
"The systematic application of scientific and technological knowledge, methods, and
experience to the design, implementation, testing, and documentation of software."—
The Bureau of Labor Statistics—IEEE Systems and software engineering –
Vocabulary[23]
"The application of a systematic, disciplined, quantifiable approach to the development,
operation, and maintenance of software."—IEEE Standard Glossary of Software
Engineering Terminology[24]
"An engineering discipline that is concerned with all aspects of software production."—
Ian Sommerville[25]
"The establishment and use of sound engineering principles in order to economically
obtain software that is reliable and works efficiently on real machines."—Fritz Bauer[26]
"A branch of computer science that deals with the design, implementation, and
maintenance of complex computer programs."—Merriam-Webster[27]
"'Software engineering' encompasses not just the act of writing code, but all of the tools
and processes an organization uses to build and maintain that code over time. [...]
Software engineering can be thought of as 'programming integrated over time.'"—
Software Engineering at Google[28]
The term has also been used less formally:
as the informal contemporary term for the broad range of activities that were formerly
called computer programming and systems analysis[29]
as the broad term for all aspects of the practice of computer programming, as opposed
to the theory of computer programming, which is formally studied as a sub-discipline
of computer science[30]
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[31]
Suitability
[edit]
Individual commentators have disagreed sharply on how to define software
engineering or its legitimacy as an engineering discipline. David Parnas has said that
software engineering is, in fact, a form of engineering.[32][33] Steve McConnell has said
that it is not, but that it should be.[34] Donald Knuth has said that programming is an
art and a science.[35] Edsger W. Dijkstra claimed that the terms software
engineering and software engineer have been misused in the United States.[36]