Google

Sunday, September 9, 2007

software engineering

Software Engineering

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software.The term software engineering was popularized during the 1968 NATO Software Engineering Conference (held in Garmisch, Germany) by its chairman F.L. Bauer, and has been in widespread use since. The discipline of software engineering encompasses knowledge, tools, and methods for defining software requirements, and performing software design, software construction, software testing, and software maintenance tasks. Software engineering also draws on knowledge from fields such as computer engineering, computer science, management, mathematics, project management, quality management, software ergonomics, and systems engineering.
As of 2004, the U. S. Bureau of Labor Statistics counts 760,840 software engineers holding jobs in the U.S.; for comparison, in the U.S. there are some 1.4 million practitioners employed in all other engineering disciplines combined.The term software engineer is used very liberally in the corporate world. Very few of the practicing software engineers actually hold engineering degrees from accredited universities. There are estimated to be about 1.5 million practitioners in the E.U., Asia, and elsewhere. SE pioneers include Barry Boehm, Fred Brooks, C. A. R. Hoare, and David Parnas.
Nature
David Parnas has said that software engineering is, in fact, a form of engineering. Steve McConnell has said that it is not, but that it should be. Donald Knuth has said that programming is an art.The U.S. Bureau of Labor Statistics classifies computer software engineers as a subcategory of "computer specialists", along with occupations such as computer scientist, programmer, and network administrator. The BLS classifies all other engineering disciplines, including computer hardware engineers, as "engineers".
The U.K. has seen the alignment of the Information Technology Professional and the Engineering Professionals. Software engineering in Canada has seen some contests in the courts over the use of the title "Software Engineer".
Definition
Typical formal definitions of software engineering are
"the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of
software is an engineering discipline that is concerned with all aspects of software production". "the establishment and use of sound engineering principles in order to economically obtain software that is reliable and works efficiently on real machines"
Other meanings
As Dijkstra pointed out, the terms software engineering and software engineer have, at times, also been misused in a much wider sense, particularly in America. The term has been used less formally:
as the informal contemporary term for the broad range of activities that was formerly called
programming and systems analysis; as the broad term for all aspects of the practice of computer programming, as opposed to the theory of computer programming, which is called computer science;
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 in the form of software engineering methodologies.
Purpose
Software is often found in products and situations where very high reliability is expected, even under demanding conditions, such as monitoring and controlling nuclear power plants, or keeping a modern airliner aloft. Such applications contain millions of lines of code, making them comparable in complexity to the most complex modern machines. For example, a modern airliner has several million physical parts[19] (and the space shuttle about ten million parts), while the software for such an airliner can run to 4 million lines of code.
Technologies and practices
Software development process
Software engineers advocate many different technologies and practices, with much disagreement, which has originated a debate that has gone on for over 60 years. Software engineers use a wide variety of technologies: compilers, code repositories, text editors. They also use a wide variety of practices to carry out and coordinate their efforts: pair programming, code reviews and daily stand up meetings.
In spite of the enormous economic growth and productivity gains enabled by software, persistent complaints about the quality of software remain.

The software engineering profession
Debate over the term 'engineering'
Some people believe that software development is a more appropriate term than software engineering for the process of creating software. Pete McBreen, (author of "Software Craftsmanship: The New Imperative" (ISBN 0-201-73386-2)), argues that the term Software Engineering implies levels of rigor and proven processes that are not appropriate for all types of software development. He argues strongly for 'craftsmanship' as a more appropriate metaphor because that term brings into sharper focus the skills of the developer as the key to success instead of the "manufacturing" process. Using a more traditional comparison, just as not everyone who works in construction is a civil engineer, not everyone who can write code is a software engineer.
Some people dispute the notion that the field is mature enough to warrant the title "engineering"
. In each of the last few decades, at least one radical new approach has entered the mainstream of software development (e.g. Structured Programming, Object Orientation, ... ), implying that the field is still changing too rapidly to be considered an engineering discipline. Other people would argue that the supposedly radical new approaches are actually evolutionary rather than revolutionary, the mere introduction of new tools rather than fundamental changes ..