Software Engineering - Layered Technology
Although hundreds of authors have developed personal definitions on software engineering one definition proposed by Fritz Bauer at the seminal conference on the topic still serves as a basis for discussion:
"Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines. "
Mostly every reader will be tempted to add to this definition. It says little about the technical aspects about software quality. It does not directly address the requirement timely product delivery or for customer satisfaction; it omits mention of the importance of measurement and metrics; it does not state the importance of a mature procedure. And yet, Bauer's definition gives us with a baseline. What are the sound engineering principles which can be applied to computer software development? How do we economically develop software so that it is reliable? What is needed to build computer programs that work "efficiently" on not one but various different "real machines"? These are the questions that continue to challenge software engineers.
The IEEE [IEE93] has built a more comprehensive definition when it states that is:
Software engineering (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software which is the application of engineering to software. (2) The study of approaches as in first one.