Software Engineering, 10th Edition

Book description

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.

Table of contents

  1. Software Engineering
  2. Preface
  3. Changes from the 9th edition
  4. Readership
  5. Using the book in software engineering courses
  6. Book website
  7. Contact details
  8. Contents at a glance
  9. Contents
  10. PART 1 Introduction to Software Engineering
    1. 1 Introduction
      1. Objectives
      2. Contents
      3. 1.1 Professional software development
        1. 1.1.1 Software engineering
        2. 1.1.2 Software engineering diversity
        3. 1.1.3 Internet software engineering
      4. 1.2 Software engineering ethics
      5. 1.3 Case studies
        1. 1.3.1 An insulin pump control system
        2. 1.3.2 A patient information system for mental health care
        3. 1.3.3 A wilderness weather station
        4. 1.3.4 A digital learning environment for schools
      6. Key Points
      7. Further Reading
      8. Website
      9. Exercises
      10. References
    2. 2 Software processes
      1. Objectives
      2. Contents
      3. 2.1 Software process models
        1. 2.1.1 The waterfall model
        2. 2.1.2 Incremental development
        3. 2.1.3 Integration and configuration
      4. 2.2 Process activities
        1. 2.2.1 Software specification
        2. 2.2.2 Software design and implementation
        3. 2.2.3 Software validation
        4. 2.2.4 Software evolution
      5. 2.3 Coping with change
        1. 2.3.1 Prototyping
        2. 2.3.2 Incremental delivery
      6. 2.4 Process improvement
      7. Key points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    3. 3 Agile software development
      1. Objectives
      2. Contents
      3. 3.1 Agile methods
      4. 3.2 Agile development techniques
        1. 3.2.1 User stories
        2. 3.2.2 Refactoring
        3. 3.2.3 Test-first development
        4. 3.2.4 Pair programming
      5. 3.3 Agile project management
      6. 3.4 Scaling agile methods
        1. 3.4.1 Practical problems with agile methods
        2. 3.4.2 Agile and plan-driven methods
        3. 3.4.3 Agile methods for large systems
        4. 3.4.4 Agile methods across organizations
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    4. 4 Requirements engineering
      1. Objectives
      2. Contents
      3. 4.1 Functional and non-functional requirements
        1. 4.1.1 Functional requirements
        2. 4.1.2 Non-functional requirements
      4. 4.2 Requirements engineering processes
      5. 4.3 Requirements elicitation
        1. 4.3.1 Requirements elicitation techniques
          1. 4.3.1.1 Interviewing
          2. 4.3.1.2 Ethnography
        2. 4.3.2 Stories and scenarios
      6. 4.4 Requirements specification
        1. 4.4.1 Natural language specification
        2. 4.4.2 Structured specifications
        3. 4.4.3 Use cases
        4. 4.4.4 The software requirements document
      7. 4.5 Requirements validation
      8. 4.6 Requirements change
        1. 4.6.1 Requirements management planning
        2. 4.6.2 Requirements change management
      9. Key Points
      10. Further Reading
      11. Website
      12. Exercises
      13. References
    5. 5 System modeling
      1. Objectives
      2. Contents
      3. 5.1 Context models
      4. 5.2 Interaction models
        1. 5.2.1 Use case modeling
        2. 5.2.2 Sequence diagrams
      5. 5.3 Structural models
        1. 5.3.1 Class diagrams
        2. 5.3.2 Generalization
        3. 5.3.3 Aggregation
      6. 5.4 Behavioral models
        1. 5.4.1 Data-driven modeling
          1. 5.4.2 Event-driven modeling
        2. 5.4.3 Model-driven engineering
      7. 5.5 Model-driven architecture
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    6. 6 Architectural design
      1. Objectives
      2. Contents
      3. 6.1 Architectural design decisions
      4. 6.2 Architectural views
      5. 6.3 Architectural patterns
        1. 6.3.1 Layered architecture
        2. 6.3.2 Repository architecture
        3. 6.3.3 Client–server architecture
        4. 6.3.4 Pipe and filter architecture
      6. 6.4 Application architectures
        1. 6.4.1 Transaction processing systems
        2. 6.4.2 Information systems
        3. 6.4.3 Language processing systems
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    7. 7 Design and implementation
      1. Objectives
      2. Contents
      3. 7.1 Object-oriented design using the UML
        1. 7.1.1 System context and interactions
        2. 7.1.2 Architectural design
        3. 7.1.3 Object class identification
        4. 7.1.4 Design models
        5. 7.1.5 Interface specification
      4. 7.2 Design patterns
      5. 7.3 Implementation issues
        1. 7.3.1 Reuse
        2. 7.3.2 Configuration management
        3. 7.3.3 Host-target development
      6. 7.4 Open-source development
        1. 7.4.1 Open-source licensing
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    8. 8 Software testing
      1. Objectives
      2. Contents
      3. 8.1 Development testing
        1. 8.1.1 Unit testing
        2. 8.1.2 Choosing unit test cases
        3. 8.1.3 Component testing
        4. 8.1.4 System testing
      4. 8.2 Test-driven development
      5. 8.3 Release testing
        1. 8.3.1 Requirements-based testing
        2. 8.3.2 Scenario testing
        3. 8.3.3 Performance testing
      6. 8.4 User testing
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    9. 9 Software evolution
      1. Objectives
      2. Contents
      3. 9.1 Evolution processes
      4. 9.2 Legacy systems
        1. 9.2.1 Legacy system management
      5. 9.3 Software maintenance
        1. 9.3.1 Maintenance prediction
        2. 9.3.2 Software reengineering
        3. 9.3.3 Refactoring
      6. Key Points
      7. Further Reading
      8. Website
      9. Exercises
      10. References
  11. PART 2 Dependability and Security
    1. 10 Dependable systems
      1. Objectives
      2. Contents
      3. 10.1 Dependability properties
      4. 10.2 Sociotechnical systems
        1. 10.2.1 Regulation and compliance
      5. 10.3 Redundancy and diversity
      6. 10.4 Dependable processes
      7. 10.5 Formal methods and dependability
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    2. 11 Reliability engineering
      1. Objectives
      2. Contents
      3. 11.1 Availability and reliability
      4. 11.2 Reliability requirements
        1. 11.2.1 Reliability metrics
        2. 11.2.2 Non-functional reliability requirements
        3. 11.2.3 Functional reliability specification
      5. 11.3 Fault-tolerant architectures
        1. 11.3.1 Protection systems
        2. 11.3.2 Self-monitoring architectures
        3. 11.3.3 N-version programming
        4. 11.3.4 Software diversity
      6. 11.4 Programming for reliability
        1. Guideline 1: Control the visibility of information in a program
        2. Guideline 2: Check all inputs for validity
        3. Guideline 3: Provide a handler for all exceptions
        4. Guideline 4: Minimize the use of error-prone constructs
        5. Guideline 5: Provide restart capabilities
        6. Guideline 6: Check array bounds
        7. Guideline 7: Include timeouts when calling external components
        8. Guideline 8: Name all constants that represent real-world values
      7. 11.5 Reliability measurement
        1. 11.5.1 Operational profiles
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    3. 12 Safety engineering
      1. Objectives
      2. Contents
      3. 12.1 Safety-critical systems
      4. 12.2 Safety requirements
        1. 12.2.1 Hazard identification
        2. 12.2.2 Hazard assessment
        3. 12.2.3 Hazard analysis
        4. 12.2.4 Risk reduction
      5. 12.3 Safety engineering processes
        1. 12.3.1 Safety assurance processes
        2. 12.3.2 Formal verification
        3. 12.3.3 Model checking
        4. 12.3.4 Static program analysis
      6. 12.4 Safety cases
        1. 12.4.1 Structured arguments
        2. 12.4.2 Software safety arguments
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    4. 13 Security engineering
      1. Objectives
      2. Contents
      3. 13.1 Security and dependability
      4. 13.2 Security and organizations
        1. 13.2.1 Security risk assessment
      5. 13.3 Security requirements
        1. 13.3.1 Misuse cases
      6. 13.4 Secure systems design
        1. 13.4.1 Design risk assessment
        2. 13.4.2 Architectural design
        3. 13.4.3 Design guidelines
          1. Guideline 1: Base security decisions on an explicit security policy
          2. Guideline 2: Use defense in depth
          3. Guideline 3: Fail securely
          4. Guideline 4: Balance security and usability
          5. Guideline 5: Log user actions
          6. Guideline 6: Use redundancy and diversity to reduce risk
          7. Guideline 7: Specify the format of system inputs
          8. Guideline 8: Compartmentalize your assets
          9. Guideline 9: Design for deployment
          10. Guideline 10: Design for recovery
        4. 13.4.4 Secure systems programming
      7. 13.5 Security testing and assurance
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    5. 14 Resilience engineering
      1. Objectives
      2. Contents
      3. 14.1 Cybersecurity
      4. 14.2 Sociotechnical resilience
        1. 14.2.1 Human error
        2. 14.2.2 Operational and management processes
      5. 14.3 Resilient systems design
      6. Key Points
      7. Further Reading
      8. Website
      9. Exercises
      10. References
  12. PART 3 Advanced Software Engineering
    1. 15 Software reuse
      1. Objectives
      2. Contents
      3. 15.1 The reuse landscape
      4. 15.2 Application frameworks
      5. 15.3 Software product lines
      6. 15.4 Application system reuse
        1. 15.4.1 Configurable application systems
        2. 15.4.2 Integrated application systems
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    2. 16 Component-based software engineering
      1. Objectives
      2. Contents
      3. 16.1 Components and component models
        1. 16.1.1 Component models
      4. 16.2 CBSE processes
        1. 16.2.1 CBSE for reuse
        2. 16.2.2 CBSE with reuse
      5. 16.3 Component composition
      6. Key Points
      7. Further Reading
      8. Website
      9. Exercises
      10. References
    3. 17 Distributed software engineering
      1. Objectives
      2. Contents
      3. 17.1 Distributed systems
        1. 17.1.1 Models of interaction
        2. 17.1.2 Middleware
      4. 17.2 Client–server computing
      5. 17.3 Architectural patterns for distributed systems
        1. 17.3.1 Leader‒follower architectures
        2. 17.3.2 Two-tier client–server architectures
        3. 17.3.3 Multi-tier client–server architectures
        4. 17.3.4 Distributed component architectures
        5. 17.3.5 Peer-to-peer architectures
      6. 17.4 Software as a service
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    4. 18 Service-oriented software engineering
      1. Objectives
      2. Contents
      3. 18.1 Service-oriented architecture
        1. 18.1.1 Service components in an SOA
      4. 18.2 RESTful services
      5. 18.3 Service engineering
        1. 18.3.1 Service candidate identification
        2. 18.3.2 Service interface design
        3. 18.3.3 Service implementation and deployment
      6. 18.4 Service composition
        1. 18.4.1 Workflow design and implementation
        2. 18.4.2 Testing service compositions
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
    5. 19 Systems engineering
      1. Objectives
      2. Contents
      3. 19.1 Sociotechnical systems
        1. 19.1.1 Emergent properties
        2. 19.1.2 Non-determinism
        3. 19.1.3 Success criteria
      4. 19.2 Conceptual design
      5. 19.3 System procurement
      6. 19.4 System development
      7. 19.5 System operation and evolution
        1. 19.5.1 System evolution
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    6. 20 Systems of systems
      1. Objectives
      2. Contents
      3. 20.1 System complexity
      4. 20.2 Systems of systems classification
      5. 20.3 Reductionism and complex systems
      6. 20.4 Systems of systems engineering
        1. 20.4.1 Interface development
        2. 20.4.2 Integration and deployment
      7. 20.5 Systems of systems architecture
        1. 20.5.1 Architectural patterns for systems of systems
          1. Systems as data-feeds
          2. Systems in a container
          3. Trading systems
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    7. 21 Real-time software engineering
      1. Objectives
      2. Contents
      3. 21.1 Embedded system design
        1. 21.1.1 Real-time system modeling
        2. 21.1.2 Real-time programming
      4. 21.2 Architectural patterns for real-time software
        1. 21.2.1 Observe and react
        2. 21.2.2 Environmental Control
        3. 21.2.3 Process pipeline
      5. 21.3 Timing analysis
      6. 21.4 Real-time operating systems
        1. 21.4.1 Process management
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
  13. PART 4 Software Management
    1. 22 Project management
      1. Objectives
      2. Contents
      3. 22.1 Risk management
        1. 22.1.1 Risk identification
        2. 22.1.2 Risk analysis
        3. 22.1.3 Risk planning
        4. 22.1.4 Risk monitoring
      4. 22.2 Managing people
        1. 22.2.1 Motivating people
      5. 22.3 Teamwork
        1. 22.3.1 Selecting group members
        2. 22.2.3 Group organization
        3. 22.3.3 Group communications
      6. Key Points
      7. Further Reading
      8. Website
      9. Exercises
      10. References
    2. 23 Project planning
      1. Objectives
      2. Contents
      3. 23.1 Software pricing
      4. 23.2 Plan-driven development
        1. 23.2.1 Project plans
        2. 23.2.2 The planning process
      5. 23.3 Project scheduling
        1. 23.3.1 Schedule presentation
      6. 23.4 Agile planning
      7. 23.5 Estimation techniques
        1. 23.5.1 Algorithmic cost modeling
      8. 23.6 COCOMO cost modeling
        1. 23.6.1 The application composition model
        2. 23.6.2 The early design model
        3. 23.6.3 The reuse model
        4. 23.6.4 The post-architecture level
        5. 23.6.5 Project duration and staffing
      9. Key Points
      10. Further Reading
      11. Website
      12. Exercises
      13. References
    3. 24 Quality management
      1. Objectives
      2. Contents
      3. 24.1 Software quality
      4. 24.2 Software standards
        1. 24.2.1 The ISO 9001 standards framework
      5. 24.3 Reviews and inspections
        1. 24.3.1 The review process
        2. 24.3.2 Program inspections
      6. 24.4 Quality management and agile development
      7. 24.5 Software measurement
        1. 24.5.1 Product metrics
        2. 24.5.2 Software component analysis
        3. 24.5.3 Measurement ambiguity
        4. 24.5.4 Software analytics
      8. Key Points
      9. Further Reading
      10. Website
      11. Exercises
      12. References
    4. 25 Configuration management
      1. Objectives
      2. Contents
      3. 25.1 Version management
      4. 25.2 System building
      5. 25.3 Change management
      6. 25.4 Release management
      7. Key Points
      8. Further Reading
      9. Website
      10. Exercises
      11. References
  14. Glossary
  15. Subject Index
    1. A
    2. B
    3. C
    4. D
    5. E
    6. F
    7. G
    8. H
    9. I
    10. J
    11. L
    12. M
    13. N
    14. O
    15. P
    16. Q
    17. R
    18. S
    19. T
    20. U
    21. V
    22. W
    23. X
  16. Author Index
    1. A
    2. B
    3. C
    4. D
    5. E
    6. F
    7. G
    8. H
    9. I
    10. J
    11. K
    12. L
    13. M
    14. N
    15. O
    16. P
    17. Q
    18. R
    19. S
    20. T
    21. U
    22. V
    23. W
    24. X
    25. Y
    26. Z

Product information

  • Title: Software Engineering, 10th Edition
  • Author(s): Ian Sommerville
  • Release date: March 2015
  • Publisher(s): Pearson
  • ISBN: 9780137586691