This document discusses an introduction to software engineering. It begins by defining what a computer program and software are, noting that software includes computer programs, configuration files, user documentation, support services, and system documentation. The document then discusses some key attributes of software like maintainability, dependability, efficiency, and usability. It notes that software engineering is needed for medium to large projects involving teams to deal with complexity and change. The document discusses why software development is difficult due to changes in requirements and technology, complex problem and solution domains, and difficult management of development processes. It describes how abstraction, decomposition, and hierarchy can be used to deal with complexity. Finally, it discusses different models used in software engineering like object, functional, dynamic