All Topics  
Software engineering

 

   Email Print
   Bookmark   Link






 

Software engineering



 
 
Software engineering 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
Engineering

Engineering is the discipline and profession of applying Technology and science knowledge and utilizing natural laws and physical resources in order to design and implement materials, structures, machines, devices, systems, and process that safely realize a desired objective and meet specified criteria....
 to software.

The term software engineering first appeared in the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the current "software crisis
Software crisis

The software crisis was a term used in the early days of software engineering, before it was a well-established subject. The term was used to describe the impact of rapid increases in computer power and the complexity of the problems which could be tackled....
" at the time.






Discussion
Ask a question about 'Software engineering'
Start a new discussion about 'Software engineering'
Answer questions from other users
Full Discussion Forum



Encyclopedia


Software engineering 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
Engineering

Engineering is the discipline and profession of applying Technology and science knowledge and utilizing natural laws and physical resources in order to design and implement materials, structures, machines, devices, systems, and process that safely realize a desired objective and meet specified criteria....
 to software.

The term software engineering first appeared in the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the current "software crisis
Software crisis

The software crisis was a term used in the early days of software engineering, before it was a well-established subject. The term was used to describe the impact of rapid increases in computer power and the complexity of the problems which could be tackled....
" at the time. Since then, it has continued as a profession
Profession

"A profession is a vocation founded upon specialised educational training, the purpose of which is to supply disinterested counsel and service to others, for a direct and definite compensation, wholly apart from expectation of other business gain"....
 and field of study dedicated to creating software that is of higher quality, cheaper, maintainable, and quicker to build. Since the field is still relatively young compared to its sister fields of engineering
Engineering

Engineering is the discipline and profession of applying Technology and science knowledge and utilizing natural laws and physical resources in order to design and implement materials, structures, machines, devices, systems, and process that safely realize a desired objective and meet specified criteria....
, there is still much work and debate around what software engineering actually is, and if it deserves the title engineering. It has grown organically out of the limitations of viewing software as just programming. Software development
Software development

Software development is the set of activities that results in software products. Software development may include research, new development, modification, reuse, re-engineering, maintenance, or any other activities that result in software products....
 is a term sometimes preferred by practitioners in the industry who view software engineering as too heavy-handed and constrictive to the malleable process of creating software.

Yet, in spite of its youth as a profession, the field's future looks bright as Money Magazine and Salary.com rated software engineering as the best job in America in 2006.

History

While the term software engineering was coined at a conference in 1968, the problems that it tried to address started much earlier. The history of software engineering is inextricably intertwined with the dueling histories of computer hardware
Computer hardware

A personal computer is made up of computer hardware, multiple physical components onto which can be loaded into a multitude of software that perform the functions of the computer....
 and computer software.

When the modern digital computer
Computer

A computer is a machine that manipulates Data according to a list of Code .The first devices that resemble modern computers date to the mid-20th century , although the computer concept and various machines similar to computers existed earlier....
 first appeared in 1941, the instructions to make it 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
Von Neumann architecture

The von Neumann architecture is a design model for a stored-program digital computer that uses a central processing unit and a single separate computer storage structure to hold both instructions and data ....
. Thus the first division between "hardware" and "software" began with abstraction
Abstraction

Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose....
 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
Abstraction

Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose....
. Major languages such as Fortran
Fortran

Fortran is a general-purpose programming language, procedural programming language, imperative programming language programming language that is especially suited to numerical analysis and scientific computing....
, Algol
Algol

Algol , known colloquially as the Demon Star, is a bright star in the constellation Perseus . It is one of the best known eclipsing binary, the first such star to be discovered, and also one of the first variable stars to be discovered....
, and Cobol
COBOL

COBOL is one of the oldest programming languages still in active use. Its name is an acronym for COmmon Business-Oriented Language, defining its primary domain in business, finance, and administrative systems for companies and governments....
 were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively. E. W. Dijsktra
Edsger Dijkstra

Edsger Wybe Dijkstra was a Netherlands computer science. He received the 1972 Turing Award for fundamental contributions in the area of programming languages, and was the Schlumberger Centennial Chair of Computer Sciences at University of Texas at Austin from 1984 until 2000....
 wrote his seminal paper, "Go To Statement Considered Harmful", in 1968 and David Parnas
David Parnas

David Lorge Parnas is a Canadian early pioneer of software engineering, who developed the concept of information hiding in modular programming, which is an important element of object-oriented programming today....
 introduced the key concept of modularity
