| |
| |
Preface | |
| |
| |
| |
Writing a Program | |
| |
| |
| |
A Simple Problem | |
| |
| |
| |
Decisions, Decisions | |
| |
| |
| |
Functional Requirements | |
| |
| |
| |
Nonfunctional Requirements | |
| |
| |
| |
Design Constraints | |
| |
| |
| |
Design Decisions | |
| |
| |
| |
Testing | |
| |
| |
| |
Estimating Effort | |
| |
| |
| |
Implementations | |
| |
| |
| |
A Few Pointers on Implementation | |
| |
| |
| |
Basic Design | |
| |
| |
| |
Unit Testing with JUnit | |
| |
| |
| |
Implementation of StringSorter | |
| |
| |
| |
User Interfaces | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Building a System | |
| |
| |
| |
Characteristics of Building a System | |
| |
| |
| |
Size and Complexity | |
| |
| |
| |
Technical Considerations of Development and Support | |
| |
| |
| |
Nontechnical Considerations of Development and Support | |
| |
| |
| |
Building a Hypothetical System | |
| |
| |
| |
Requirements of the Payroll System | |
| |
| |
| |
Designing the Payroll System | |
| |
| |
| |
Code and Unit Testing the Payroll System | |
| |
| |
| |
Integration and Functionally Testing the Payroll System | |
| |
| |
| |
Release of the Payroll System | |
| |
| |
| |
Support and Maintenance | |
| |
| |
| |
Coordination Efforts | |
| |
| |
| |
Process | |
| |
| |
| |
Product | |
| |
| |
| |
People | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Engineering of Software | |
| |
| |
| |
Examples and Characteristics of Software Failures | |
| |
| |
| |
Project Failures | |
| |
| |
| |
Software Product Failures | |
| |
| |
| |
Coordination and Other Concerns | |
| |
| |
| |
Software Engineering | |
| |
| |
| |
What Is Software Engineering? | |
| |
| |
| |
Definitions of Software Engineering | |
| |
| |
| |
Relevancy of Software Engineering and Software | |
| |
| |
| |
Software Engineering Profession and Ethics | |
| |
| |
| |
Software Engineering Code of Ethics | |
| |
| |
| |
Professional Behavior | |
| |
| |
| |
Principles of Software Engineering | |
| |
| |
| |
Davis's Early Principles of Software Engineering | |
| |
| |
| |
Royce's More Modern Principles | |
| |
| |
| |
Wasserman's Fundamental Software Engineering Concepts | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Software Process Models | |
| |
| |
| |
Software Processes | |
| |
| |
| |
Goal of Software Process Models | |
| |
| |
| |
The "Simplest" Process Model | |
| |
| |
| |
Traditional Process Models | |
| |
| |
| |
Waterfall Model | |
| |
| |
| |
Chief Programmer Team Approach | |
| |
| |
| |
Incremental Model | |
| |
| |
| |
Spiral Model | |
| |
| |
| |
A More Modern Process | |
| |
| |
| |
General Foundations of Rational Unified Process Framework | |
| |
| |
| |
The Phases of RUP | |
| |
| |
| |
Entry and Exit Criteria | |
| |
| |
| |
Entry Criteria | |
| |
| |
| |
Exit Criteria | |
| |
| |
| |
Process Assessment Models | |
| |
| |
| |
SEI's Capability Maturity Model | |
| |
| |
| |
SEI's Capability Maturity Model Integrated | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
New and Emerging Process Methodologies | |
| |
| |
| |
What Are Agile Processes? | |
| |
| |
| |
Why Agile Processes? | |
| |
| |
| |
Some Process Methodologies | |
| |
| |
| |
Extreme Programming (XP) | |
| |
| |
| |
The Crystal Family of Methodologies | |
| |
| |
| |
The Unified Process as Agile | |
| |
| |
| |
Microsoft Solutions Framework | |
| |
| |
| |
Open Source Software Development | |
| |
| |
| |
Summary of Processes | |
| |
| |
| |
Agile Versus Traditional Processes | |
| |
| |
| |
Choosing a Process | |
| |
| |
| |
Projects and Environments Better Suited for Each Kind of Process | |
| |
| |
| |
Main Risks and Disadvantages of Agile Processes | |
| |
| |
| |
Main Advantages of Agile Processes | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Requirements Engineering | |
| |
| |
| |
Requirements Processing | |
| |
| |
| |
Preparing for Requirements Processing | |
| |
| |
| |
Requirements Engineering Process | |
| |
| |
| |
Requirements Elicitation and Gathering | |
| |
| |
| |
Eliciting High-Level Requirements | |
| |
| |
| |
Eliciting Detailed Requirements | |
| |
| |
| |
Requirements Analysis | |
| |
| |
| |
Requirements Analysis and Clustering by Business Flow | |
| |
| |
| |
Requirements Analysis and Clustering with Object-Oriented Use Cases | |
| |
| |
| |
Requirements Analysis and Clustering by View-point-Oriented Requirements Definition | |
| |
| |
| |
Requirements Analysis and Prioritization | |
| |
| |
| |
Requirements Definition, Prototyping, and Reviews | |
| |
| |
| |
Requirements Specification and Requirements Agreement | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Design: Architecture and Methodology | |
| |
| |
| |
Introduction to Design | |
| |
| |
| |
Architectural Design | |
| |
| |
| |
What Is Software Architecture? | |
| |
| |
| |
Views and Viewpoints | |
| |
| |
| |
Meta-Architectural Knowledge: Styles, Patterns, Tactics, and Reference Architectures | |
| |
| |
| |
Detailed Design | |
| |
| |
| |
Functional Decomposition | |
| |
| |
| |
Relational Database Design | |
| |
| |
| |
Object-Oriented Design and UML | |
| |
| |
| |
User-Interface Design | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Design Characteristics and Metrics | |
| |
| |
| |
Characterizing Design | |
| |
| |
| |
Some Legacy Characterization of Design Attributes | |
| |
| |
| |
Halstead Complexity Metric | |
| |
| |
| |
McCabe's Cyclomatic Complexity | |
| |
| |
| |
Henry-Kafura Information Flow | |
| |
| |
| |
A Higher-Level Complexity Measure | |
| |
| |
| |
"Good" Design Attributes | |
| |
| |
| |
Cohesion | |
| |
| |
| |
Coupling | |
| |
| |
| |
Object-Oriented Design Metrics | |
| |
| |
| |
Aspect-Oriented Programming | |
| |
| |
| |
User-Interface Design | |
| |
| |
| |
Good UI Characteristics | |
| |
| |
| |
Usability Evaluation and Testing | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Implementation | |
| |
| |
| |
Introduction to Implementation | |
| |
| |
| |
Characteristics of a Good Implementation | |
| |
| |
| |
Programming Style and Coding Guidelines | |
| |
| |
| |
Comments | |
| |
| |
| |
Debugging | |
| |
| |
| |
Assertions and Defensive Programming | |
| |
| |
| |
Performance Optimization | |
| |
| |
| |
Refactoring | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Testing and Quality Assurance | |
| |
| |
| |
Introduction to Testing and Quality Assurance | |
| |
| |
| |
Testing | |
| |
| |
| |
The Purposes of Testing | |
| |
| |
| |
Testing Techniques | |
| |
| |
| |
Equivalence Class Partitioning | |
| |
| |
| |
Boundary Value Analysis | |
| |
| |
| |
Path Analysis | |
| |
| |
| |
Combinations of Conditions | |
| |
| |
| |
Automated Unit Testing and Test-Driven Development | |
| |
| |
| |
An Example of Test-Driven Development | |
| |
| |
| |
When to Stop Testing | |
| |
| |
| |
Inspections and Reviews | |
| |
| |
| |
Formal Methods | |
| |
| |
| |
Static Analysis | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Configuration Management, Integration, and Builds | |
| |
| |
| |
Software Configuration Management | |
| |
| |
| |
Policy, Process, and Artifacts | |
| |
| |
| |
Business Policy Impact on Configuration Management | |
| |
| |
| |
Process Influence on Configuration Management | |
| |
| |
| |
Configuration Management Framework | |
| |
| |
| |
Naming Model | |
| |
| |
| |
Storage and Access Model | |
| |
| |
| |
Build and Integration and Build | |
| |
| |
| |
Tools for Configuration Management | |
| |
| |
| |
Managing the Configuration Management Framework | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Software Support and Maintenance | |
| |
| |
| |
Customer Support | |
| |
| |
| |
User Problem Arrival Rate | |
| |
| |
| |
Customer Interface and Call Management | |
| |
| |
| |
Technical Problem/Fix | |
| |
| |
| |
Fix Delivery and Fix Installs | |
| |
| |
| |
Product Maintenance Updates and Release Cycles | |
| |
| |
| |
Change Control | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Software Project Management | |
| |
| |
| |
The Necessity of Project Management | |
| |
| |
| |
The Project Management Process | |
| |
| |
| |
Planning | |
| |
| |
| |
Organizing | |
| |
| |
| |
Monitoring | |
| |
| |
| |
Adjusting | |
| |
| |
| |
Some Project Management Techniques | |
| |
| |
| |
Project Effort Estimation | |
| |
| |
| |
Work Breakdown Structure | |
| |
| |
| |
Project Status Tracking with Earned Value | |
| |
| |
| |
Summary | |
| |
| |
| |
Review Questions | |
| |
| |
| |
Exercises | |
| |
| |
| |
Suggested Readings | |
| |
| |
| |
Epilogue | |
| |
| |
Index | |