0% found this document useful (0 votes)
7 views5 pages

Software Engineering Fundamentals Explained

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views5 pages

Software Engineering Fundamentals Explained

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

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]

Common questions

Powered by AI

Initially, software engineering was seen as a reactive measure to the 'software crisis,' focusing on resolving basic project failures . Over time, as technological advances like the Internet of Things and edge computing have developed, software engineering evolved significantly . Modern software ecosystems require integrating complex system components, emphasizing architecture as a foundational element. This evolution is marked by an intertwined relationship with systems engineering, where effective system architecture and integration become essential, reflective of software’s centrality in modern systems .

Standards bodies like ISO/IEC JTC 1/SC 7 have played a crucial role in compiling and publishing the Software Engineering Body of Knowledge (SWEBOK), which consolidates best practices in software engineering . This document provides a framework for the industry, guiding both academic curricula and professional standards for practitioners. The recognition and development of SWEBOK have influenced the software engineering profession by promoting a consistent set of guidelines and practices worldwide, thus enhancing the quality and predictability of software development projects .

Margaret Hamilton's work during the Apollo missions was instrumental in promoting software engineering as a legitimate discipline by emphasizing systematic approaches to software development, which was crucial for the success of these critical missions . She coined the term 'software engineering' to reinforce the importance and legitimacy of their rocesses in managing complex software systems. Her advocacy helped validate the discipline within the context of high-stakes, mission-critical applications .

The primary challenges that necessitated the establishment of software engineering as a distinct field in the 1960s included projects that were over budget, missed deadlines, required extensive debugging, and often failed to meet consumer needs or were never completed . These challenges were addressed during the first NATO conference on software engineering in 1968, where best practices and guidelines for software development were established to tackle the 'software crisis' . This conference laid the foundation for formal methodologies in the discipline, helping to standardize processes and improve project management practices.

The Capability Maturity Model Integration (CMMI) is used to evaluate the process maturity and capabilities of software development teams, particularly by the US Government, to assess and improve their performance . The Software Engineering Institute (SEI), established at Carnegie Mellon University, played a pivotal role in the formation of CMMI through its Software Process Program, which was founded by Watts Humphrey to understand and manage software engineering processes . The CMMI framework helps organizations improve their development processes and achieve higher levels of process maturity.

Notable definitions of software engineering include: the Bureau of Labor Statistics' description as the 'systematic application of scientific and technological knowledge' , IEEE's portrayal as a 'systematic, disciplined, quantifiable approach' , Ian Sommerville's view of it as concerned with all aspects of software production , and Google’s emphasis on programming integrated over time . These definitions collectively reflect the discipline’s comprehensive scope involving both theoretical principles and practical applications necessary for developing and maintaining software systems.

The Software Engineering Institute (SEI) significantly influenced modern software engineering practices and standards through initiatives like the Software Process Program, which Watts Humphrey founded. This program laid the groundwork for understanding and refining software engineering processes, leading to developments such as the Capability Maturity Model Integration (CMMI). SEI's work guided organizations in enhancing their software development processes, thereby improving the quality and consistency of software products and impacting official assessments and certifications globally .

Modern technological trends such as Edge Computing and the Internet of Things have emphasized the prominence of software in integrating complex system components, thus influencing the relationship between software engineering and systems engineering . These trends highlight the need for software to be a critical factor in systems architecture, leading to a closer intertwining of the two disciplines. Good systems engineering is essential in enabling effective software engineering, as it provides the framework for incorporating software solutions into broader system landscapes .

The 'software crisis' emerged during the 1960s due to widespread issues in software projects that were over budget, behind schedule, and unreliable . This crisis was publicly addressed in the first NATO conference in 1968, highlighting these often catastrophic failures . The term 'software crisis' catalyzed the establishment of software engineering as a formal discipline, underpinning the urgency for developing structured methods and practices to avoid similar project failures in the future, thereby shaping the industry's focus on processes and tooling.

The legitimacy of software engineering as an engineering discipline is contentious. David Parnas argues that it qualifies as a form of engineering . In contrast, Steve McConnell asserts that it is not currently recognized as such, though it should be . Donald Knuth views programming as both an art and a science, suggesting a hybrid nature , while Edsger W. Dijkstra has criticized the misuse of 'software engineering' in the US . These perspectives highlight the diversity in opinion regarding whether software engineering measures up to traditional engineering disciplines and emphasize the unique qualities that differentiate it.

You might also like