Modularity

Modularity is a general systems concept, typically defined as a continuum describing the degree to which a system?s components may be separated and recombined....
 and information hiding
Information hiding

Information hiding in computer science is the principle of hiding of design decisions in a computer program that are most likely to change, thus protecting other parts of the program from change if the design decision is changed....
 in 1972 to help programmers deal with the ever increasing complexity of software systems. A software system for managing the hardware called an operating system
Operating system

An operating system is an interface between hardware and applications; it is responsible for the management and coordination of activities and the sharing of the limited resources of the computer....
 was also introduced, most notably by Unix
Unix

Unix is a computer operating system originally developed in 1969 by a group of American Telephone & Telegraph employees at Bell Labs, including Ken Thompson , Dennis Ritchie, Douglas McIlroy, and Joe Ossanna....
 in 1969. In 1967, the Simula
Simula

Simula is a name for two programming languages, Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard....
 language introduced the object-oriented programming
Object-oriented programming

Object-oriented programming is a programming paradigm that uses "Object_" and their interactions to design applications and computer programs....
 paradigm.

These advances in software were met with more advances in computer hardware
Computer hardware

A personal computer is made up of computer hardware, multiple physical components onto which can be loaded into a multitude of software that perform the functions of the computer....
. In the mid 1970s, the microcomputer
Microcomputer

A microcomputer is a computer with a microprocessor as its central processing unit. Another general characteristic of these computers is that they occupy physically small amounts of space when compared to mainframe computer and minicomputers....
 was introduced, making it economical for hobbyists to obtain a computer
Computer

A computer is a machine that manipulates Data according to a list of Code .The first devices that resemble modern computers date to the mid-20th century , although the computer concept and various machines similar to computers existed earlier....
 and write software for it. This in turn lead to the now famous Personal Computer
Personal computer

A personal computer is any general-purpose computer whose original sales price, size, and capabilities make it useful for individuals, and which is intended to be operated directly by an end user, with no intervening computer operator....
 or PC and Microsoft
Microsoft

Microsoft Corporation is a multinational corporation computer technology corporation that develops, manufactures, licenses, and supports a wide range of computer software products for computing devices....
 Windows. The Software Development Life Cycle
Software development process

A software development process is a structure imposed on the development of a software product. Synonyms include Software_Lifecycle_Processes and software process....
 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 C++
C++

C++ is a general-purpose programming language. It is regarded as a middle-level language, as it comprises a combination of both high-level programming language and low-level programming language language features....
, Smalltalk
Smalltalk

Smalltalk is an Object-oriented programming, Type system, reflection computer programming programming language. Smalltalk was created as the language to underpin the "new world" of computing exemplified by "human?computer symbiosis." It was designed and created in part for educational use, more so for constructionist learning, at PARC by Al...
, and Objective C.

Open-source software started to appear in the early 90s in the form of Linux
Linux

Linux is a generic term referring to Unix-like computer operating systems based on the Linux kernel. Their development is one of the most prominent examples of free and open source software collaboration; typically all the underlying source code can be used, freely modified, and redistributed by anyone under the terms of the GNU GPL license...
 and other software introducing the "bazaar" or decentralized style of constructing software . Then the Internet
Internet

The Internet is a global network of interconnected computers, enabling users to share information along multiple channels. Typically, a computer that connects to the Internet can access information from a vast array of available server and other computers by moving information from them to the computer's local memory....
 and World Wide Web
World Wide Web

The World Wide Web is a very large set of interlinked hypertext documents accessed via the Internet. With a Web browser, one can view Web pages that may contain writing, s, videos, and other multimedia and navigate between them using hyperlinks....
 hit in the mid 90s changing the engineering of software once again. Distributed Systems gained sway as a way to design systems and the Java
Java (programming language)

Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java ....
 programming language was introduced as another step in abstraction
Abstraction

Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose....
 having its own virtual machine
Virtual machine

In computer science, a virtual machine is a software implementation of a machine that executes programs like a real machine.Definitions...
. Programmers collaborated and wrote the Agile Manifesto
Agile Manifesto

The Agile Manifesto is a statement of the principles that underpin agile software development. It was drafted from 11 to 13 February 2001, at The Lodge at the Snowbird ski resort in the Wasatch Range of mountains in Utah, where representatives of various new methodologies such as Extreme Programming, Scrum , DSDM, Adaptive Software Developmen...
 that favored more light weight 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, bigger, quicker".

