Preface 1 Why Software Engineering? 1.1 What Is Software Engineering? 1.2 How Successful Have We Been? 1.3 What Is Good Software? 1.4 Who Does Software Engineering? 1.5 A Systems Approach 1.6 An Engineering Approach 1.7 Members of the Development Team 1.8 How Has Software Engineering Changed? 1.9 Information Systems Example 1.10 Real-Time Example 1.11 What This Chapter Means for You 1.12 What This Chapter Means for Your Development Team 1.13 What This Chapter Means for Researchers 1.14 Term Project 1.15 Key References 1.16 Exercises 2 Modeling the Process and Life Cycle 2.1 The Meaning of Process 2.2 Software Process Models 2.3 Tools and Techniques for Process Modeling 2.4 Practical Process Modeling 2.5 Information System Example 2.6 Real-Time Example 2.7 What This Chapter Means for You 2.8 What This Chapter Means for Your Development Team 2.9 What This Chapter Means for Researchers 2.10 Term Project 2.11 Key References 2.12 Exercises 3 Planning and Managing the Project 3.1 Tracking Progress 3.2 Project Personnel 3.3 Effort Estimation 3.4 Risk Management 3.5 the Project Plan 3.6 Process Models and Project Management 3.7 Information System Example 3.8 Real-Time Example 3.9 What This Chapter Means for You 3.10 What This Chapter Means for Your Development Team 3.11 What This Chapter Means for Researchers 3.12 Term Project 3.13 Key References 3.14 Exercises 4 Capturing the Requirements 4.1 The Requirements Process 4.2 Types of Requirements 4.3 Characteristics of Requirements 4.4 How to Express Requirements 4.5 Additional Requirements Notations 4.6 Prototyping Requirements 4.7 Requirements Documentation 4.8 Participants in the Requirements Process 4.9 Requirements Validation 4.10 Measuring Requirements 4.11 Choosing a Requirements Specification Technique 4.12 Information Systems Example 4.13 Real-Time Example 4.14 What This Chapter Means for You 4.15 What This Chapter Means for Your Development Team 4.16 What This Chapter Means for Researchers 4.17 Term Project 4.18 Key References 4.19 Exercises 5 Designing the System 5.1 What Is Design? 5.2 Decomposition and Modularity 5.3 Architectural Styles and Strategies 5.4 Issues in Design Creation 5.5 Characteristics of Good Design 5.6 Techniques for Improving Design 5.7 Design Evaluation and Validation 5.8 Documenting the Design 5.9 Information System Example 5.10 Real-Time Example 5.11 What This Chapter Means for You 5.12 What This Chapter Means for Your Development Team 5.13 What This Chapter Means for Researchers 5.14 Term Project 5.15 Key References 5.16 Exercises 6 Concerning Objects 6.1 What Is OO? 6.2 The OO Development Process 6.3 Use Cases 6.4 Representing OO: An Example Using UML 6.5 OO System Design 6.6 OO Program Design 6.7 OO Measurement 6.8 Information Systems Example 6.9 Real-Time Example 6.10 What This Chapter Means for You 6.11 What This Chapter Means for Your Development Team 6.12 What This Chapter Means for Researchers 6.13 Term Project 6.14 Key References 6.15 Exercises 7 Writing the Programs 7.1 Programming Standards and Procedures 7.2 Programming Guidelines 7.3 Documentation 7.4 Information Systems Example 7.5 Real-Time Example 7.6 What This Chapter Means for You 7.7 What This Chapter Means for Your Development Team 7.8 What This Chapter Means for Researchers 7.9 Term Project 7.10 Key References 7.11 Exercises 8 Testing the Programs 8.1 Software Faults and Failures 8.2 Testing Issues 8.3 Unit Testing 8.4 Integration Testing 8.5 Testing Object-Oriented Systems 8.6 Test Planning 8.7 Automated Testing Tools 8.8 When to Stop Testing 8.9 Information Systems Example 8.10 Real-Time Example 8.11 What This Chapter Means for You 8.12 What This Chapter Means for Your Development Team 8.13 What This Chapter Means for Researchers 8.14 Term Project 8.15 Key References 8.16 Exercises 9 Testing the System 9.1 Principles of System Testing 9.2 Function Testing 9.3 Performance Testing 9.4 Reliability, Availability, and Maintainability 9.5 Acceptance Testing 9.6 Installation Testing 9.7 Automated System Testing 9.8 Test Documentation 9.9 Testing Safety-Critical Systems 9.10 Information Systems Example 9.11 Real-Time Example 9.12 What This Chapter Means for You 9.13 What This Chapter Means for Your Development Team 9.14 What This Chapter Means for Researchers 9.15 Term Project 9.16 Key References 9.17 Exercises 10 Delivering the System 10.1 Training 10.2 Documentation 10.3 Information Systems Example 10.4 Real-Time Example 10.5 What This Chapter Means for You 10.6 What This Chapter Means for Your Development Team 10.7 What This Chapter Means for Researchers 10.8 Term Project 10.9 Key References 10.10 Exercises 11 Maintaining the System 11.1 The Changing System 11.2 The Nature of Maintenance 11.3 Maintenance Problems 11.4 Measuring Maintenance Characteristics 11.5 Maintenance Techniques and Tools 11.6 Software Rejuvenation 11.7 Information Systems Example 11.8 Real-Time Example 11.9 What This Chapter Means for You 11.l0 What This Chapter Means for Your Development Team 11.11 What This Chapter Means for Researchers 11.12 Term Project 11.13 Key References 11.14 Exercises 12 Evaluating Products, Processes, and Resources 12.1 Approaches to Evaluation 12.2 Selecting an Evaluation Technique 12.3 Assessment vs. Prediction 12.4 Evaluating Products 12.5 Evaluating Processes 12.6 Evaluating Resources 12.7 Information Systems Example 12.8 Real-Time Example 12.9 What This Chapter Means for You 12.10 What This Chapter Means for Your Development Team 12.11 What This Chapter Means for Researchers 12.12 Term Project 12.13 Key References 12.14 Exercises 13 Improving Predictions, Products, Processes, and Resourees 13.1 Improving Prediction 13.2 Improving Products 13.3 Improving Processes 13.4 Improving Resources 13.5 General Improvement Guidelines 13.6 Information Systems Example 13.7 Real-Time Example 13.8 What This Chapter Means for You 13.9 What This Chapter Means for Your Development Team 13.10 What This Chapter Means for Researchers 13.11 Term Project 13.12 Key References 13.13 Exercises 14 The Future of Software Engineering 14.1 How Have We Done? 14.2 Technology Transfer 14.3 Decision-Making in Software Engineering 14.4 The Future of Software Engineering 14.5 Term Project 14.6 Key References 14.7 Exercises Annotated Bibliography Index