Introduces important concepts such as software processes and agile methods, and describes essential software development activities, from initial software specification through to system evolution. It is designed to support a one-semester course in software engineering that introduces professional software engineering and defines some software engineering concepts, software engineering processes, and agile development, the critically important topic of requirements engineering where the requirements for what a system should do are defined. Introduces system modeling using the UML which focuses on the use of use case diagrams, class diagrams, sequence diagrams, and state diagrams for modeling a software system, introduces the object-oriented design, and the use of design patterns.