Profession


While some areas, such as Ontario, Canada , license software engineers; most places in the world have no laws regarding the profession of software engineers. Yet there are some guides from the IEEE Computer Society
IEEE Computer Society

IEEE Computer Society is an organizational unit of the Institute of Electrical and Electronics Engineers . It was established in 1963 when the American Institute of Electrical Engineers and the Institute of Radio Engineers merged to create the IEEE....
 and the ACM
ACM

ACM is a three-letter acronym that may refer to:Aviation* AGM-129 ACM* Air Chief Marshal* Air combat manoeuvring* Air cycle machine...
, the two main professional organizations of software engineering. The IEEE's Guide to the Software Engineering Body of Knowledge - 2004 Version or SWEBOK defines the field and gives a coverage of the knowledge practicing software engineers should know. There is also an IEEE "Software Engineering Code of Ethics". In addition, there is a Software and Systems Engineering Vocabulary (SEVOCAB) , published on-line by the IEEE Computer Society.

Employment

In 2004, the U. S. Bureau of Labor Statistics
Bureau of Labor Statistics

The Bureau of Labor Statistics , a unit of the United States Department of Labor, is the principal fact-finding agency for the government of the United States in the broad field of labor economics ....
 counted 760,840 software engineer
Software engineer

A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything with software such as chips work....
s holding jobs in the U.S.
United States

The United States of America is a Federal government constitutional republic comprising U.S. state and a federal district. The country is situated mostly in central North America, where its Contiguous United States and Washington, D.C., the Capital districts and territories, lie between the Pacific Ocean and Atlantic Oceans, Borders of the U...
; in the same time period there were some 1.4 million practitioners employed in the U.S. in all other engineering disciplines combined. 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 as a result most software engineers hold computer science degrees.

Most software engineer
Software engineer

A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything with software such as chips work....
s 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 freelancer
Freelancer

A freelancer, freelance worker, or freelance is a self-employed person who pursues a profession without a long-term commitment to any particular employer....
s. Some organizations have specialists to perform each of the tasks in the software development process
Software development process

A software development process is a structure imposed on the development of a software product. Synonyms include Software_Lifecycle_Processes and software 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
Requirements analysis

Requirements analysis in systems engineering and software engineering, encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product, taking account of the possibly conflicting requirements of the various Stakeholder , such as beneficiaries or users....
, architects
Software architecture

The software architecture of a program or computing system is the structure or structures of the software system, which comprise software components, the externally visible properties of those components, and the relationships between them....
, developers
Software developer

A software developer is a person or organization concerned with facets of the software development process wider than design and coding, a somewhat broader scope of computer programming or a specialty of project manager including some aspects of Software product management....
, testers
Software testing

Software Testing is an empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test , with respect to the context in which it is intended to operate....
, technical support
Technical support

Technical support is a range of Customer service providing assistance with technology products such as mobile phones, televisions, computers, or other electronic or mechanical goods....
, managers
Project management

Project management is the List of academic disciplines of planning, organizing and managing resources to bring about the successful completion of specific project goals and objectives....
) and in academia (educators, researcher
Researcher

A researcher is someone who is professionally engaged in research. This is often scientific research, technological research or engineering research....
s).

There is considerable debate over the future employment prospects for Software Engineers and other IT
Information technology

Information technology , as defined by the Information Technology Association of America , is "the study, design, development, implementation, support or management of computer-based information systems, particularly software applications and computer hardware." IT deals with the use of electronic computers and computer software to data conv...
 Professionals. For example, an online futures market called the "ITJOBS Future of IT Jobs in America" attempts to answer whether there will be more IT jobs, including software engineers, in 2012 than there were in 2002.

Certification

Professional certification of software engineers is a contentious issue. Some see it as a tool to improve professional practice
Professional Engineer

Professional Engineer is the term for registered or licensed engineers in some countries who are permitted to offer their professional services directly to the public....
; "The only purpose of licensing software engineers is to protect the public"

The ACM
Association for Computing Machinery

The Association for Computing Machinery, or ACM, was founded in 1947 as the world's first scientific and educational computing society. Its membership was approximately 83,000 as of 2007....
 had a professional certification program in the early 1980s, 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. , the IEEE had certified over 575 software professionals. In Canada the Canadian Information Processing Society
Canadian Information Processing Society

The Canadian Information Processing Society is the Information Technology professional society in Canada. The society certifies and regulates the Information Systems Professional designation in most provinces....
 has developed a legally recognized professional certification called Information Systems Professional (ISP).

