This introduction to software engineering and practice addresses both procedural and object-oriented development. The book applies concepts consistently to two common examples a typical information system and a real-time system. It combines theory with real, practical applications by providing an abundance of case studies and examples from the current literature. This revision has been thoroughly updated to reflect significant changes in software engineering, including modeling and agile methods.