Software Engineering for beginners

what is software engineering and its characteristics and lecture notes on software engineering pdf
Dr.JamesSmith Profile Pic
Published Date:11-07-2017
Your Website URL(Optional)
SOFTWARE ENGINEERING Ninth Edition Ian Sommerville Addison-Wesley Boston Columbus Indianapolis New York San Francisco Upper Saddle River Amsterdam Cape Town Dubai London Madrid Milan Munich Paris Montreal Toronto Delhi Mexico City São Paulo Sydney Hong Kong Seoul Singapore Taipei TokyoEditorial Director: Marcia Horton Editor in Chief: Michael Hirsch Acquisitions Editor: Matt Goldstein Editorial Assistant: Chelsea Bell Managing Editor: Jeff Holcomb Senior Production Project Manager: Marilyn Lloyd Director of Marketing: Margaret Waples Marketing Coordinator: Kathryn Ferranti Senior Manufacturing Buyer: Carol Melville Text Designer: Susan Raymond Cover Art Director: Elena Sidorova Front Cover Photograph: © Jacques Pavlovsky/Sygma/Corbis Interior Chapter Opener: © Full-Service Project Management: Andrea Stefanowicz, GGS Higher Education Resources, a Division of PreMedia Global, Inc. Composition and Illustrations: GGS Higher Education Resources, a Division of PreMedia Global, Inc. Printer/Binder: Edwards Brothers Cover Printer: Lehigh-Phoenix Color/Hagerstown Copyright © 2011, 2006, 2005, 2001, 1996 Pearson Education, Inc., publishing as Addison-Wesley. All rights 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 a retrieval 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 written request to Pearson Education, Inc., Permissions Department, 501 Boylston Street, Suite 900, Boston, Massachusetts 02116. Many of the designations by manufacturers and seller to distinguish their products are claimed as trade- marks. 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 caps. Library of Congress Cataloging-in-Publication Data Sommerville, Ian Software engineering / Ian Sommerville. — 9th ed. p. cm. Includes index. ISBN-13: 978-0-13-703515-1 ISBN-10: 0-13-703515-2 1. Software engineering. I. Title. QA76.758.S657 2011 005.1—dc22 2009053058 10 9 8 7 6 5 4 3 2 1–EB–14 13 12 11 10 ISBN 10: 0-13-703515-2 ISBN 13: 978-0-13-703515-1PREFACE As I was writing the final chapters in this book in the summer of 2009, I realized that software engineering was 40 years old. The name ‘software engineering’ was proposed in 1969 at a NATO conference to discuss software development problems— large software systems were late, did not deliver the functionality needed by their users, cost more than expected, and were unreliable. I did not attend that conference but, a year later, I wrote my first program and started my professional life in software. Progress in software engineering has been remarkable over my professional life- time. Our societies could not function without large, professional software systems. For building business systems, there is an alphabet soup of technologies—J2EE, .NET, SaaS, SAP, BPEL4WS, SOAP, CBSE, etc.—that support the development and deployment of large enterprise applications. National utilities and infrastructure— energy, communications, and transport—all rely on complex and mostly reliable computer systems. Software has allowed us to explore space and to create the World Wide Web, the most significant information system in the history of mankind. Humanity is now faced with a new set of challenges—climate change and extreme weather, declining natural resources, an increasing world population to be fed and housed, international terrorism, and the need to help elderly people lead satisfying and fulfilled lives. We need new technologies to help us address these problems and, for sure, software will play a central role in these technologies. Software engineering is, therefore, a critically important technology for the future of mankind. We must continue to educate software engineers and develop the disci- pline so that we can create more complex software systems. Of course, there are still problems with software projects. Software is still sometimes late and costs more than expected. However, we should not let these problems conceal the real successes in software engineering and the impressive software engineering methods and tech- nologies that have been developed. Software engineering is now such a huge area that it is impossible to cover the whole subject in one book. My focus, therefore, is on key topics that are fundamentaliv Preface to all development processes and topics concerned with the development of reliable, distributed systems. There is an increased emphasis on agile methods and software reuse. 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 these approaches to build better software systems. Books inevitably reflect the opinions and prejudices of their authors. Some read- ers will inevitably disagree with my opinions and with my choice of material. Such disagreement is a healthy reflection of the diversity of the discipline and is essential for its evolution. Nevertheless, I hope that all software engineers and software engi- neering students can find something of interest here. Integration with the Web There is an incredible amount of information on software engineering available on the Web and some people have questioned if textbooks like this one are still needed. However, the quality of available information is very patchy, information is sometimes presented badly and it can be hard to find the information that you need. Consequently, I believe that textbooks still have an important role to play in learning. They serve as a roadmap to the subject and allow information on method and techniques to be organized and presented in a coherent and readable way. They also provide a starting point for deeper exploration of the research literature and material available on the Web. I strongly believe that textbooks have a future but only if they are integrated with and add value to material on the Web. This book has therefore been designed as a hybrid print/web text in which core information in the printed edition is linked to supplementary material on the Web. Almost all chapters include specially written ‘web sections’ that add to the information in that chapter. There are also four ‘web chapters’ on topics that I have not covered in the print version of the book. The website that is associated with the book is: The book’s web has four principal components: 1. Web sections These are extra sections that add to the content presented in each chapter. These web sections are linked from breakout boxes in each chapter. 2. Web chapters There are four web chapters covering formal methods, interaction design, documentation, and application architectures. I may add other chapters on new topics during the lifetime of the book. 3. Material for instructors The material in this section is intended to support peo- ple who are teaching software engineering. See the “Support Materials” section in this Preface. 4. Case studies These provide additional information about the case studies used in the book (insulin pump, mental health-care system, wilderness weather system)Preface v as well as information about further case studies, such as the failure of the Ariane 5 launcher. As well as these sections, there are also links to other sites with useful material on software engineering, further reading, blogs, newsletters, etc. I welcome your constructive comments and suggestions about the book and the website. You can contact me at Please include SE9 in the subject of your message. Otherwise, my spam filters will probably reject your mail and you will not receive a reply. I do not have time to help students with their homework, so please don’t ask. Readership The book is primarily aimed at university and college students taking introductory and advanced courses in software and systems engineering. Software engineers in the industry may find the book useful as general reading and as a means of updating their knowledge on topics such as software reuse, architectural design, dependability and security, and process improvement. I assume that readers have completed an introductory programming course and are familiar with programming terminology. Changes from previous editions This edition has retained the fundamental material on software engineering that was covered in previous editions but I have revised and updated all chapters and have included new material on many different topics. The most important changes are: 1. 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 reduce the number of chapters in the book and to focus on core material in each chapter. 2. Complete restructuring to make it easier to use the book in teaching software engineering. The book now has four rather than eight parts and each part may be used on its own or in combination with other parts as the basis of a software engineering course. The four parts are an introduction to software engineering, dependability and security, advanced software engineering, and software engi- neering management. 3. Several topics from previous editions are presented more concisely in a single chapter, with extra material moved onto the Web. 4. Additional web chapters, based on chapters from previous editions that I have not included here, are available on the Preface 5. I have updated and revised the content in all chapters. I estimate that between 30% and 40% of the text has been completely rewritten. 6. I have added new chapters on agile software development and embedded systems. 7. As well as these new chapters, there is new material on model-driven engineer- ing, open source development, test-driven development, Reason’s Swiss Cheese model, dependable systems architectures, static analysis and model checking, COTS reuse, software as a service, and agile planning. 8. A new case study on a patient record system for patients who are undergoing treatment for mental health problems has been used in several chapters. Using the book for teaching I have designed the book so that it can be used in three different types of software engineering courses: 1. General introductory courses in software engineering The first part of the book has been designed explicitly to support a one-semester course in introductory software engineering. 2. Introductory or intermediate courses on specific software engineering topics You can create a range of more advanced courses using the chapters in Parts 2–4. For example, I have taught a course in critical systems engineering using the chapters in Part 2 plus chapters on quality management and configuration management. 3. More advanced courses in specific software engineering topics In this case, the chapters in the book form a foundation for the course. These are then supple- mented with further reading that explores the topic in more detail. For example, a course on software reuse could be based around Chapters 16, 17, 18, and 19. More information about using the book for teaching, including a comparison with previous editions, is available on the book’s website. Support materials A wide range of support material is available to help people using the book for teach- ing software engineering courses. This includes: • PowerPoint presentations for all of the chapters in the book. • Figures in PowerPoint.Preface vii • An instructor’s guide that gives advice on how to use the book in different courses and explains the relationship between the chapters in this edition and previous editions. • Further information on the book’s case studies. • Additional case studies that may be used in software engineering courses. • Additional PowerPoint presentations on systems engineering. • Four web chapters covering formal methods, interaction design, application architectures, and documentation. All of this material is available free to readers of the book from the book’s web- site or from the Pearson support site below. Additional material for instructors is available on a restricted basis to accredited instructors only: • Model answers to selected end-of-chapter exercises. • Quiz questions and answers for each chapter. All support material, including restricted material, is available from: Instructors using the book for teaching may obtain a password to access restricted material by registering at the Pearson website, by contacting their local Pearson rep- resentative, or by requesting a password by e-mail from Passwords are not available from the author. Acknowledgments A large number of people have contributed over the years to the evolution of this book and I’d like to thank everyone (reviewers, students, and book users) who have commented on previous editions and made constructive suggestions for change. I’d particularly like to thank my family (Anne, Ali, and Jane) for their help and support while the book was being written. A big thank-you especially to my daugh- ter, Jane, who discovered a talent for proofreading and editing. She was tremen- dously helpful in reading the entire book and did a great job spotting and fixing a large number of typos and grammatical errors. Ian Sommerville October 2009Contents at a glance Preface iii Part 1 Introduction to Software Engineering 1 Chapter 1 Introduction 3 Chapter 2 Software processes 27 Chapter 3 Agile software development 56 Chapter 4 Requirements engineering 82 Chapter 5 System modeling 118 Chapter 6 Architectural design 147 Chapter 7 Design and implementation 176 Chapter 8 Software testing 205 Chapter 9 Software evolution 234 Part 2 Dependability and Security 261 Chapter 10 Sociotechnical systems 263 Chapter 11 Dependability and security 289 Chapter 12 Dependability and security specification 309 Chapter 13 Dependability engineering 341 Chapter 14 Security engineering 366 Chapter 15 Dependability and security assurance 393 Part 3 Advanced Software Engineering 423 Chapter 16 Software reuse 425 Chapter 17 Component-based software engineering 452 Chapter 18 Distributed software engineering 479 Chapter 19 Service-oriented architecture 508 Chapter 20 Embedded software 537 Chapter 21 Aspect-oriented software engineering 565 Part 4 Software Management 591 Chapter 22 Project management 593 Chapter 23 Project planning 618 Chapter 24 Quality management 651 Chapter 25 Configuration management 681 Chapter 26 Process improvement 705 Glossary 733 Subject Index 749 Author Index 767CONTENTS Preface iii Introduction to Software Engineering 1 Part 1 Chapter 1 Introduction 3 1.1 Professional software development 5 1.2 Software engineering ethics 14 1.3 Case studies 17 Chapter 2 Software processes 27 2.1 Software process models 29 2.2 Process activities 36 2.3 Coping with change 43 2.4 The rational unified process 50 Chapter 3 Agile software development 56 3.1 Agile methods 58 3.2 Plan-driven and agile development 62x Contents 3.3 Extreme programming 64 3.4 Agile project management 72 3.5 Scaling agile methods 74 Chapter 4 Requirements engineering 82 4.1 Functional and non-functional requirements 84 4.2 The software requirements document 91 4.3 Requirements specification 94 4.4 Requirements engineering processes 99 4.5 Requirements elicitation and analysis 100 4.6 Requirements validation 110 4.7 Requirements management 111 Chapter 5 System modeling 118 5.1 Context models 121 5.2 Interaction models 124 5.3 Structural models 129 5.4 Behavioral models 133 5.5 Model-driven engineering 138 Chapter 6 Architectural design 147 6.1 Architectural design decisions 151 6.2 Architectural views 153 6.3 Architectural patterns 155 6.4 Application architectures 164 Chapter 7 Design and implementation 176 7.1 Object-oriented design using the UML 178 7.2 Design patterns 189Contents xi 7.3 Implementation issues 193 7.4 Open source development 198 Chapter 8 Software testing 205 8.1 Development testing 210 8.2 Test-driven development 221 8.3 Release testing 224 8.4 User testing 228 Chapter 9 Software evolution 234 9.1 Evolution processes 237 9.2 Program evolution dynamics 240 9.3 Software maintenance 242 9.4 Legacy system management 252 Dependability and Security 261 Part 2 Chapter 10 Sociotechnical systems 263 10.1 Complex systems 266 10.2 Systems engineering 273 10.3 System procurement 275 10.4 System development 278 10.5 System operation 281 Chapter 11 Dependability and security 289 11.1 Dependability properties 291 11.2 Availability and reliability 295 11.3 Safety 299 11.4 Security 302xii Contents Chapter 12 Dependability and security specification 309 12.1 Risk-driven requirements specification 311 12.2 Safety specification 313 12.3 Reliability specification 320 12.4 Security specification 329 12.5 Formal specification 333 Chapter 13 Dependability engineering 341 13.1 Redundancy and diversity 343 13.2 Dependable processes 345 13.3 Dependable system architectures 348 13.4 Dependable programming 355 Chapter 14 Security engineering 366 14.1 Security risk management 369 14.2 Design for security 375 14.3 System survivability 386 Chapter 15 Dependability and security assurance 393 15.1 Static analysis 395 15.2 Reliability testing 401 15.3 Security testing 404 15.4 Process assurance 406 15.5 Safety and dependability cases 410 Advanced Software Engineering 423 Part 3 Chapter 16 Software reuse 425 16.1 The reuse landscape 428 16.2 Application frameworks 431Contents xiii 16.3 Software product lines 434 16.4 COTS product reuse 440 Chapter 17 Component-based software engineering 452 17.1 Components and component models 455 17.2 CBSE processes 461 17.3 Component composition 468 Chapter 18 Distributed software engineering 479 18.1 Distributed systems issues 481 18.2 Client–server computing 488 18.3 Architectural patterns for distributed systems 490 18.4 Software as a service 501 Chapter 19 Service-oriented architecture 508 19.1 Services as reusable components 514 19.2 Service engineering 518 19.3 Software development with services 527 Chapter 20 Embedded software 537 20.1 Embedded systems design 540 20.2 Architectural patterns 547 20.3 Timing analysis 554 20.4 Real-time operating systems 558 Chapter 21 Aspect-oriented software engineering 565 21.1 The separation of concerns 567 21.2 Aspects, join points and pointcuts 571 21.3 Software engineering with aspects 576xiv Contents Software Management 591 Part 4 Chapter 22 Project management 593 22.1 Risk management 595 22.2 Managing people 602 22.3 Teamwork 607 Chapter 23 Project planning 618 23.1 Software pricing 621 23.2 Plan-driven development 623 23.3 Project scheduling 626 23.4 Agile planning 631 23.5 Estimation techniques 633 Chapter 24 Quality management 651 24.1 Software quality 655 24.2 Software standards 657 24.3 Reviews and inspections 663 24.4 Software measurement and metrics 668 Chapter 25 Configuration management 681 25.1 Change management 685 25.2 Version management 690 25.3 System building 693 25.4 Release management 699 Chapter 26 Process improvement 705 26.1 The process improvement process 708 26.2 Process measurement 711Contents xv 26.3 Process analysis 715 26.4 Process change 718 26.5 The CMMI process improvement framework 721 Glossary 733 Subject Index 749 Author Index 767This page intentionally left blank PART Introduction to Software 1 Engineering My aim in this part of the book is to provide a general introduction to software engineering. I introduce important concepts such as software processes and agile methods, and describe essential software development activities, from initial software specification through to system evolution. The chapters in this part have been designed to support a one-semester course in software engineering. Chapter 1 is a general introduction that introduces professional software engineering and defines some software engineering concepts. I have also written a brief discussion of ethical issues in software engineering. I think that it is important for software engineers to think about the wider implications of their work. This chapter also introduces three case studies that I use in the book, namely a system for managing records of patients undergoing treatment for mental health problems, a control system for a portable insulin pump and a wilderness weather system. Chapters 2 and 3 cover software engineering processes and agile devel- opment. In Chapter 2, I introduce commonly used generic software process models, such as the waterfall model, and I discuss the basic activities that are part of these processes. Chapter 3 supplements this with a discussion of agile development methods for software engineer- ing. I mostly use Extreme Programming as an example of an agile method but also briefly introduce Scrum in this chapter.The remainder of the chapters in this part are extended descriptions of the software process activities that will be introduced in Chapter 2. Chapter 4 covers the critically important topic of requirements engineer- ing, where the requirements for what a system should do are defined. Chapter 5 introduces system modeling using the UML, where I focus on the use of use case diagrams, class diagrams, sequence diagrams, and state diagrams for modeling a software system. Chapter 6 introduces architectural design and I discuss the importance of architecture and the use of architectural patterns in software design. Chapter 7 introduces object-oriented design and the use of design pat- terns. I also introduce important implementation issues here—reuse, con- figuration management, and host-target development and discuss open source development. Chapter 8 focuses on software testing from unit test- ing during system development to the testing of software releases. I also discuss the use of test-driven development—an approach pioneered in agile methods but which has wide applicability. Finally, Chapter 9 pres- ents an overview of software evolution issues. I cover evolution processes, software maintenance, and legacy system management.1 Introduction Objectives The objectives of this chapter are to introduce software engineering and to provide a framework for understanding the rest of the book. When you have read this chapter you will:  understand what software engineering is and why it is important;  understand that the development of different types of software systems may require different software engineering techniques;  understand some ethical and professional issues that are important for software engineers;  have been introduced to three systems, of different types, that will be used as examples throughout the book. Contents 1.1 Professional software development 1.2 Software engineering ethics 1.3 Case studies

Advise: Why You Wasting Money in Costly SEO Tools, Use World's Best Free SEO Tool Ubersuggest.