__For courses in computer science and software engineering__ **The Fundamental Practice of Software Engineering** **\*Software Engineering \*** introduces readers to the overwhelmingly important subject of software programming and development. In the past few years, computer systems have come to dominate not just our technological growth, but the foundations of our world’s major industries. This text seeks to lay out the fundamental concepts of this huge and continually growing subject area in a clear and comprehensive manner. The **Tenth Edition** contains new information that highlights various technological updates of recent years, providing readers with highly relevant and current information. Sommerville’s experience in system dependability and systems engineering guides the text through a traditional plan-based approach that incorporates some novel agile methods. The text strives to teach the innovators of tomorrow how to create software that will make our world a better, safer, and more advanced place to live. Cover......Page 1 Title Page......Page 2 Copyright Page......Page 3 Preface......Page 4 Acknowledgements......Page 8 Dedication......Page 9 Contents......Page 10 Part 1 Introduction to Software Engineering......Page 16 Chapter 1 Introduction......Page 18 1.1 Professional software development......Page 20 1.2 Software engineering ethics......Page 29 1.3 Case studies......Page 32 Chapter 2 Software processes......Page 44 2.1 Software process models......Page 46 2.2 Process activities......Page 55 2.3 Coping with change......Page 62 2.4 Process improvement......Page 66 Chapter 3 Agile software development......Page 73 3.1 Agile methods......Page 76 3.2 Agile development techniques......Page 78 3.3 Agile project management......Page 85 3.4 Scaling agile methods......Page 89 Chapter 4 Requirements engineering......Page 102 4.1 Functional and non-functional requirements......Page 106 4.2 Requirements engineering processes......Page 112 4.3 Requirements elicitation......Page 113 4.4 Requirements specification......Page 121 4.5 Requirements validation......Page 130 4.6 Requirements change......Page 131 Chapter 5 System modeling......Page 139 5.1 Context models......Page 142 5.2 Interaction models......Page 145 5.3 Structural models......Page 150 5.4 Behavioral models......Page 155 5.5 Model-driven architecture......Page 160 Chapter 6 Architectural design......Page 168 6.1 Architectural design decisions......Page 172 6.2 Architectural views......Page 174 6.3 Architectural patterns......Page 176 6.4 Application architectures......Page 185 Chapter 7 Design and implementation......Page 197 7.1 Object-oriented design using the UML......Page 199 7.2 Design patterns......Page 210 7.3 Implementation issues......Page 213 7.4 Open-source development......Page 220 Chapter 8 Software testing......Page 227 8.1 Development testing......Page 232 8.2 Test-driven development......Page 243 8.3 Release testing......Page 246 8.4 User testing......Page 250 Chapter 9 Software evolution......Page 256 9.1 Evolution processes......Page 259 9.2 Legacy systems......Page 262 9.3 Software maintenance......Page 271 Part 2 System Dependability and Security......Page 284 Chapter 10 Dependable systems......Page 286 10.1 Dependability properties......Page 289 10.2 Sociotechnical systems......Page 292 10.3 Redundancy and diversity......Page 296 10.4 Dependable processes......Page 298 10.5 Formal methods and dependability......Page 300 Chapter 11 Reliability engineering......Page 307 11.1 Availability and reliability......Page 310 11.2 Reliability requirements......Page 313 11.3 Fault-tolerant architectures......Page 319 11.4 Programming for reliability......Page 326 11.5 Reliability measurement......Page 332 Chapter 12 Safety engineering......Page 340 12.1 Safety-critical systems......Page 342 12.2 Safety requirements......Page 345 12.3 Safety engineering processes......Page 353 12.4 Safety cases......Page 362 Chapter 13 Security engineering......Page 374 13.1 Security and dependability......Page 377 13.2 Security and organizations......Page 381 13.3 Security requirements......Page 383 13.4 Secure systems design......Page 389 13.5 Security testing and assurance......Page 403 Chapter 14 Resilience engineering......Page 409 14.1 Cybersecurity......Page 413 14.2 Sociotechnical resilience......Page 417 14.3 Resilient systems design......Page 425 Part 3 Advanced Software Engineering......Page 436 Chapter 15 Software reuse......Page 438 15.1 The reuse landscape......Page 441 15.2 Application frameworks......Page 444 15.3 Software product lines......Page 447 15.4 Application system reuse......Page 454 Chapter 16 Component-based software engineering......Page 465 16.1 Components and component models......Page 468 16.2 CBSE processes......Page 474 16.3 Component composition......Page 481 Chapter 17 Distributed software engineering......Page 491 17.1 Distributed systems......Page 493 17.2 Client–server computing......Page 500 17.3 Architectural patterns for distributed systems......Page 502 17.4 Software as a service......Page 513 Chapter 18 Service-oriented software engineering......Page 521 18.1 Service-oriented architecture......Page 525 18.2 RESTful services......Page 530 18.3 Service engineering......Page 534 18.4 Service composition......Page 542 Chapter 19 Systems engineering......Page 552 19.1 Sociotechnical systems......Page 557 19.2 Conceptual design......Page 564 19.3 System procurement......Page 567 19.4 System development......Page 571 19.5 System operation and evolution......Page 575 Chapter 20 Systems of systems......Page 581 20.1 System complexity......Page 585 20.2 Systems of systems classification......Page 588 20.3 Reductionism and complex systems......Page 591 20.4 Systems of systems engineering......Page 594 20.5 Systems of systems architecture......Page 600 Chapter 21 Real-time software engineering......Page 611 21.1 Embedded system design......Page 614 21.2 Architectural patterns for real-time software......Page 621 21.3 Timing analysis......Page 627 21.4 Real-time operating systems......Page 632 Part 4 Software Management......Page 640 Chapter 22 Project management......Page 642 22.1 Risk management......Page 645 22.2 Managing people......Page 653 22.3 Teamwork......Page 657 Chapter 23 Project planning......Page 668 23.1 Software pricing......Page 671 23.2 Plan-driven development......Page 673 23.3 Project scheduling......Page 676 23.4 Agile planning......Page 681 23.5 Estimation techniques......Page 683 23.6 COCOMO cost modeling......Page 687 Chapter 24 Quality management......Page 701 24.1 Software quality......Page 704 24.2 Software standards......Page 707 24.3 Reviews and inspections......Page 711 24.4 Quality management and agile development......Page 715 24.5 Software measurement......Page 717 Chapter 25 Configuration management......Page 731 25.1 Version management......Page 736 25.2 System building......Page 741 25.3 Change management......Page 746 25.4 Release management......Page 751 A......Page 758 B......Page 759 C......Page 760 D......Page 762 E......Page 763 G......Page 764 I......Page 765 M......Page 766 O......Page 767 P......Page 768 R......Page 769 S......Page 771 U......Page 774 W......Page 775 Z......Page 776 A......Page 778 C......Page 780 D......Page 782 E......Page 784 F......Page 785 H......Page 786 I......Page 787 M......Page 788 O......Page 790 P......Page 791 R......Page 793 S......Page 795 U......Page 800 W......Page 801 X......Page 802 B......Page 804 D......Page 805 I......Page 806 L......Page 807 O......Page 808 S......Page 809 W......Page 810 Z......Page 811 Cover 1 Title Page 2 Copyright Page 3 Preface 4 Acknowledgements 8 Contents at a glance 9 Dedication 9 Contents 10 Part 1 Introduction to Software Engineering 16 Chapter 1 Introduction 18 1.1 Professional software development 20 1.2 Software engineering ethics 29 1.3 Case studies 32 Chapter 2 Software processes 44 2.1 Software process models 46 2.2 Process activities 55 2.3 Coping with change 62 2.4 Process improvement 66 Chapter 3 Agile software development 73 3.1 Agile methods 76 3.2 Agile development techniques 78 3.3 Agile project management 85 3.4 Scaling agile methods 89 Chapter 4 Requirements engineering 102 4.1 Functional and non-functional requirements 106 4.2 Requirements engineering processes 112 4.3 Requirements elicitation 113 4.4 Requirements specification 121 4.5 Requirements validation 130 4.6 Requirements change 131 Chapter 5 System modeling 139 5.1 Context models 142 5.2 Interaction models 145 5.3 Structural models 150 5.4 Behavioral models 155 5.5 Model-driven architecture 160 Chapter 6 Architectural design 168 6.1 Architectural design decisions 172 6.2 Architectural views 174 6.3 Architectural patterns 176 6.4 Application architectures 185 Chapter 7 Design and implementation 197 7.1 Object-oriented design using the UML 199 7.2 Design patterns 210 7.3 Implementation issues 213 7.4 Open-source development 220 Chapter 8 Software testing 227 8.1 Development testing 232 8.2 Test-driven development 243 8.3 Release testing 246 8.4 User testing 250 Chapter 9 Software evolution 256 9.1 Evolution processes 259 9.2 Legacy systems 262 9.3 Software maintenance 271 Part 2 System Dependability and Security 284 Chapter 10 Dependable systems 286 10.1 Dependability properties 289 10.2 Sociotechnical systems 292 10.3 Redundancy and diversity 296 10.4 Dependable processes 298 10.5 Formal methods and dependability 300 Chapter 11 Reliability engineering 307 11.1 Availability and reliability 310 11.2 Reliability requirements 313 11.3 Fault-tolerant architectures 319 11.4 Programming for reliability 326 11.5 Reliability measurement 332 Chapter 12 Safety engineering 340 12.1 Safety-critical systems 342 12.2 Safety requirements 345 12.3 Safety engineering processes 353 12.4 Safety cases 362 Chapter 13 Security engineering 374 13.1 Security and dependability 377 13.2 Security and organizations 381 13.3 Security requirements 383 13.4 Secure systems design 389 13.5 Security testing and assurance 403 Chapter 14 Resilience engineering 409 14.1 Cybersecurity 413 14.2 Sociotechnical resilience 417 14.3 Resilient systems design 425 Part 3 Advanced Software Engineering 436 Chapter 15 Software reuse 438 15.1 The reuse landscape 441 15.2 Application frameworks 444 15.3 Software product lines 447 15.4 Application system reuse 454 Chapter 16 Component-based software engineering 465 16.1 Components and component models 468 16.2 CBSE processes 474 16.3 Component composition 481 Chapter 17 Distributed software engineering 491 17.1 Distributed systems 493 17.2 Client–server computing 500 17.3 Architectural patterns for distributed systems 502 17.4 Software as a service 513 Chapter 18 Service-oriented software engineering 521 18.1 Service-oriented architecture 525 18.2 RESTful services 530 18.3 Service engineering 534 18.4 Service composition 542 Chapter 19 Systems engineering 552 19.1 Sociotechnical systems 557 19.2 Conceptual design 564 19.3 System procurement 567 19.4 System development 571 19.5 System operation and evolution 575 Chapter 20 Systems of systems 581 20.1 System complexity 585 20.2 Systems of systems classification 588 20.3 Reductionism and complex systems 591 20.4 Systems of systems engineering 594 20.5 Systems of systems architecture 600 Chapter 21 Real-time software engineering 611 21.1 Embedded system design 614 21.2 Architectural patterns for real-time software 621 21.3 Timing analysis 627 21.4 Real-time operating systems 632 Part 4 Software Management 640 Chapter 22 Project management 642 22.1 Risk management 645 22.2 Managing people 653 22.3 Teamwork 657 Chapter 23 Project planning 668 23.1 Software pricing 671 23.2 Plan-driven development 673 23.3 Project scheduling 676 23.4 Agile planning 681 23.5 Estimation techniques 683 23.6 COCOMO cost modeling 687 Chapter 24 Quality management 701 24.1 Software quality 704 24.2 Software standards 707 24.3 Reviews and inspections 711 24.4 Quality management and agile development 715 24.5 Software measurement 717 Chapter 25 Configuration management 731 25.1 Version management 736 25.2 System building 741 25.3 Change management 746 25.4 Release management 751 Glossary 758 A 758 B 759 C 760 D 762 E 763 F 764 G 764 H 765 I 765 J 766 L 766 M 766 N 767 O 767 P 768 Q 769 R 769 S 771 T 774 U 774 V 775 W 775 X 776 Z 776 Subject index 778 A 778 B 780 C 780 D 782 E 784 F 785 G 786 H 786 I 787 J 788 L 788 M 788 N 790 O 790 P 791 Q 793 R 793 S 795 T 800 U 800 V 801 W 801 X 802 Author index 804 A 804 B 804 C 805 D 805 E 806 F 806 G 806 H 806 I 806 J 807 K 807 L 807 M 808 N 808 O 808 P 809 Q 809 R 809 S 809 T 810 U 810 V 810 W 810 X 811 Y 811 Z 811 Understand the fundamental practices of modern software engineering. Software Engineering, 10th Edition, Global Edition, by Ian Sommerville, provides you with a solid introduction to the crucial subject of software programming and development. As computer systems have come to dominate our technical growth in recent years, they have also come to permeate the foundations of the world's major industries. This text lays out the fundamental concepts of this vast, constantly growing subject area in a clear and comprehensive manner. The book aims to teach you, the innovators of tomorrow, how to create software that will make our world a better, safer, and more advanced place to live. Sommerville's experience in system dependability and systems engineering guides you through the text using a traditional, plan-based approach that also incorporates novel agile methods. This 10th edition contains new information that highlight various technological updates in recent years, providing you with highly relevant and current information. With new case studies and updated chapters on topics like service-oriented software, this edition ensures your studies keep pace with today's business world. Incorporating an updated structure and a host of learning features to enhance your studies, this text contains all the tools you need to excel. "For courses in computer science and software engineering The Fundamental Practice of Software Engineering Software Engineering introduces students to the overwhelmingly important subject of software programming and development. In the past few years, computer systems have come to dominate not just our technological growth, but the foundations of our world's major industries. This text seeks to lay out the fundamental concepts of this huge and continually growing subject area in a clear and comprehensive manner. The Tenth Edition contains new information that highlights various technological updates of recent years, providing students with highly relevant and current information. Sommerville's experience in system dependability and systems engineering guides the text through a traditional plan-based approach that incorporates some novel agile methods. The text strives to teach the innovators of tomorrow how to create software that will make our world a better, safer, and more advanced place to live." -- Provided by publisher For courses in computer science and software engineering The Fundamental Practice of Software Engineering Software Engineering introduces readers to the overwhelmingly important subject of software programming and development. In the past few years, computer systems have come to dominate not just our technological growth, but the foundations of our world's major industries. This text seeks to lay out the fundamental concepts of this huge and continually growing subject area in a clear and comprehensive manner. The Tenth Edition contains new information that highlights various technological updates of recent years, providing readers with highly relevant and current information. Sommerville's experience in system dependability and systems engineering guides the text through a traditional plan-based approach that incorporates some novel agile methods. The text strives to teach the innovators of tomorrow how to create software that will make our world a better, safer, and more advanced place to live. -- Provided by publisher One of the earliest student textbooks on the (then) emerging field of software engineering. It presents a view of software engineering as practised in the early 1980s, and is oriented around the notion of the software life cycle - requirements, design, implementation, testing and evolution. Rapidly superceded by later editions because the discipline was changing so quickly at that time.