Primary goals for this text are to acquaint students with the basic concepts and major issues of software engineering, to describe current tools and techniques, and to provide a basis for evaluating new developments. Many different techniques are presented to illustrate basic concepts, but no single technique receives special attention. The text is written for juniors, seniors, graduate students, and practitioners of software engineering. Those with more experience in the software field will profit more from the material. Minimal preparation for the material includes a course in data structures and exposure to system software concepts. The layout of this text follows the traditional software life cycle: an introductory chapter is followed by chapters on planning, cost estimation, and requirements definition. These are followed by chapters on design, implementation issues, and modern programming languages. Chapters on quality assessment and software maintenance conclude the text.