For introductory courses in Software Engineering. This introduction to software engineering and practice addresses both procedural and object-oriented development. The book applies concepts consistently to two common examples - a typical information system and a real-time system. It combines theory with real, practical applications by providing an abundance of case studies and examples from the current literature. This revision has been thoroughly updated to reflect significant changes in software engineering, including modeling and agile methods.
                         
                        
                            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  Requirements Elicitation  4.3  Types of Requirements  4.4  Characteristics of Requirements  4.5  Modeling Notations  4.6  Requirements and Specification Languages  4.7  Prototyping Requirements  4.8  Requirements Documentation  4.9  Validation and Verification  4.10  Measuring Requirements  4.11  Choosing a Specification Technique  4.12  Information Systems Example  4.13  Real-Time Example  4.14  Term Project  4.15  Key References  4.16  Exercises  5  Designing the Architecture  5.1  The Design Process  5.2  Decomposition and Views  5.3  Modeling Architectures  5.4  Architectural Styles and Strategies  5.5  Achieving Quality Attributes  5.6  Collaborative Design  5.7  Architecture Evaluation and Refinement  5.8  Documenting Software Architectures  5.9  Architecture Design Review  5.10  Software Product Lines  5.11  Information System Example  5.12  Real-Time Example  5.13  What this Chapter Means for you  5.14  What this Chapter Means for Your Development Team  5.15  What this Chapter Means for Researchers  5.16  Term Project  5.17  Key References  5.18  Exercises  6  Designing the Modules  6.1  Design Methodology  6.2  Design Principles  6.3  Object-Oriented Design  6.4  Representing Object-Oriented Designs in the UML  6.5  Object-Oriented Design Patterns  6.6  Other Design Considerations  6.7  Object-Oriented Measurement  6.8  Design Documentation  6.9  Information Systems Example  6.10  Real-Time Example  6.11  What this Chapter Means for You  6.12  What this Chapter Means for your Development Team  6.13  What this Chapter Means for Researchers  6.14  Term Project  6.15  Key References  6.16  Exercises  7  Writing the Programs  7.1  Programming Standards and Procedures  7.2  Programming Guidelines  7.3  Documentation  7.4  The Programming Process  7.5  Information Systems Example  7.6  Real-Time Example  7.7  What this Chapter Means for You  7.8  What this Chapter Means for Your Development Team  7.9  What this Chapter Means for Researchers  7.10  Term Project  7.11  Key References  7.12  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.10  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 Resources  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 Professionalization of Software Engineering: Licensing, Certification, and Ethics  14.5  Term Project  14.6  Key References  14.7  Exercises  Annotated Bibliography  Index