Most certification
Professional certification (Computer technology)

A Professional certification in the Computer technology field is a designation earned by a person to assure that he/she is qualified to perform a job or task....
 programs in the IT
Information technology

Information technology , as defined by the Information Technology Association of America , is "the study, design, development, implementation, support or management of computer-based information systems, particularly software applications and computer hardware." IT deals with the use of electronic computers and computer software to data conv...
 industry are oriented toward specific technologies, and are managed by the vendors of these technologies. These certification programs are tailored to the institutions that would employ people who use these technologies.

Impact of globalization

Many students in the developed world have avoided degrees related to software engineering because of the fear of offshore outsourcing
Offshore outsourcing

Offshore outsourcing is the practice of hiring an external organization to perform some business functions in a country other than the one where the Product or Service are actually developed or manufactured....
 (importing software products or services from other countries) and of being displaced by foreign visa workers
Foreign Worker Visa

The Foreign Worker visa is an immigration document allowing a Foreign worker to temporarily immigrate to a country for purposes of employment. The immigration foreign nationals in this manner could displace domestic workers or fill a need that the host country needs, and thus is typically heavily supported by business groups....
. Although government statistics do not currently show a threat to software engineering itself; a related career, computer programming
Computer programming

Computer programming is the process of writing, testing, debugging/troubleshooting, and maintaining the source code of computer programs. This source code is written in a programming language....
 does appear to have been affected. Often one is expected to start out as a computer programmer before being promoted to software engineer. Thus, the career path to software engineering may be rough, especially during recessions.

Some career counselors suggest a student also focus on "people skills" and business skills rather than purely technical skills because such "soft skills" are allegedly more difficult to offshore. It is the quasi-management aspects of software engineering that appear to be what has kept it from being impacted by globalization.

Education

A knowledge of programming is the main pre-requisite to becoming a software engineer, but it is not sufficient. Many software engineers have degrees in Computer Science
Computer science

Computer science is the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems....
 due to the lack of software engineering programs in higher education. However, this has started to change with the introduction of new software engineering degrees, especially in post-graduate education. A standard international curriculum for undergraduate software engineering degrees was defined by the CCSE.

In 1998, the US Naval Postgraduate School
Naval Postgraduate School

The Naval Postgraduate School is an accredited research university operated by the United States Navy. Located in Monterey, California, it grants both master's degree and Doctor of Philosophy....
 (NPS) established the first doctorate
Doctorate

A doctorate is an academic degree that in most countries represents the highest level of formal study or research in a given field. In some countries it also refers to a class of degrees which qualify the holder to practice in a specific profession ....
 program in Software Engineering in the world. Steve McConnell opines that because most universities teach computer science rather than software engineering, there is a shortage of true software engineer
Software engineer

A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything with software such as chips work....
s. In 2004 the IEEE Computer Society
IEEE Computer Society

IEEE Computer Society is an organizational unit of the Institute of Electrical and Electronics Engineers . It was established in 1963 when the American Institute of Electrical Engineers and the Institute of Radio Engineers merged to create the IEEE....
 produced the SWEBOK, which has become an ISO standard describing the body of knowledge covered by a software engineer .

Sub-disciplines

