Software Engineering was defined by Bauer in the late 60s as "The establishment and use of sound engineering principles in order to obtain software that is reliable and works efficiently on real machines." Despite being old, this definition gives the spirit behind the discipline.
The pivotal importance of the use of measurements is characteristic to all engineering disciplines. Metrics in an engineering framework refers to standards of measurements used to quantify specific aspects of an engineering process, product or project. A measure is a mapping from the empirical world to a more formal, mathematical world [4].
Developments in software engineering began in programming technique and then grew to other phases of the software life cycle. Structured programming was followed by structured methods of analysis and design. In addition, object oriented and component technologies began. Programming was the golden task in early times of software engineering, but now requirement engineering and design are more popular. In the 1990s project management gained interest and became an important component in software engineering. Software standards and process maturity have characterized the software industry as a mature discipline in the last decade.
At a technical level, information system engineering begins with a series of modeling tasks that lead to a complete specification of requirements and a comprehensive design representation for the software to be built [5]. Many methods have been developed for the modeling of information systems. However, object oriented methods are becoming the de facto standard. For some critical information systems, formal methods have been developed to facilitate producing systems with the highest integrity. Formal methods rely on mathematical techniques that express and model the requirements of any product in the software life cycle. The use of formal methods is recommended wherever feasible in the lifecycle.
Object Oriented software Development emerged in the 80s as a natural development of the structured methods. UML (Unified Modeling Language) has emerged as a unification of diverse object oriented modeling methods and is becoming an ISO standard [2].
Component technology is currently a growing approach for developing information systems [1]. Unlike the traditional approach, the component approach assembles existing components to form a software solution. There are currently two competing component standards, Sun's JavaBeans and Microsoft's DCOM. Software Components are reusable building blocks for constructing software systems. Components encapsulate semantically meaningful application or technical services [3]. Component-Based technology is a powerful approach for engineering enterprise information systems, since this approach reduces the conflict of combating the high complexity of such information systems and the search for high quality and productivity.
Software engineering is an evolving discipline and we can expect a continuation of its growth and maturity in the years to come.
Osama Rayis (rayis@computer.org) recently earned his Ph.D in Computer Engineering from Middle East Technical University. His research interests include Software Engineering, particularly in the areas of development of secure information systems, quality in software engineering and formal methods. He has served as a teaching assistant in Sudan University of Science and Technology and now works in their computer center.