An introductory course in Software Engineering remains one of the hardest subjects to teach. Much of the difficulty stems from the fact that Software Engineering is a very wide field which includes a wide range of topics. Con- sequently, what should be the focus of an introductory course remains a challenge with many possible viewpoints. This third edition of the book approaches the problem from the perspec- tive of what skills a student should possess after the introductory course, particularly if it may be the only course on software engineering in the stu- dent's program. The goal of this third edition is to impart to the student knowledge and skills that are needed to successfully execute a project of a few person-months by employing proper practices and techniques. In- dently, a vast majority of the projects executed in the industry today are of this scope--executed by a small team over a few months. Another objective of the book is to lay the foundation for the student for advanced studies in Software Engineering. Executing any software project requires skills in two key dimensions-- engineering and project management. While engineering deals with issues of architecture, design, coding, testing, etc., project management deals with planning, monitoring, risk management, etc. Consequently, this book fo- cuses on these two dimensions, and for key tasks in each, discusses concepts and techniques that can be applied effectively on projects.