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 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"
The term software engineering has been used less formally:
* as the informal contemporary term for the broad range of activities that were 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.
The discipline of software engineering includes knowledge, tools, and methods for software requirements, software design, software construction, software testing, and software maintenance tasks. Software engineering is related to the disciplines of computer science, computer engineering, management, mathematics, project management, quality management, software ergonomics, and systems engineering.
Software engineering implies a certain level of academic training, professional discipline, and adherence to formal processes that often are not applied in cases of software development. A common analogy is that working in construction does not make one a civil engineer, and so writing code does not make one a software engineer.
Software engineers advocate many different technologies and practices, they 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