Software engineering
Software
engineering (SE) is the
application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software, and the
study of these approaches; that is, the application of engineering to software.[1] It is the application of engineering to
software because it integrates significant mathematics, computer science and
practices whose origins are in engineering.[2] It is also defined as a systematic approach
to the analysis, design, assessment, implementation, testing, maintenance and
reengineering of software, that is, the application of engineering to software.[3] The term software engineering first appeared in the 1968 NATO Software
Engineering Conference, and was meant to provoke thought regarding the
perceived "software
crisis" at the time.[4][5]
Software
development, a much used and more generic term, does not
necessarily subsume the engineering paradigm. Although it is questionable what
impact it has had on actual software development over the last 40 years,[6][7] the field's future looks bright according to Money Magazine and Salary.com, which
rated "software
engineer" as the best job in the United States in 2006.[8] Also, in 2012 the Wall Street Journal rated
it the best job. [9]
When the first
modern 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 Parnasintroduced
the key concept of modularity and information
hiding in 1972[12] to help programmers deal with the ever
increasing complexity of software systems. A
software system for managing the hardware called an operating system was also introduced, most notably by Unix in 1969. In 1967, the Simula language introduced the object-oriented programming paradigm.
These advances in software were met with more advances in computer hardware.
In the mid 1970s, the microcomputer was introduced, making it economical for
hobbyists to obtain a computerand write software for it. This in turn led to the now famous Personal Computer (PC) and Microsoft
Windows. The Software Development Life Cycle or SDLC was also starting to appear as a
consensus for centralized construction of software in the mid 1980s. The late
1970s and early 1980s saw the introduction of several new Simula-inspired
object-oriented programming languages, including Smalltalk, Objective-C, and C++.
Open-source software started to appear in the early 90s
in the form of Linux and other software introducing the "bazaar" or decentralized
style of constructing software.[13] Then the World Wide Web and the popularization of the Internet hit in the mid 90s, changing the engineering
of software once again. Distributed
systems gained sway as a
way to design systems, and the Javaprogramming language was introduced with its own virtual machine as another step in abstraction. Programmers collaborated and wrote the Agile Manifesto,
which favored more lightweight processes to create cheaper and more timely
software.
The current
definition of software engineering is still being debated by practitioners today
as they struggle to come up with ways to produce software that is
"cheaper, better, faster". Cost
reduction has been a primary
focus of the IT industry since the 1990s. Total cost of ownership represents the costs of more than just
acquisition. It includes things like productivity impediments, upkeep efforts,
and resources needed to support infrastructure.
Legal requirements
for the licensing or certification of professional software engineers vary
around the world. In the UK, the British Computer Society licenses software engineers and members of
the society can also become Chartered Engineers (CEng), while in some areas of Canada, such as Alberta, Ontario,[14] and Quebec, software engineers can hold the
Professional Engineer (P.Eng)designation and/or the Information Systems
Professional (I.S.P.) designation; however, there is no legal requirement to
have these qualifications.
The IEEE Computer Society and the ACM, the two main professional organizations
of software engineering, publish guides to the profession of software
engineering. The IEEE's Guide to the Software Engineering Body of
Knowledge - 2004 Version, or SWEBOK, defines the
field and describes the knowledge the IEEE expects a practicing software engineer to have. The IEEE also promulgates a
"Software Engineering Code of Ethics".[15]
In 2004, the U. S. Bureau of Labor Statistics counted 760,840 software engineers holding jobs in the U.S.; in the same
time period there were some 1.4 million practitioners employed in the U.S. in
all other engineering disciplines combined.[16] Due to its relative newness as a field of
study, formal education in software engineering is often taught as part of a
computer science curriculum, and many software engineers hold computer science
degrees.[17]
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 freelancers. Some
organizations have specialists to perform each of the tasks in the software development process. Other organizations require
software engineers to do many or all of them. In large projects, people may
specialize in only one role. In small projects, people may fill several or all
roles at the same time. Specializations include: in industry (analysts, architects, developers, testers, technical support, middleware
analysts, managers)
and in academia (educators, researchers).
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. Injuries in these occupations are rare. However, like other
workers who spend long periods 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.[18]
The Software Engineering Institute offers certifications on specific topics like
Security, Process
improvement and Software architecture.[19] Apple, IBM, Microsoft and other companies also sponsor their own certification examinations. Many IT certification programs are oriented toward specific
technologies, and managed by the vendors of these technologies.[20] These certification programs are tailored to
the institutions that would employ people who use these technologies.
Broader
certification of general software engineering skills is available through
various professional societies. As of 2006, the IEEE had certified over 575 software professionals
as a Certified Software Development Professional (CSDP).[21] In 2008 they added an entry-level
certification known as the Certified Software Development Associate (CSDA).[22] The ACM had a professional certification program in the early 1980s,[citation needed] which was discontinued due to lack of
interest. The ACM examined the possibility of professional certification of
software engineers in the late 1990s, but eventually decided that such
certification was inappropriate for the professional industrial practice of
software engineering.[23]
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 Institution of Engineering and Technology and so qualify for Chartered Engineer status.
In Canada the Canadian Information Processing Society has developed a legally recognized
professional certification called Information Systems Professional (ISP).[24] 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.[25]
]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 / timezone difference that prevented human
interaction between clients and developers, but also the lower quality of the
software developed by the outsourcing companies and the massive job transfer.
This had a negative impact on many aspects of the software engineering
profession. For example, some students in the developed
world avoid education
related to software engineering because of the fear of offshore
outsourcing (importing
software products or services from other countries) and of being displaced by foreign
visa workers.[26] Although statistics do not currently show a
threat to software engineering itself; a related career, computer
programming does appear to
have been affected.[27][28] Nevertheless, the ability to smartly leverage
offshore and near-shore resources via the follow-the-sun workflow has improved the overall operational
capability of many organizations.[29] When North Americans are leaving work, Asians
are just arriving to work. When Asians are leaving work, Europeans are arriving
to work. This provides a continuous ability to have human oversight on
business-critical processes 24 hours per day, without paying overtime
compensation or disrupting key human resource sleep patterns.
A knowledge of programming is a pre-requisite to becoming a software
engineer. In 2004 the IEEE Computer Society produced the SWEBOK, which has been published as ISO/IEC
Technical Report 19759:2004, describing the body of knowledge that they believe
should be mastered by a graduate software engineer with four years of
experience.[30] Many software engineers enter the profession
by obtaining a university degree or training at a vocational school. One
standard international curriculum for undergraduate software engineering
degrees was defined by the CCSE, and updated in 2004.[31] A number of universities have Software
Engineering degree programs; as of 2010, there were 244 Campus programs, 70
Online programs, 230 Masters-level programs, 41 Doctorate-level programs, and
69 Certificate-level programs in the United States.[32]
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.
]Comparison with other disciplines
Major differences
between software engineering and other engineering disciplines, according to
some researchers, result from the costs of fabrication.[33]
]Subdisciplines
Software
engineering can be divided into ten subdisciplines. They are:[1]
§
Software requirements: The elicitation, analysis,
specification, and validation of requirements for software.
§
Software design: The
process of defining the architecture, components, interfaces, and other
characteristics of a system or component. It is also defined as the result of
that process.
§
Software construction: The detailed creation of
working, meaningful software through a combination of coding, verification,
unit testing, integration testing, and debugging.
§
Software testing:
The dynamic verification of the behavior of a program on a finite set of test
cases, suitably selected from the usually infinite executions domain, against
the expected behavior.
§
Software
maintenance: The totality of activities required to provide
cost-effective support to software.
§
Software configuration management: The identification
of the configuration of a system at distinct points in time for the purpose of
systematically controlling changes to the configuration, and maintaining the
integrity and traceability of the configuration throughout the system life
cycle.
§
Software engineering management: The
application of management activities—planning, coordinating, measuring,
monitoring, controlling, and reporting—to ensure that the development and
maintenance of software is systematic, disciplined, and quantified.
§
Software engineering process: The definition,
implementation, assessment, measurement, management, change, and improvement of
the software life cycle process itself.
§
Software engineering tools and methods: The
computer-based tools that are intended to assist the software life cycle
processes, see Computer Aided Software Engineering, and the
methods which impose structure on the software engineering activity with the
goal of making the activity systematic and ultimately more likely to be
successful.
§
Software quality:
The degree to which a set of inherent characteristics fulfills requirements.
[Related disciplines
Software
engineering is a direct subfield of computer science and has some relations
with management
science. It is also considered a part of overall systems
engineering.
[Systems
engineering
Systems
engineers deal primarily
with the overall system requirements and design, including hardware and human
issues. They are often concerned with partitioning functionality to hardware,
software or human operators. Therefore, the output of the systems engineering
process serves as an input to the software engineering process.
[Computer software
engineers
Computer Software
Engineers are usually systems level (software engineering, information systems)
computer science or software level computer engineering graduates. This term
also includes general computer science graduates with a few years of practical
on the job experience involving software engineering.
]See also
[References
1.
^ a b SWEBOK executive
editors, Alain Abran, James W. Moore ; editors, Pierre Bourque, Robert
Dupuis. (2004). Pierre Bourque and Robert Dupuis. ed. Guide to the Software Engineering Body of Knowledge - 2004 Version.IEEE Computer Society.
pp. 1–1. ISBN 0-7695-2330-7.
3.
^ Laplante,
Phillip (2007). What Every Engineer Should
Know about Software Engineering. Boca Raton: CRC.ISBN 978-0-8493-7228-5.
Retrieved 2011-01-21.
4.
^ Peter, Naur;
Brian Randell (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.
5.
^ 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."
6.
^ "The end of software engineering and the start of
economic-cooperative gaming". Alistair.cockburn.us. Retrieved
2012-03-25.
7.
^ "35 years on: to what extent has software
engineering design achieved its goals?". Cat.inist.fr.
Retrieved 2012-03-25.
8.
^ Kalwarski,
Tara; Daphne Mosher, Janet Paskin and Donna Rosato (2006). "Best Jobs in America". MONEY Magazine. CNN. Retrieved
2006-04-20.
10.
^ Leondes
(2002). intelligent systems:
technology and applications. CRC Press. ISBN 978-0-8493-1121-5.
11.
^ Dijkstra, E. W. (March 1968). "Go To Statement Considered Harmful". Communications of
the ACM 11(3): 147–148. doi:10.1145/362929.362947.
Retrieved 2009-08-10.
12.
^ Parnas, David (December 1972). "On
the Criteria To Be Used in Decomposing Systems into Modules".Communications of
the ACM 15 (12): 1053–1058.doi:10.1145/361598.361623.
Retrieved 2008-12-26.
14.
^ Williams,
N.S.W. (19–21 February 2001). "Professional Engineers Ontario's approach
to licensing software engineering practitioners". Software Engineering Education and Training,
2001 Proceedings. 14th Conference on. Charlotte, NC: IEEE.
pp. 77–78.
16.
^ Bureau of
Labor Statistics, U.S. Department of Labor,USDL 05-2145: Occupational Employment and Wages,
November 2004, Table 1.
20.
^ Wyrostek,
Warren (March 14, 2008). "The Top 10 Problems with IT Certification in
2008". InformIT.
Retrieved 2009-03-03.
21.
^ IEEE
Computer Society. "2006 IEEE computer society report to the IFIP
General Assembly" (PDF). Retrieved 2007-04-10.
23.
^ ACM (July
17, 2000). "A Summary of the ACM Position on Software
Engineering as a Licensed Engineering Profession". Association
for Computing Machinery (ACM). 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."[dead link]
26.
^ Patrick
Thibodeau (2006-05-05). "As outsourcing gathers steam, computer science
interest wanes". Computerworld.com. Retrieved 2012-03-25.
28.
^ Mullins,
Robert (2007-03-13). "Software developer growth slows in North
America". InfoWorld. Retrieved 2012-03-25.
30.
^ Abran,
Alain, ed. (2005) [2004]. "Chapter 1: Introduction to the Guide". Guide to the Software Engineering Body of Knowledge.
Los Alamitos: IEEE Computer Society.ISBN 0-7695-2330-7.
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."
31.
^ "SE2004
Software Engineering Curriculum". Sites.computer.org.
2003-09-30. Retrieved 2012-03-25.
33.
^ Young,
Michal; Faulk, Stuart (2010). "Sharing
What We Know About Software Engineering" (PDF). Proceedings of the FSE/SDP workshop on
Future of software engineering research (FoSER '10). ACM.
pp. 439–442.doi:10.1145/1882362.1882451. ISBN 978-1-4503-0427-6.
Retrieved 2011-02-25. "The essential distinction between software and
other engineered artifacts has always been the absence of fabrication cost. In
conventional engineering of physical artifacts, the cost of materials and
fabrication has dominated the cost of design and placed a check on the
complexity of artifacts that can be designed. When one bottleneck is removed,
others appear, and software engineering has therefore faced the essential
challenges of complexity and the cost of design to an extent that conventional
engineering has not. Software engineering has focused on issues in managing
complexity, from process to modular design to cost-effective verification,
because that is the primary leverage point when the costs of materials and
fabrication are nil."
Further reading
§
Ghezzi, Carlo; Mehdi Jazayeri, Dino Mandrioli
(2003) [1991]. Fundamentals of
Software Engineering (2nd (International) ed.). Pearson Education @
Prentice-Hall.
§
Jalote,
Pankaj (2005) [1991]. An Integrated Approach to
Software Engineering (3rd ed.). Springer. ISBN 0-387-20881-X.
§
Pressman, Roger S (2005). Software Engineering: A Practitioner's
Approach (6th ed.). Boston, Mass: McGraw-Hill. ISBN 0-07-285318-2.
§
Sommerville, Ian (2007)
[1982]. Software Engineering (8th
ed.). Harlow, England: Pearson Education. ISBN 0-321-31379-8.
External links
§
Computing Curricula 2005: The
Overview Report by The Joint Task
Force for Computing Curricula ACM/AIS/IEEE-CS
§
Curriculum Guidelines for
Undergraduate Degree Programs in Software Engineering by The Joint Task Force on Computing
Curricula ACM/IEEE-CS
§
Guidelines for Associate-Degree Transfer Curriculum in
Software Engineering by The ACM
Two-Year College Education Committee and The IEEE Computer Society/ACM Joint
Task Force on Software Engineering
§
A Student's Guide to Software
Engineering Projects - a free online
guide for students taking SE project courses
§
The Open Systems Engineering
and Software Development Life Cycle Framework OpenSDLC.org the integrated Creative Commons
SDLC
No comments:
Post a Comment