This document provides an introduction to software engineering. It defines software engineering as the application of systematic and quantifiable approaches to software development, in line with other engineering disciplines. The document outlines some of the key challenges in software engineering, such as evolving requirements and schedule pressures. It also describes common software development processes and practices, including requirements engineering, design, coding, testing and project management. Both plan-driven and agile software processes are discussed.