O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Essentials of Software Engineering, 4th Edition

Book Description

Written for the undergraduate, one-term course, Essentials of Software Engineering, Fourth Edition provides students with a systematic engineering approach to software engineering principles and methodologies. Comprehensive, yet concise, the Fourth Edition includes new information on areas of high interest to computer scientists, including Big Data and developing in the cloud.

Table of Contents

  1. Cover Page
  2. Title Page
  3. Copyright Page
  4. Contents
  5. Preface
  6. Chapter 1 Creating a Program
    1. 1.1 A Simple Problem
      1. 1.1.1 Decisions, Decisions
      2. 1.1.2 Functional Requirements
      3. 1.1.3 Nonfunctional Requirements
      4. 1.1.4 Design Constraints
      5. 1.1.5 Design Decisions
    2. 1.2 Testing
    3. 1.3 Estimating Effort
    4. 1.4 Implementations
      1. 1.4.1 A Few Pointers on Implementation
      2. 1.4.2 Basic Design
      3. 1.4.3 Unit Testing with JUnit
      4. 1.4.4 Implementation of StringSorter
      5. 1.4.5 User Interfaces
    5. 1.5 Summary
    6. 1.6 Review Questions
    7. 1.7 Exercises
    8. 1.8 References and Suggested Readings
  7. Chapter 2 Building a System
    1. 2.1 Characteristics of Building a System
      1. 2.1.1 Size and Complexity
      2. 2.1.2 Technical Considerations of Development and Support
      3. 2.1.3 Nontechnical Considerations of Development and Support
    2. 2.2 Building a Hypothetical System
      1. 2.2.1 Requirements of the Payroll System
      2. 2.2.2 Designing the Payroll System
      3. 2.2.3 Code and Unit Testing the Payroll System
      4. 2.2.4 Integration and Functionally Testing the Payroll System
      5. 2.2.5 Release of the Payroll System
      6. 2.2.6 Support and Maintenance
    3. 2.3 Coordination Efforts
      1. 2.3.1 Process
      2. 2.3.2 Product
      3. 2.3.3 People
    4. 2.4 Summary
    5. 2.5 Review Questions
    6. 2.6 Exercises
    7. 2.7 References and Suggested Readings
  8. Chapter 3 Engineering of Software
    1. 3.1 Examples and Characteristics of Software Failures
      1. 3.1.1 Project Failures
      2. 3.1.2 Software Product Failures
      3. 3.1.3 Coordination and Other Concerns
    2. 3.2 Software Engineering
      1. 3.2.1 What Is Software Engineering?
      2. 3.2.2 Definitions of Software Engineering
      3. 3.2.3 Relevancy of Software Engineering and Software
    3. 3.3 Software Engineering Profession and Ethics
      1. 3.3.1 Software Engineering Code of Ethics
      2. 3.3.2 Professional Behavior
    4. 3.4 Principles of Software Engineering
      1. 3.4.1 Davis’s Early Principles of Software Engineering
      2. 3.4.2 Royce’s More Modern Principles
      3. 3.4.3 Wasserman’s Fundamental Software Engineering Concepts
    5. 3.5 Summary
    6. 3.6 Review Questions
    7. 3.7 Exercises
    8. 3.8 References and Suggested Readings
  9. Chapter 4 Software Process Models
    1. 4.1 Software Processes
      1. 4.1.1 Goal of Software Process Models
      2. 4.1.2 The “Simplest” Process Model
    2. 4.2 Traditional Process Models
      1. 4.2.1 Waterfall Model
      2. 4.2.2 Chief Programmer Team Approach
      3. 4.2.3 Incremental Model
      4. 4.2.4 Spiral Model
    3. 4.3 A More Modern Process
      1. 4.3.1 General Foundations of Rational Unified Process Framework
      2. 4.3.2 The Phases of RUP
    4. 4.4 Entry and Exit Criteria
      1. 4.4.1 Entry Criteria
      2. 4.4.2 Exit Criteria
    5. 4.5 Process Assessment Models
      1. 4.5.1 SEI’s Capability Maturity Model
      2. 4.5.2 SEI’s Capability Maturity Model Integrated
    6. 4.6 Process Definition and Communication
    7. 4.7 Summary
    8. 4.8 Review Questions
    9. 4.9 Exercises
    10. 4.10 References and Suggested Readings
  10. Chapter 5 New and Emerging Process Methodologies
    1. 5.1 What Are Agile Processes?
    2. 5.2 Why Agile Processes?
    3. 5.3 Some Process Methodologies
      1. 5.3.1 Extreme Programming (XP)
      2. 5.3.2 The Crystal Family of Methodologies
      3. 5.3.3 The Unified Process as Agile
      4. 5.3.4 Scrum
      5. 5.3.5 Kanban Method: A New Addition to Agile
      6. 5.3.6 Open Source Software Development
      7. 5.3.7 Summary of Processes
    4. 5.4 Choosing a Process
      1. 5.4.1 Projects and Environments Better Suited for Each Kind of Process
      2. 5.4.2 Main Risks and Disadvantages of Agile Processes
      3. 5.4.3 Main Advantages of Agile Processes
    5. 5.5 Summary
    6. 5.6 Review Questions
    7. 5.7 Exercises
    8. 5.8 References and Suggested Readings
  11. Chapter 6 Requirements Engineering
    1. 6.1 Requirements Processing
      1. 6.1.1 Preparing for Requirements Processing
      2. 6.1.2 Requirements Engineering Process
    2. 6.2 Requirements Elicitation and Gathering
      1. 6.2.1 Eliciting High-Level Requirements
      2. 6.2.2 Eliciting Detailed Requirements
    3. 6.3 Requirements Analysis
      1. 6.3.1 Requirements Analysis and Clustering by Business Flow
      2. 6.3.2 Requirements Analysis and Clustering with Object-Oriented Use Cases
      3. 6.3.3 Requirements Analysis and Clustering by Viewpoint-Oriented Requirements Definition
      4. 6.3.4 Requirements Analysis and Prioritization
      5. 6.3.5 Requirements Traceability
    4. 6.4 Requirements Definition, Prototyping, and Reviews
    5. 6.5 Requirements Specification and Requirements Agreement
    6. 6.6 Summary
    7. 6.7 Review Questions
    8. 6.8 Exercises
    9. 6.9 References and Suggested Readings
  12. Chapter 7 Design: Architecture and Methodology
    1. 7.1 Introduction to Design
    2. 7.2 Architectural Design
      1. 7.2.1 What Is Software Architecture?
      2. 7.2.2 Views and Viewpoints
      3. 7.2.3 Meta-Architectural Knowledge: Styles, Patterns, Tactics, and Reference Architectures
      4. 7.2.4 A Network-based Web Reference Architecture—REST
    3. 7.3 Detailed Design
      1. 7.3.1 Functional Decomposition
      2. 7.3.2 Relational Database Design
      3. 7.3.3 Designing for Big Data
      4. 7.3.4 Object-Oriented Design and UML
      5. 7.3.5 User-Interface Design
      6. 7.3.6 Some Further Design Concerns
    4. 7.4 HTML-Script-SQL Design Example
    5. 7.5 Summary
    6. 7.6 Review Questions
    7. 7.7 Exercises
    8. 7.8 References and Suggested Readings
  13. Chapter 8 Design Characteristics and Metrics
    1. 8.1 Characterizing Design
    2. 8.2 Some Legacy Characterizations of Design Attributes
      1. 8.2.1 Halstead Complexity Metric
      2. 8.2.2 McCabe’s Cyclomatic Complexity
      3. 8.2.3 Henry-Kafura Information Flow
      4. 8.2.4 A Higher-Level Complexity Measure
    3. 8.3 “Good” Design Attributes
      1. 8.3.1 Cohesion
      2. 8.3.2 Coupling
    4. 8.4 OO Design Metrics
      1. 8.4.1 Aspect-Oriented Programming
      2. 8.4.2 The Law of Demeter
    5. 8.5 User-Interface Design
      1. 8.5.1 Good UI Characteristics
      2. 8.5.2 Usability Evaluation and Testing
    6. 8.6 Summary
    7. 8.7 Review Questions
    8. 8.8 Exercises
    9. 8.9 References and Suggested Readings
  14. Chapter 9 Implementation
    1. 9.1 Introduction to Implementation
    2. 9.2 Characteristics of a Good Implementation
      1. 9.2.1 Programming Style and Coding Guidelines
      2. 9.2.2 Comments
    3. 9.3 Implementation Practices
      1. 9.3.1 Debugging
      2. 9.3.2 Assertions and Defensive Programming
      3. 9.3.3 Performance Optimization
      4. 9.3.4 Refactoring
      5. 9.3.5 Code Reuse
    4. 9.4 Developing for the Cloud
      1. 9.4.1 Infrastructure as a Service
      2. 9.4.2 Platform as a Service
      3. 9.4.3 Cloud Application Services
      4. 9.4.4 Cloud Services for Developers
      5. 9.4.5 Advantages and Disadvantages of the Cloud
    5. 9.5 Summary
    6. 9.6 Review Questions
    7. 9.7 Exercises
    8. 9.8 References and Suggested Readings
  15. Chapter 10 Testing and Quality Assurance
    1. 10.1 Introduction to Testing and Quality Assurance
    2. 10.2 Testing
      1. 10.2.1 The Purposes of Testing
    3. 10.3 Testing Techniques
      1. 10.3.1 Equivalence-Class Partitioning
      2. 10.3.2 Boundary Value Analysis
      3. 10.3.3 Path Analysis
      4. 10.3.4 Combinations of Conditions
      5. 10.3.5 Automated Unit Testing and Test-Driven Development
      6. 10.3.6 An Example of Test-Driven Development
    4. 10.4 When to Stop Testing
    5. 10.5 Inspections and Reviews
    6. 10.6 Formal Methods
    7. 10.7 Static Analysis
    8. 10.8 Summary
    9. 10.9 Review Questions
    10. 10.10 Exercises
    11. 10.11 References and Suggested Readings
  16. Chapter 11 Configuration Management, Integration, and Builds
    1. 11.1 Software Configuration Management
    2. 11.2 Policy, Process, and Artifacts
      1. 11.2.1 Business Policy Impact on Configuration Management
      2. 11.2.2 Process Influence on Configuration Management
    3. 11.3 Configuration Management Framework
      1. 11.3.1 Naming Model
      2. 11.3.2 Storage and Access Model
    4. 11.4 Build and Integration and Build
    5. 11.5 Tools for Configuration Management
    6. 11.6 Managing the Configuration Management Framework
    7. 11.7 Summary
    8. 11.8 Review Questions
    9. 11.9 Exercises
    10. 11.10 References and Suggested Readings
  17. Chapter 12 Software Support and Maintenance
    1. 12.1 Customer Support
      1. 12.1.1 User Problem Arrival Rate
      2. 12.1.2 Customer Interface and Call Management
      3. 12.1.3 Technical Problem/Fix
      4. 12.1.4 Fix Delivery and Fix Installs
    2. 12.2 Product Maintenance Updates and Release Cycles
    3. 12.3 Change Control
    4. 12.4 Summary
    5. 12.5 Review Questions
    6. 12.6 Exercises
    7. 12.7 References and Suggested Readings
  18. Chapter 13 Software Project Management
    1. 13.1 Project Management
      1. 13.1.1 The Need for Project Management
      2. 13.1.2 The Project Management Process
      3. 13.1.3 The Planning Phase of Project Management
      4. 13.1.4 The Organizing Phase of Project Management
      5. 13.1.5 The Monitoring Phase of Project Management
      6. 13.1.6 The Adjusting Phase of Project Management
    2. 13.2 Some Project Management Techniques
      1. 13.2.1 Project Effort Estimation
      2. 13.2.2 Work Breakdown Structure
      3. 13.2.3 Project Status Tracking with Earned Value
      4. 13.2.4 Measuring Project Properties and GQM
    3. 13.3 Summary
    4. 13.4 Review Questions
    5. 13.5 Exercises
    6. 13.6 References and Suggested Readings
  19. Chapter 14 Epilogue and Some Contemporary Issues
    1. 14.1 Security and Software Engineering
    2. 14.2 Reverse Engineering and Software Obfuscation
    3. 14.3 Software Validation and Verification Methodologies and Tools
    4. 14.4 References and Suggested Readings
  20. Appendix A Essential Software Development Plan (SDP)
  21. Appendix B Essential Software Requirements Specifications (SRS)
    1. Example 1: Essential SRS—Descriptive
    2. Example 2: Essential SRS—Object Oriented
    3. Example 3: Essential SRS—IEEE Standard
    4. Example 4: Essential SRS—Narrative Approach
  22. Appendix C Essential Software Design
    1. Example 1: Essential Software Design—UML
    2. Example 2: Essential Software Design—Structural
  23. Appendix D Essential Test Plan
  24. Glossary
  25. Index