IanSommerville-Softwareengineering
Editorial director: Marcia hortonEditor in chief: michael flirschAcquisitions Editor: Matt GoldsteinEditorial assistant: Chelsea bellManaging editor: Jeff HolcombSenior Production Project Manager: Marilyn Lloydngt WapleMarketing Coordinator: Kathryn FerrantiSenior manufacturing buver: carol melvilleText Designer: Susan RaymondCover art director: Elena sicFront Cover Photograph: O Jacques Pavlovsky/Sygma/CorbisInterior Chapter Opener: O gralicarL. net/AlanyFull-Service Project Management: Andrea Stefanowicz, GGS Iligher Education Resources,a Division of prcmcdia global IncComposition and Illustrations: GGS Higher Education Resources, a Division of Pre Media Global, IncPrinter/Binder: Edwards brothersCover Printer: Lehigh-Phoenix Color/HagerstownCopyright O 201 1, 2006, 2005, 2001, 1996 Pearson Education, Inc, publishing as Addison-Wesley. Allights reserved. Manufactured in the United States of America. This publication is protected by copyright,and permission should be obtained from the publisher prior to any prohibited reproduction, storage in aretrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying,recording, or likewise. To obtain permission(s)to use material from this work, please submit a writteneyuest Lu Pearson Educatioll, Inc, Permissions DepartInenL, 501 Boylston Streel, Suile 900, Buston,Massachusetts 02116Many of the designations by manufacturers and seller to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim,the designations have been printed in initial caps or all capsLibrary of Congress Cataloging-in-Publication DataSommerville. lanSoftware engineering /Ian Sommerville. -9th edP cmIncludes indexISBN-13:978-0-13-703515-1ISBN-10:0-13-703515-21. Software engineering. I. TitleQA76.758S6572011005.1dc22200905305810987654321-EB-141312l10PEARSONISBN10:0-13-703515-2ISBN13:9780-13-703515-1PREFACEAs I was writing the final chapters in this book in the summer of 2009, I realizedthat software engineering was 40 years old. The name software engineering, wasproposed in 1969 at a nato conference to discuss software development problemslarge software systems were late, did not deliver the functionality needed by theirusers,cost more than expected and were unreliable. i did not attend that conferencebut, a year later, I wrote my first program and started my professional life in softwareProgress in software engineering has been remarkable over my professional life-time. Our societies could not function without large, professional software systemsFor building business systems, there is an alphabet soup of technologies--J2EENET, SaaS, SAP, BPEL4WS, SOAP, CBSE, etc.that support the development anddeployment of large enterprise applications. National utilities and infrastructureenergy, communications, and transport--all rely on complex and mostly reliablecomputer systems Software has allowed us to explore space and to create the worldwide web, the most significant information system in the history of mankindHumanity is now faced with a new set of challenges-climate change and extremeweather, declining natural resources, an increasing world population to be fed andhoused, international terrorism, and the need to help elderly people lead satisfyingand fulfilled lives. We need new technologies to help us address these problems andfor sure, software will play a central role in these technologiesSoftware engineering is, therefore, a critically important technology for the futureof mankind. We must continue to educate software engineers and develop the discipline so that we can create more complex software systems. Of course, there are stillproblems with software projects. Software is still sometimes late and costs morethan expected. However, we should not let these problems conceal the real successesn software engineering and the impressive software engineering methods and technologies that have been developedSoftware engineering is now such a huge area that it is impossible to cover thewhole subject in one book. My focus, therefore, is on key topics that are fundamentalrefaceto all development processes and topics concerned with the development of reliable,distributed systems. There is an increased emphasis on agile methods and softwarereuse. I strongly believe that agile methods have their place but so too does tradi-tional, plan-driven software engineering. We need to combine the best of theseapproaches to build better software systemsBooks inevitably reflect the opinions and prejudices of their authors. Some read-ers will inevitably disagree with my opinions and with my choice of material Suchdisagreement is a healthy reflection of the diversity of the discipline and is essentialfor its evolution. Nevertheless, I hope that all software engineers and software engi-neering students can find something of interest hereIntegration with the WebThere is an incredible amount of information on software engineering available on theWeb and some people have questioned if textbooks like this one are still neededHowever, the quality of available information is very patchy, information is sometimespresented badly and it can be hard to find the information that you need. ConsequentlyI believe that textbooks still have an important role to play in learning They serve as aroadmap to the subject and allow information on method and techniques to be organizedand presented in a coherent and readable way. They also provide a starting point fordeeper exploration of the research literature and material available on the webI strongly believe that textbooks have a future but only if they are integrated withand add value to material on the Web. This book has therefore been designed as ahybrid print/web text in which core information in the printed edition is linked tosupplementary material on the web. Almost all chapters include specially writtenweb sections' that add to the information in that chapter There are also four webchapters on topics that I have not covered in the print version of the bookThe website that is associated with the book ishttp://www.Softwareengineering-9.comThe books web has four principal componentsWeb sections These are extra sections that add to the content presented in eachchapter. These web sections are linked from breakout boxes in each chapter2. Web chapters There are four web chapters covering formal methods, interactiondesign, documentation, and application architectures. I may add other chapterson new topics during the lifetime of the book3. Material for instructors The material in this section is intended to support peo-ple who are teaching software engineering. See the "Support Materials"sectionin this preface4. Case studies These provide additional information about the case studies usedin the book(insulin pump, mental health-care system, wilderness weather system)Preface vas well as information about further case studies such as the failure of theAriane 5 launcherAs well as these sections. there are also links to other sites with useful material onsoftware engineering, further reading, blogs, newsletters, etcI welcome your constructive comments and suggestions about the book and thewebsite. You can contact me at ian SoftwareEngineering-9 com Please include[SE9] in the subject of your message. Otherwise, my spam filters will probablyreject your mail and you will not receive a reply. I do not have time to help studentswith their homework, so please dont askReadershipThe book is primarily aimed at university and college students taking introductoryand advanced courses in software and systems engineering Software engineers inthe industry may find the book useful as general reading and as a means of updatingtheir knowledge on topics such as software reuse, architectural design, dependabilityand security, and process improvement. I assume that readers have completed anintroductory programming course and are familiar with programming terminologyChanges from previous editionsThis edition has retained the fundamental material on software engineering that wascovered in previous editions but I have revised and updated all chapters and haveincluded new material on many different topics. The most important changes are1. The move from a print-only book to a hybrid print/ web book with the web mate-rial tightly integrated with the sections in the book. This has allowed me to reducethe number of chapters in the book and to focus on core material in each chapter2. Complete restructuring to make it easier to use the book in teaching softwareengineering. The book now has four rather than eight parts and each part may beused on its own or in combination with other parts as the basis of a softwareengineering course. The four parts are an introduction to software engineering,dependability and security, advanced software engineering, and software engineering management3. Several topics from previous editions are presented more concisely in a singlechapter, with extra material moved onto the Web4. Additional web chapters, based on chapters from previous editions that I havenot included here are available on the webvI Preface5. I have updated and revised the content in all chapters I estimate that between30%0 and 40%o of the text has been completely rewritten6. I have added new chapters on agile software development and embedded systems7. As well as these new chapters, there is new material on model-driven engineering, open source development, test-driven development, Reasons Swiss Cheesemodel, dependable systems architectures, static analysis and model checkingCOTS reuse, software as a service, and agile planning8. A new case study on a patient record system for patients who are undergoingtreatment for mental health problems has been used in several chaptersUsing the book for teachingI have designed the book so that it can be used in three different types of softwareengineering courses1. General introductory courses in software engineering The first part of the bookhas been designed explicitly to support a one-semester course in introductorysoftware engineering2. Introductory or intermediale courses on specific so/ware engineering topics Youcan create a range of more advanced courses using the chapters in Parts 2-4. Forexample, I have taught a course in critical systems engineering using the chaptersin Part 2 plus chapters on quality management and configuration management3. More advanced courses in specific software engineering topics In this case, thechapters in the book form a foundation for the course. These are then supplemented with further reading that explores the topic in more detail. For examplea course on software reuse could be based around Chapters 16, 17, 18, and 19More information about using the book for teachinprevious editions, is available on the book's website, s, including a comparison withSupport materialsA wide range of support material is available to help people using the book for teaching software engineering courses. This includesPowerPoint presentations for all of the chapters in the bookFigures in power pointPreface vilAn instructor's guide that gives advice on how to use the book in different coursesand explains the relationship between the chapters in this edition and previouseditionsFurther information on the book 's case studiesAdditional case studies that may be used in software engineering coursesAdditional Power Point presentations on systems engineeringFour web chapters covering formal methods, interaction design, applicationarchitectures and documentationAll of this material is available free to readers of the book from the book 's website or from the Pearson support site below. Additional material for instructors isavailable on a restricted basis to accredited instructors onlyModel answers to selected end-of-chapter exercisesQuiz questions and answers for each chapterAll support material, including restricted material. is available fromhttp://wwwpcarsonhighcred.com/sommcrville/Instructors using the book for teaching may obtain a password to access restrictedmaterial by registering at the Pearson website, by contacting their local Pearson representative,orbyrequestingapasswordbye-mailfromcomputing@@aw.comPasswords are not available from the authorAcknowledgmentsA large number of people have contributed over the years to the evolution of thisbook and I'd like to thank everyone (reviewers students, and book users ) who havecommented on previous editions and made constructive suggestions for changeId particularly like to thank my family(Anne, Ali, and Jane) for their help andsupport while the book was being written. a big thank-you especially to my daughter, Jane, who discovered a talent for proofreading and editing. She was tremendously helpful in reading the entire book and did a great job spotting and fixing alarge number of typos and grammatical errorsIan sommervilleOctober 2009Contents at a glanceaceIIIPart 1 Introduction to Software EngineeringChapter 1 IntroductionChapter 2 Software processes27Chapter 3 Agile software develont56Chapter 4 Requirements engineeringChapter 5 System modeling118Chapter 6 Architectural design147Chapter 7 Design and implementation76Chapter 8 Software testing205Chapter9 Software evolution234Part 2 Dependability and Security261Chapter 10 Sociotechnical systems ecation263Chapter 11 Dependability and sec289Chapter 12 Dependability and security309Chapter 13 Dependability engineering341Chapter 14 Security engineering366Chapter 15 Dependability and security assurance393Part 3 Advanced Software Engineering423Chapter 16 Software r425Chapter 17 Component-based software engineering452Chapter 18 Distributed software engineerin479Chapter 19 Service-oriented architecture508Chapter 20 Embedded softwarChapter 21 Aspect-oriented software engineering565Part 4 Software Management591Chapter 22 Project management593Chapter 23 Project plannin618Chapter 24 Quality man651Chapter 25 Configuration managementChapter 26 Process improvement705Glo733Subject IndexAuthor Index767CONTENTSPrefabPart 1 Introduction to Software EngineeringChapter 1 Introduction31 Professional software development1.2 Software engineering ethics143 Case studies17Chapter 2 Software processes272.1 Software process models2.2 Process activities362.3 Coping with change432.4 The rational unified process50Chapter 3 Agile software development563.1 Agile methods583.2 Plan-driven and agile development62
用户评论