H96566k
Software engineering can be divided into ten subdisciplines. They are:
  • Software requirements
    Software requirements

    Software requirements is a sub-field of Software engineering that deals with the elicitation, analysis, specification, and validation of requirements for software ....
    : The elicitation, analysis, specification, and validation of requirements for software.
  • Software design
    Software design

    Software design is a process of problem-solving and planning for a software solution. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution....
    : The design of software is usually done with Computer-Aided Software Engineering
    Computer-aided software engineering

    Computer-Aided Software Engineering , in the field of Software Engineering is the scientific application of a set of tools and methods to a software which results in high-quality, defect-free, and maintainable software products....
     (CASE) tools and use standards for the format, such as the Unified Modeling Language (UML
    UML

    UML can refer to:* Unified Modeling Language, an object modeling and specification language used in software engineering* User-mode Linux, an architectural port of the Linux kernel...
    ).
  • Software development
    Software development

    Software development is the set of activities that results in software products. Software development may include research, new development, modification, reuse, re-engineering, maintenance, or any other activities that result in software products....
    : The construction of software through the use of programming languages.
  • Software testing
    Software testing

    Software Testing is an empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test , with respect to the context in which it is intended to operate....
  • Software maintenance
    Software maintenance

    Software maintenance in software engineering is the modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a modified environment ....
    : Software systems often have problems and need enhancements for a long time after they are first completed. This subfield deals with those problems.
  • Software configuration management
    Software configuration management

    In software engineering, software configuration management is the task of tracking and controlling changes in the software. Configuration management practices include revision control and the establishment of baseline ....
    : Since software systems are very complex, their configuration (such as versioning and source control) have to be managed in a standardized and structured method.
  • Software engineering management: The management of software systems borrows heavily from project management
    Project management

    Project management is the List of academic disciplines of planning, organizing and managing resources to bring about the successful completion of specific project goals and objectives....
    , but there are nuances encountered in software not seen in other management disciplines.
  • Software development process
    Software development process

    A software development process is a structure imposed on the development of a software product. Synonyms include Software_Lifecycle_Processes and software process....
    : The process of building software is hotly debated among practitioners with the main paradigms being agile
    Agile software development

    Agile software development is a group of software development methodologies that are based on similar principles. Agile methodologies generally promote a project management process that encourages frequent inspection and adaptation, a leadership philosophy that encourages teamwork, self-organization and accountability, a set of engineering be...
     or waterfall
    Waterfall model

    The waterfall model is a sequence development process, in which development is seen as flowing steadily downwards through the phases of Conception, Initiation, Analysis, Design , Construction,Integration and software maintenance....
    .
  • Software engineering tools, see Computer Aided Software Engineering
  • Software quality
    Software quality

    In the context of software engineering, software quality measures how well software is designed , and how well the software conforms to that design , although there are several different definitions....


Related disciplines

Software engineering is related to the disciplines of computer science
Computer science

Computer science is the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems....
, project management
Project management

Project management is the List of academic disciplines of planning, organizing and managing resources to bring about the successful completion of specific project goals and objectives....
, and systems engineering
Systems engineering

Systems engineering is an interdisciplinary field of engineering that focuses on how complex engineering projects should be designed and managed....
.

Computer science

Software engineering is considered a subfield of computer science
Computer science

Computer science is the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems....
 by many academics. Many of the foundations of software engineering come from computer science
Computer science

Computer science is the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems....
.

Project management

The building of a software system is usually considered a project and the management of it borrows many principles from the field of Project management
Project management

Project management is the List of academic disciplines of planning, organizing and managing resources to bring about the successful completion of specific project goals and objectives....
.

Systems engineering

Systems engineers
Systems engineering

Systems engineering is an interdisciplinary field of engineering that focuses on how complex engineering projects should be designed and managed....
 have been dealing with the complexity of large systems for many decades and their knowledge is applied to many software engineering problems.

See also

  • Software Engineer
    Software engineer

    A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything with software such as chips work....
  • Association for Computing Machinery
    Association for Computing Machinery

    The Association for Computing Machinery, or ACM, was founded in 1947 as the world's first scientific and educational computing society. Its membership was approximately 83,000 as of 2007....
  • IEEE Computer Society
    IEEE Computer Society

    IEEE Computer Society is an organizational unit of the Institute of Electrical and Electronics Engineers . It was established in 1963 when the American Institute of Electrical Engineers and the Institute of Radio Engineers merged to create the IEEE....
  • Software development
    Software development

    Software development is the set of activities that results in software products. Software development may include research, new development, modification, reuse, re-engineering, maintenance, or any other activities that result in software products....
  • Software Craftsmanship
    Software Craftsmanship

    Software Craftsmanship represents an alternative way of thinking about the activity of writing computer software and the mechanisms for skills acquisition....
  • List of basic software engineering topics
    List of basic software engineering topics

    Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software....
  • List of software engineering conferences
  • List of software engineering publications
  • List of software engineering topics
    List of software engineering topics

    This list complements the software engineering article, giving more details and examples.For an alphabetical listing of topics, please see List of software engineering topics ....
  • Bachelor of Software Engineering
    Bachelor of Software Engineering

    A Bachelor of Software Engineering is an Undergraduate education academic degree awarded for completing a program of study in the field of software development for computers in information technology....


Further reading



External links

  • - Definition and statistics from the U.S. Bureau of Labor Statistics
    Bureau of Labor Statistics

    The Bureau of Labor Statistics , a unit of the United States Department of Labor, is the principal fact-finding agency for the government of the United States in the broad field of labor economics ....
  • - a free online guide for students taking SE project courses