This chapter describes the present state of the art of software development. The major components of software engineering include process models, methods, languages, and tools. Methods define the procedures for handling software in the different phases of development. They support project planning and estimation, system and software requirements elicitation, systems analysis, design of functions and data structures, algorithm development, structured coding, 1and testing and organized maintenance. Languages allow one to apply abstract methods and are of special importance as a means of communication among different groups of people in the usually team-oriented development process. They serve as a medium of communication between developer and customer and between programmer and machine. The language structures an analyst's thinking and shapes some features of the design. Tools expedite the development process and automate parts of the developer's work. Furthermore, in large systems tools are essential to the application of methods and languages in a structured and efficient way. They promote the necessary immediate feedback to manage the project properly. One of the basic concepts of software engineering is the so-called “software life cycle.” This notion refers to the various phases through which software passes from the time it is conceived to the time it is discarded. Development, operation and maintenance are the major phases in the life cycle. Once the software has been developed, operation, and maintenance form a cyclic pattern of use and modification throughout the service life of the system. © 1992, Elsevier Science Publishers B.V. All rights reserved.