Typical formal definitions of software engineering are
"the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software".
"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"
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 (and the space shuttle about ten million parts), while the software for such an airliner can run to 4 million lines of code.
Current trends in software engineering
Software engineering is a young discipline, and is still developing. The directions in which software engineering is developing include:
Aspects help software engineers deal with -ilities by providing tools to add or remove boilerplate code from many areas in the source code. Aspects describe how all objects or functions should behave in particular circumstances. For example, aspects can add debugging, logging, or locking control into all objects of particular types. Researchers are currently working to understand how to use aspects to design general-purpose code. Related concepts include generative programming and templates.
Agile software development guides software development projects that evolve rapidly with changing expectations and competitive markets. Proponents of this method believe that heavy, document-driven processes (like TickIT, CMM and ISO 9000) are fading in importance. Some people believe that companies and agencies export many of the jobs that can be guided by heavy-weight processes. Related concepts include Extreme Programming and Lean software development.
Experimental software engineering is a branch of software engineering interested in devising experiments on software, in collecting data from the experiments, and in devising laws and theories from this data. Proponents of this method advocate that the nature of software is such that we can advance the knowledge on software through experiments only
Model Driven Software Development uses (both textual and graphical) models as primary development artifacts. By means of model transformation and code generation a part or complete applications are generated.
Software Product Lines
Software Product Lines is a systematic way to produce families of software systems, instead of creating a succession of completely individual products. This method emphasizes extensive, systematic, formal code reuse, to try to industrialize the software development process.
Software Engineering Today
In 2006, Money Magazine and Salary.com rated software engineering as the best job in America in terms of growth, pay, stress levels, flexibility in hours and working environment, creativity, and how easy it is to enter and advance in the field
As its name implies software economics is the economics of the software industry. It includes the production, marketing, sales, and support of products which are primarily software based.
The field of software is estimated to support a commercial software sector that earns $200 billion to $240 billion in the United States every year. Software engineering drove $1 trillion of economic growth in the U.S. over the last decade.
About 1/2 of all software projects are cancelled by users who change their minds, whether or not the software engineers would have succeeded.
About 1/4 of all software projects are unable to be delivered, due to changes in requirements, lack of time or resources, or other reasons.
About 1/4 of all software projects are delivered successfully.
Maintenance: Most (70% or more) software engineering effort over the total lifetime of a system goes into maintenance and upgrades.
Delivery: In the course of taking a large software project from conception to end user acceptance (and actual use) the cost of developing the software will typically range from 20-30% of the total. Other activities (documentation, Training infrastructure, Support infrastructure, Deployment and Network design, etc) account for the other 70-80%.
This explains why free software is not a major economic threat to commercial software. The cost of commercial software is only 20-30% of the cost to the company. If the commercial software comes with any guarantees about support or maintenance, it easily covers the cost. Most of the cost of software for a company or organization is in training, deployment, and support.