This essential textbook presents a concise introduction to the fundamental principles of software engineering, together with practical guidance on how to apply the theory in a real-world, industrial environment. The wide-ranging coverage encompasses all areas of software design, management, and quality. Topics and features: presents a broad overview of software engineering, including software lifecycles and phases in software development, and project management for software engineering; examines the areas of requirements engineering, software configuration management, software inspections, software testing, software quality assurance, and process quality; covers topics on software metrics and problem solving, software reliability and dependability, and software design and development, including Agile approaches; explains formal methods, a set of mathematical techniques to specify and derive a program from its specification, introducing the Z specification language; discusses software process improvement, describing the CMMI model, and introduces UML, a visual modelling language for software systems; reviews a range of tools to support various activities in software engineering, and offers advice on the selection and management of a software supplier; describes such innovations in the field of software as distributed systems, service-oriented architecture, software as a service, cloud computing, and embedded systems; includes key learning topics, summaries and review questions in each chapter, together with a useful glossary. This practical and easy-to-follow textbook/reference is ideal for computer science students seeking to learn how to build high quality and reliable software on time and on budget. The text also serves as a self-study primer for software engineers, quality professionals, and software managers. Background : What is software engineering? ; Challenges in software engineering ; Software processes and lifecycles ; Activities in waterfall lifecycle ; Software inspections ; Software project management ; CMMI maturity model ; Formal methods Software project management : Project start-up and initiation ; Estimation ; Project planning and scheduling ; Risk management ; Quality management in projects ; Project monitoring and control ; Managing issues and change requests ; Project board and governance ; Project reporting ; Project closure ; Prince 2 methodology Requirements engineering : Requirements process ; System modelling Software design and development : Architecture design ; Detailed design and development ; Software maintenance and evolution Configuration management : Configuration management system ; Change control ; Configuration management audits Software inspections : Economic benefits of software inspections ; Informal reviews ; Structured walk-through ; Semi-formal review meeting ; Fagan inspections ; Automated software inspections Software testing : Test process ; Test planning ; Test case design and definition ; Test execution ; Test reporting and project sign-off ; Testing and quality improvements ; Traceability of requirements ; Test tools ; e-commerce testing Supplier selection and management : Planning and requirements ; Identifying suppliers ; Prepare and issue RFP ; Evaluate proposals and select supplier ; Formal agreement ; Managing the supplier ; Acceptance of software ; Roll-out and customer support Software quality assurance : Audit planning ; Audit meeting ; Audit reporting ; Follow-up activity ; Audit escalation ; Review of audit activities ; Other audits Software metrics and problem solving : The goal, question, metric paradigm ; The balanced scorecard ; Metrics for an organization ; Implementing a metrics programme ; Problem-solving techniques Software reliability and dependability : Software reliability ; Dependability ; Computer security ; System availability ; Safety critical systems Formal methods : Why should we use formal methods? ; Applications of formal methods ; Tools for formal methods ; Approaches to formal methods ; Proof and formal methods ; The future of formal methods ; The Vienna Development Method ; VDM, the Irish school of VDM ; The Z specification language ; The B-method ; Predicate transformers and weakest preconditions ; The process calculii ; Finite state machines ; The Parnas way ; Usability of formal methods Z formal specification language : Sets ; Relations ; Functions ; Sequences ; Bags ; Schemas and schema composition ; Reification and decomposition ; Proof in Z Unified modeling language : Overview of UML ; UML diagrams ; Object constraint language ; Tools for UML : Rational unified process Software process improvement : What is a software process? ; What is software process improvement? ; Benefits of software process improvement ; Software process improvement models ; Process mapping ; Process improvement initiatives ; Barriers to success ; Setting up an improvement initiative ; Appraisals Capability maturity model integration : The CMMI ; CMMI maturity levels ; Categories of CMMI processes ; CMMI process areas ; Components of CMMI process areas ; SCAMPI appraisals Software engineering tools : Tools for project management ; Tools for requirements ; Tools for design and development ; Tools for configuration management and change control ; Tools for code analysis and code inspections ; Tools for testing Agile methodology : Scrum methodology ; User stories ; Estimation in agile ; Test-driven development ; Pair programming A miscellany of innovation : Distributed systems ; Service-oriented architecture ; Software as a service ; Cloud computing ; Embedded systems ; Software engineering and innovation Epilogue : The future of software engineering.