Software engineering
Part of a series on |
Software development |
---|
Software engineering is an engineering approach to software development.[1][2][3] A practitioner, a software engineer, applies the engineering design process to develop software.
The terms programmer and coder overlap software engineer, but they imply only the construction aspect of typical software engineer workload.[4]
A software engineer applies a software development process,[1][5] which involves the definition, implementation, testing, management and maintenance of software systems and with development of the software development process itself.
History
Beginning in the 1960s, software engineering was recognized as a separate field of engineering.
The development of software engineering was seen as a struggle. It was difficult to keep up with the hardware which caused many problems for software engineers. 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.[6]
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"
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. 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.
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).[17] Software engineering is considered one of the major computing disciplines.[18]
Terminology
Definition
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[19]
- "The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of IEEE Standard Glossary of Software Engineering Terminology[20]
- "an engineering discipline that is concerned with all aspects of software production"—Ian Sommerville[21]
- "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[22]
- "a branch of computer science that deals with the design, implementation, and maintenance of complex computer programs"—Merriam-Webster[23]
- "'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[24]
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;[25]
- 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;[26]
- 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.[27]
Etymology
When I first came up with the term, no one had heard of it before, at least in our world. It was an ongoing joke for a long time. They liked to kid me about my radical ideas. It was a memorable day when one of the most respected hardware gurus explained to everyone in a meeting that he agreed with me that the process of building software should also be considered an engineering discipline, just like with hardware. Not because of his acceptance of the new "term" per se, but because we had earned his and the acceptance of the others in the room as being in an engineering field in its own right.[28]
Suitability
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.[29][30] Steve McConnell has said that it is not, but that it should be.[31] Donald Knuth has said that programming is an art and a science.[32] Edsger W. Dijkstra claimed that the terms software engineering and software engineer have been misused[improper synthesis?] and should be considered harmful, particularly in the United States.[33]
Workload
Requirements analysis
or domain.Functional requirements describe expected behaviors (i.e. outputs). Non-functional requirements specify issues like portability, security, maintainability, reliability, scalability, performance, reusability, and flexibility. They are classified into the following types: interface constraints, performance constraints (such as response time, security, storage space, etc.), operating constraints, life cycle constraints (maintainability, portability, etc.), and economic constraints. Knowledge of how the system or software works is needed when it comes to specifying non-functional requirements. Domain requirements have to do with the characteristic of a certain category or domain of projects.[34]
Design
Software design is the process of making high-level plans for the software. Design is sometimes divided into levels:
- Interface designplans the interaction between a system and its environment as well as the inner workings of the system
- Architectural design plans the major components of a system; including their responsibilities, properties, and interfaces between them.
- Detailed design plans internal elements; including their properties, relationships, algorithms and data structures.[35]
Construction
Software construction, [1][5] typically involves programming (a.k.a. coding), unit testing, integration testing, and debugging so as to implement the design. Testing during this phase is generally performed by the programmer and with the purpose to verify that the code behaves per design and to know when the code is ready for next level tesing.[citation needed]
Testing
Software testing[1][5] is an empirical, technical investigation conducted to provide stakeholders with information about the quality of the software under test.
When described separately from construction, testing typically is performed by
Program analysis
Program analysis is the process of analyzing computer programs with respect to an aspect such as performance, robustness, and security.
Maintenance
Software maintenance[1][5] refers to supporting the software after release. It may include but is not limited to: error correction, optimization, deletion of unused and discarded features, and enhancement of existing features.
Usually, maintenance takes up about 40% to 80% of project cost, therefore, focusing on maintenance can reduce development costs.[36]
Education
The examples and perspective in this article may not represent a worldwide view of the subject. (November 2010) |
Knowledge of
In addition to university education, many companies sponsor internships for students wishing to pursue careers in information technology. These internships can introduce the student to interesting real-world tasks that typical software engineers encounter every day. Similar experience can be gained through military service in software engineering.
Software engineering degree programs
Half of all practitioners today have
Since then, software engineering undergraduate degrees have been established at many universities. A standard international curriculum for undergraduate software engineering degrees,
In 1998, the US
Profession
In the United States, the
The
Employment
The examples and perspective in this United States may not represent a worldwide view of the subject. (September 2021) |
There are an estimated 26.9 million professional software engineers in the world as of 2022, up from 21 million in 2016.[48][49]
Many software engineers work as employees or contractors. Software engineers work with businesses, government agencies (civilian or military), and non-profit organizations. Some software engineers work for themselves as
Most software engineers and programmers work 40 hours a week, but about 15 percent of software engineers and 11 percent of programmers worked more than 50 hours a week in 2008.[50] Potential injuries in these occupations are possible because like other workers who spend long periods sitting in front of a computer terminal typing at a keyboard, engineers and programmers are susceptible to eyestrain, back discomfort, and hand and wrist problems such as carpal tunnel syndrome.[51]
United States
The
Certification
The
Broader certification of general software engineering skills is available through various professional societies. As of 2006[update], the
In the U.K. the British Computer Society has developed a legally recognized professional certification called Chartered IT Professional (CITP), available to fully qualified members (MBCS). Software engineers may be eligible for membership of the British Computer Society or Institution of Engineering and Technology and so qualify to be considered for Chartered Engineer status through either of those institutions. In Canada the Canadian Information Processing Society has developed a legally recognized professional certification called Information Systems Professional (ISP).[73] In Ontario, Canada, Software Engineers who graduate from a Canadian Engineering Accreditation Board (CEAB) accredited program, successfully complete PEO's (Professional Engineers Ontario) Professional Practice Examination (PPE) and have at least 48 months of acceptable engineering experience are eligible to be licensed through the Professional Engineers Ontario and can become Professional Engineers P.Eng.[74] The PEO does not recognize any online or distance education however; and does not consider Computer Science programs to be equivalent to software engineering programs despite the tremendous overlap between the two. This has sparked controversy and a certification war. It has also held the number of P.Eng holders for the profession exceptionally low. The vast majority of working professionals in the field hold a degree in CS, not SE. Given the difficult certification path for holders of non-SE degrees, most never bother to pursue the license.
Impact of globalization
The initial impact of outsourcing, and the relatively lower cost of international human resources in developing third world countries led to a massive migration of software development activities from corporations in North America and Europe to India and later: China, Russia, and other developing countries. This approach had some flaws, mainly the distance / time zone difference that prevented human interaction between clients and developers and the massive job transfer. This had a negative impact on many aspects of the software engineering profession. For example, some students in the
While global outsourcing has several advantages, global – and generally distributed – development can run into serious difficulties resulting from the distance between developers. This is due to the key elements of this type of distance that have been identified as geographical, temporal, cultural and communication (that includes the use of different languages and dialects of English in different locations).[79] Research has been carried out in the area of global software development over the last 15 years and an extensive body of relevant work published that highlights the benefits and problems associated with the complex activity. As with other aspects of software engineering research is ongoing in this and related areas.
Prizes
There are several prizes in the field of software engineering:[80]
- The Codie awards is a yearly award issued by the Software and Information Industry Association for excellence in software development within the software industry.
- Jolt Awardsare awards in the software industry.
- Stevens Award is a software engineering award given in memory of Wayne Stevens.
- Harlan Mills Award for "contributions to the theory and practice of the information sciences, focused on software engineering".
Criticism
Some [by whom?] call for licensing, certification and codified bodies of knowledge as mechanisms for spreading the engineering knowledge and maturing the field.
Some claim that the concept of software engineering is so new that it is rarely understood, and it is widely misinterpreted, including in software engineering textbooks, papers, and among the communities of programmers and crafters.
Some claim that a core issue with software engineering is that its approaches are not empirical enough because a real-world validation of approaches is usually absent, or very limited and hence software engineering is often misinterpreted as feasible only in a "theoretical environment."
A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot."[81]
See also
Study and practice
Roles
Professional aspects
- Bachelor of Science in Information Technology
- Bachelor of Software Engineering
- List of software engineering conferences
- List of computer science journals (including software engineering journals)
- Software Engineering Institute
References
Citations
- ^ a b c d e Abran et al. 2004
- ^ ACM (2007). "Computing Degrees & Careers". ACM. Retrieved 2010-11-23.
- ISBN 978-0-8493-7228-5. Retrieved 2011-01-21.
- ^ "Programmers: Stop Calling Yourselves Engineers". The Atlantic. 5 November 2015.
- ^ a b c d "Software Engineering Body of Knowledge (SWEBOK Version 3), 2014" (pdf). www.swebok.org. IEEE Computer Society. Retrieved 24 May 2016.
- ^ "The history of coding and software engineering". www.hackreactor.com. Retrieved 2021-05-06.
- ^ "Computers and Automation: The Computer Directory and Buyers' Guide, 1965" (PDF). bitsavers.org. Retrieved 15 July 2023.
- S2CID 53432801.
- ^ "The origin of "software engineering"". 4 April 2013. Retrieved 17 November 2017.
- ^ Randall, Brian. "The 1968/69 NATO Software Engineering Reports". Retrieved 17 November 2017.
- ^ Software Magazine. "What to Know About the Scientist who Invented the Term "Software Engineering"". Archived from the original on November 24, 2018. Retrieved February 12, 2019.
- ISBN 978-1-292-09613-1.
- ^ Peter, Naur; Randell, Brian (7–11 October 1968). Software Engineering: Report of a conference sponsored by the NATO Science Committee (PDF). Garmisch, Germany: Scientific Affairs Division, NATO. Retrieved 2008-12-26.
- ^ Randell, Brian (10 August 2001). "The 1968/69 NATO Software Engineering Reports". Brian Randell's University Homepage. The School of the Computer Sciences, Newcastle University. Retrieved 2008-10-11.
The idea for the first NATO Software Engineering Conference, and in particular that of adopting the then practically unknown term "software engineering" as its (deliberately provocative) title, I believe came originally from Professor Fritz Bauer.
- ^ 2018 International Conference on Software Engineering celebrating its 40th anniversary, and 50 years of Software engineering. "ICSE 2018 – Plenary Sessions – Fred Brooks". YouTube. Retrieved 9 August 2018.
{{cite web}}
: CS1 maint: numeric names: authors list (link) - ^ 2018 International Conference on Software Engineering celebrating its 40th anniversary, and 50 years of Software engineering. "ICSE 2018 – Plenary Sessions – Margaret Hamilton". YouTube. Retrieved 9 August 2018.
{{cite web}}
: CS1 maint: numeric names: authors list (link) - ^ "ISO/IEC TR 19759:2005". Retrieved 2012-04-01.
- ^ "The Joint Task Force for Computing Curricula 2005" (PDF). 2014-10-21. Archived (PDF) from the original on 2014-10-21. Retrieved 2020-04-16.
- IEEEstd 24765:2010(E), 2010.
- IEEEstd 610.12-1990, 1990.
- ISBN 978-0-321-31379-9.
Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification to maintaining the system after it has gone into use. In this definition, there are two key phrases:
1. Engineering discipline Engineers make things work. They apply theories, methods and tools where these are appropriate [. . .] Engineers also recognize that they must work to organizational and financial constraints. [. . .]
2. All aspects of software production Software engineering is not just concerned with the technical processes of software development but also with activities such as software project management and with the development of tools, methods and theories to support software production. - ^ "Software Engineering". Information Processing. 71: 530–538.
- ^ "Definition of SOFTWARE ENGINEERING". www.merriam-webster.com. Retrieved 2019-11-25.
- ISBN 978-1-492-08279-8.
We propose that "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. What practices can a software organization introduce that will best keep its code valuable over the long term? How can engineers make a codebase more sustainable and the software engineering discipline itself more rigorous?
- ^ Akram I. Salah (2002-04-05). "Engineering an Academic Program in Software Engineering" (PDF). 35th Annual Midwest Instruction and Computing Symposium. Retrieved 2006-09-13.: "For some, software engineering is just a glorified name for programming. If you are a programmer, you might put 'software engineer' on your business card—never 'programmer' though."
- ISBN 978-0-387-97274-9.,p. 26: "As a practical matter, we regard software engineering as the necessary preparation for the practicing, software development and maintenance professional. The Computer Scientist is preparing for further theoretical studies..."
- ^ David Budgen; Pearl Brereton; Barbara Kitchenham; Stephen Linkman (2004-12-14). "Realizing Evidence-based Software Engineering". Archived from the original on 2006-12-17. Retrieved 2006-10-18.: "We believe that software engineering can only advance as an engineering discipline by moving away from its current dependence upon advocacy and analysis,...."
- )
- S2CID 35786237., p. 19: "Rather than treat software engineering as a subfield of computer science, I treat it as an element of the set, {Civil Engineering, Mechanical Engineering, Chemical Engineering, Electrical Engineering,....}."
- S2CID 35786237., p. 20: "This paper argues that the introduction of accredited professional programs in software engineering, programmes that are modelled on programmes in traditional engineering disciplines will help to increase both the quality and quantity of graduates who are well prepared, by their education, to develop trustworthy software products."
- ISBN 0-321-19367-9., p. 39: "In my opinion, the answer to that question is clear: Professional software development should be engineering. Is it? No. But should it be? Unquestionably, yes. "
- S2CID 207685720.Transcript of the 1974 Turing Awardlecture.
- Dijkstra, Edsger W; transcribed by Mario Béland (November 23, 2004) [First published December 3, 1993]. "There is still a war going on (manuscript Austin, 3 December 1993)". E. W. Dijkstra Archive. The University of Texas at Austin, Department of Computer Sciences. Retrieved February 17, 2007.
When the term was coined in 1968 by F.L. Bauer of the Technological University of Munich, I welcomed it. [. . .] I interpreted the introduction of the term "software engineering" as an apt reflection of the fact that the design of software systems was an activity par excellence for the mathematical engineer. [. . .]. As soon the term arrived in the USA, it was relieved of all its technical content. It had to be so for in its original meaning it was totally unacceptable [. . .] In the meantime, software engineering has become an almost empty term, as was nicely demonstrated by Data General who overnight promoted all its programmers to the exalted rank of "software engineer"!
- ^ "Software Engineering | Classification of Software Requirements". GeeksforGeeks. 2018-06-19. Retrieved 2021-05-06.
- ^ "Software Engineering | Software Design Process". GeeksforGeeks. 2019-05-24. Retrieved 2021-05-06.
- ^ "What is Software Maintenance? Definition of Software Maintenance, Software Maintenance Meaning". The Economic Times. Retrieved 2021-05-06.
- ISBN 978-0-7695-2330-9. Archived from the originalon 2016-05-09. Retrieved 2010-09-13.
The total volume of cited literature is intended to be suitable for mastery through the completion of an undergraduate education plus four years of experience.
- ^ "SE2014 Software Engineering Curriculum" (PDF). Retrieved 7 April 2023.
- ^ Cowling, A. J. 1999. The first decade of an undergraduate degree program in software engineering. Ann. Softw. Eng. 6, 1–4 (Apr. 1999), 61–90.
- ^ "ABET Accredited Engineering Programs". April 3, 2007. Archived from the original on June 19, 2010. Retrieved April 3, 2007.
- ISBN 978-0-321-19367-4.
- ^ Software Engineering — Guide to the software engineering body of knowledge (SWEBOK), International Organization for Standardization, 2015, retrieved January 11, 2020
- IEEE. pp. 77–78.
- ^ "NCEES Software Engineering Exam Specifications" (PDF). Archived from the original (PDF) on 2013-08-27. Retrieved 2012-04-01.
- ^ "NCEES discontinuing PE Software Engineering exam". National Council of Examiners for Engineering and Surveying. 13 March 2018. Retrieved 6 August 2018.
- ^ "SWEBOK Guide Version 3". Retrieved 2015-03-09.
- ^ "Software Engineering Code of Ethics" (PDF). Retrieved 2012-03-25.
- ^ Labs, Qubit (29 November 2022). "How Many Programmers are there in the World and in the US? [2023]". Qubit Labs. Retrieved 7 February 2023.
- ^ "Global Developer Population and Demographic Study 2016 V2". Evans Data Corporation. Retrieved 19 January 2017.
- ^ a b Rosenthal, Rachel (August 4, 2020). "Tech Companies Want You to Believe America Has a Skills Gap". Bloomberg. Retrieved October 8, 2021.
- ^ "Computer Software Engineers and Computer Programmers". Retrieved 2009-12-17.
- ^ "Software Developers". Occupational Outlook Handbook. U. S. Bureau of labor Statistics. 4 September 2019. Retrieved 11 December 2019.
- ^ "Computing Disciplines and Majors" (PDF). ACM. Retrieved 6 September 2019.
- ^ a b "Software Developers: Occupational Outlook Handbook". U.S. Bureau of Labor Statistics.
- ^ "Computer Software Engineer". Bureau of Labor Statistics. March 19, 2010. Archived from the original on July 26, 2013. Retrieved July 20, 2012.
- ^ "Software Developers". Bureau of Labor Statistics. January 8, 2014. Retrieved July 21, 2012.
- ^ a b c d e "Computer Programmers : Occupational Outlook Handbook: : U.S. Bureau of Labor Statistics". Archived from the original on 3 May 2019. Retrieved 17 January 2017.
- ^ "Archive By Publication : Beyond the Numbers: U.S. Bureau of Labor Statistics". www.bls.gov.
- ^ "The Soon-to-Be-Extinct Embedded Software Engineer". designnews.com. May 10, 2018.
- ^ "hp's Developer Portal | HP International Women's Week: Women in Computer Science dropping since 1980s". developers.hp.com.
- ^ "Software engineer jobs in danger due to ChatGPT-like tools? Here's what Google CEO Sundar Pichai has to say". Business Today. 2023-04-06. Retrieved 2023-05-12.
- ^ "ChatGPT could make these jobs obsolete". 2023-01-25. Retrieved 2023-05-12.
- ^ Kay, Grace. "Software engineers are panicking about being replaced by AI". Business Insider. Retrieved 2023-05-12.
- ^ Fowler, Gary. "Council Post: How Will ChatGPT Affect Jobs?". Forbes. Retrieved 2023-05-12.
- ^ Ito, Aki. "ChatGPT spells the end of coding as we know it". Business Insider. Retrieved 2023-05-12.
- ^ Zinkula, Aaron Mok, Jacob. "ChatGPT may be coming for our jobs. Here are the 10 roles that AI is most likely to replace". Business Insider. Retrieved 2023-05-12.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - ^ Cohen, Mikaela. "These are the tech jobs most threatened by ChatGPT and A.I." CNBC. Retrieved 2023-05-12.
- ^ "SEI certification page". Sei.cmu.edu. Retrieved 2012-03-25.
- ^ Wyrostek, Warren (March 14, 2008). "The Top 10 Problems with IT Certification in 2008". InformIT. Retrieved 2009-03-03.
- ^ IEEE Computer Society. "2006 IEEE computer society report to the IFIP General Assembly" (PDF). Retrieved 2007-04-10.
- ^ IEEE. "CSDA". Retrieved 2010-04-20.
- ^ ACM (July 17, 2000). "A Summary of the ACM Position on Software Engineering as a Licensed Engineering Profession" (PDF). Association for Computing Machinery (ACM). Archived from the original (PDF) on May 17, 2008. Retrieved 2009-03-03.
At its meeting in May 2000, the Council further concluded that the framework of a licensed professional engineer, originally developed for civil engineers, does not match the professional industrial practice of software engineering. Such licensing practices would give false assurances of competence even if the body of knowledge were mature; and would preclude many of the most qualified software engineers from becoming licensed.
- ^ Canadian Information Processing Society. "I.S.P. Designation". Retrieved 2007-03-15.
- ^ "Professional Engineers Ontario: Welcome to PEO's website". Peo.on.ca. Retrieved 2012-03-25.
- ^ Thibodaux, Patrick (2006-05-05). "As outsourcing gathers steam, computer science interest wanes". Computerworld.com. Retrieved 2016-12-06.
- ^ "Computer Programmers". Bls.gov. Retrieved 2012-03-25.
- ^ Mullins, Robert (2007-03-13). "Software developer growth slows in North America". InfoWorld. Archived from the original on 2009-04-04. Retrieved 2012-03-25.
- ^ "Gartner Magic Quadrant" (PDF). Cognizant.com. Retrieved 2012-03-25.
- S2CID 14383734.
- ^ Some external links:
- Dijkstra, E. W. (1988). "On the cruelty of really teaching computing science". Retrieved 2014-01-10.
Sources
- Abran, Alain; Moore, James W.; Bourque, Pierre; Dupuis, Robert; Tripp, Leonard L. (2004). Guide to the Software Engineering Body of Knowledge. IEEE. ISBN 978-0-7695-2330-9.
- Sommerville, Ian (2010). Software Engineering (7th ed.). Pearson Education. ISBN 978-81-7758-530-8. Retrieved 10 January 2013.
Further reading
- Guide to the Software Engineering Body of Knowledge (SWEBOK Guide): Version 3.0. Pierre Bourque, Richard E. Fairley (eds.). IEEE Computer Society. 2014. ISBN 978-0-7695-5166-1.)
{{cite book}}
: CS1 maint: others (link - ISBN 978-0-07-337597-7.
- ISBN 978-0-13-703515-1.
- ISBN 978-0-387-20881-7.
- ISBN 978-0-13-606125-0.
- Oshana, Robert (2019-06-21). Software engineering for embedded systems : methods, practical techniques, and applications (Second ed.). Kidlington, Oxford, United Kingdom. ISBN 978-0-12-809433-4.
External links
- Guide to the Software Engineering Body of Knowledge
- The Open Systems Engineering and Software Development Life Cycle Framework Archived 2010-07-18 at the Wayback Machine OpenSDLC.org the integrated Creative Commons SDLC
- Software Engineering Institute Carnegie Mellon