Chapter 3 Software Life-Cycle Models 64 3.l Build-and-Fix Model 64 3.2 Waterfall Model 65 3.2.l Analysis of the Waterfall Model 68 3.3 Rapid Prototyping Model 70 3.3.l Integrating the Waterfall and Rapid Prototyping Models 7l 3.4 Incremental Model 72 3.4.l Analysis of the Incremental Model 73 3.5 Extreme Programming 75 3.6 Synchronize-and-Stabilize Model 77 3.7 Spiral Model 78 3.7.l Analysis of the Spiral Model 82 3.8 Object-Oriented Life-Cycle Models 82 3.9 Comparison of Life-Cycle Models 84 Chapter Review 86 For Further Reading 86 Problems 87 References 87
Chapter 4 Teams 90 4.l Team Organization 90 4.2 Democratic Team Approach 92 4.2.l Analysis of the Democratic Team Approach 93 4.3 Classical Chief Programmer Team Approach 93 4.3.l The New York Times Project 95 4.3.2 Impracticality of the Classical Chief Programmer Team Approach 96 4.4 Beyond Chief Programmer and Democratic Teams 97 4.5 Synchronize-and-Stabilize Teams l0l 4.6 Extreme Programming Teams l02 Chapter Review l03 For Further Reading 104 Problems l04 References l05
Chapter 5 The Tools Of the Trade 106 5.l Stepwise Refinement 106 5.l.l Stepwise Refinement Example l07 5.2 Cost-Benefit Analysis ll3 5.3 Software Metrics ll4 5.4 CASE ll5 5.5 Taxonomy of CASE ll6 5.6 Scope of CASE ll8 5.7 Software Versions l22 5.7.l Revisions l22 5.7.2 Variations l23 5.8 Configuration Control l24 5.8.l Configuration Control during Product Maintenance l26 5.8.2 Baselines l27 5.8.3 Configuration Control during Product Development l27 5.9 Build Tools 128 5.l0 Productivity Gains with CASE Technology l29 Chapter Review l3l For Further Reading l3l Problems l32 References l33
Chapter 6 Testing 136 6.l Quality Issues l37 6.l.l Software Quality Assurance l37 6.l.2 Managerial Independence l38 6.2 Nonexecution-Based Testing l39 6.2.l Walkthroughs l39 6.2.2 Managing Walkthroughs l40 6.2.3 Inspections l4l 6.2.4 Comparison of Inspections and Walkthroughs l43 6.2.5 Strengths and Weaknesses of Reviews l44 6.2.6 Metrics for Inspections l44 6.3 Execution-Based Testing l45 6.4 What Should Be Tested? l45 6.4.l Utility l46 6.4.2 Reliability l47 6.4.3 Robustness l47 6.4.4 Performance l48 6.4.5 Correctness l49 6.5 Testing versus Correctness Proofs l5l 6.5.l Example of a Correctness Proofs l5l 6.5.2 Correctness Proof Case Study l54 6.5.3 Correctness Proof and Software Engineering l55 6.6 Who Should Perform Execution-Based Testing? l58 6.7 When Testing Stops 160 Chapter Review l60 For Further Reading l6l Problems l62 References 164
Chapter 7 From Modules to Objects 167 7.l What Is a Module? l67 7.2 Cohesion l7l 7.2.l Coincidental Cohesion l7l 7.2.2 Logical Cohesion l72 7.2.3 Temporal Cohesion l73 7.2.4 Procedural Cohesion l74 7.2.5 Communicational Cohesion l74 7.2.6 Functional Cohesion l75 7.2.7 Informational Cohesion l75 7.2.8 Cohesion Example l76 7.3 Coupling 177 7.3.l Content Coupling l78 7.3.2 Common Coupling l78 7.3.3 Control Coupling l80 7.3.4 Stamp Coupling l80 7.3.5 Data Coupling l82 7.3.6 Coupling Example l82 7.3.7 The Importance of Coupling l82 7.4 Data Encapsulation l84 7.4.l Data Encapsulation and Product Development l86 7.4.2 Data Encapsulation and Product Maintenance l88 7.5 Abstract Data Types l94 7.6 Infromation Hiding l95 7.7 Objects l98 7.8 Inheritance, Polymorphism, and Dynamic Binding 20l 7.9 Cohesion and Coupling of Objects 203 7.l0 The Object-Oriented Paradigm 204 Chapter Review 207 For Further Reading 207 Problems 208 References 209
Chapter 8 Reusability Portability, and Interoperability 212 8.l Reuse Concepts 2l2 8.2 Impediments to Reuse 2l4 8.3 Reuse Case Studies 216 8.3.l Raytheon Missi1e Systems Division 2l6 8.3.2 Toshiba software Factory 2l7 8.3.3 NASA Software 2l8 8.3.4 GTE Data Services 2l9 8.3.5 Hewlett-Packard 220 8.3.6 European Space Agency 22l 8.4 Objects and Reuse 222 8.5 Reuse during the Design and Implementation Phases 222 8.5.l Design Reuse 222 8.5.2 Application Frameworks 224 8.5.3 Design Patterns 225 8.5.4 Software Architecture 229 8.6 Reuse and Maintenance 230 8.7 Portability 23l 8.7.l Ware Incompatibilities 232 8.7.2 Operating Systems Incompatibilities 233 8.7.3 Numerical Software Incompatibilities 233 8.7.4 Compiler Incompatibilities 235 8.8 Why Portability? 239 8.9 Techniques for Achieving Portability 240 8.9.l Portable System Software 240 8.9.2 Portable Application Software 24l 8.9.3 Portable Data 242 8.l0 Interoperability 243 8.l0.l COM 243 8.l0.2 CORBA 244 8.l0.3 Comparing COM and CORBA 245 8.ll Future Trends in Interoperability 245 Chapter Review For Further Reading 247 Problems 248 References 250
Chapter 9 Planning and Estimating 257 9.l Planning and the Software Process 257 9.2 Estimating Duration and Cost 259 9.2.l Metrics for the Size of a Product 260 9.2.2 Techniques of Cost Estimation 264 9.2.3 Intermediate COCOMO 267 9.2.4 COCOMO II 270 9.2.5 Tracking Duration and Cost Estimates 272 9.3 Components of a Software Project Management Plan 272 9.4 software Project Management Plan Framework 274 9.5 IEEE Software Project Management Plan 274 9.6 Planning Testing 278 9.7 Planning Object-Oriented Projects 279 9.8 Training Requirements 280 9.9 Documentation Standards 281 9.l0 CASE Tools for Planning and Estimating 282 9.ll Testing the Software Project Management Plan 282 Chapter Review 283 For Further Reading 283 Problems 284 References 285
PART 2 The Phases of the Software Life Cycle 289 Chapter 1O Requirements Phase 290 l0.l Requirements Elicitation 29l l0.l.l Interviews 29l l0.l.2 Scenarios 292 l0.l.3 Other Requirements Elicitation Techniques 293 l0.2 Requirements Analysis 294 l0.3 Rapid Prototyping 294 l0.4 Human Factors 296 l0.5 Rapid Prototyping as a Specification Technique 298 l0.6 Reusing the Rapid Prototype 300 l0.7 Management Implications of the Rapid Prototyping Model 302 l0.8 Experiences with Rapid Prototyping 304 l0.9 Techniques for Requirements Elicitation and Analysis 305 l0.l0 Testing during the Requirements Phase 305 10.ll CASE Tools for the Requirements Phase 306 l0.l2 Metrics for the Requirements Phase 307 10.l3 Object-Oriented Requirements? 308 10.l4 Air Gourmet Case Study: Requirements Phase 308 10.l5 Air Gourmet Case Study: Rapid Prototype 3ll l0.l6 Challenges of the Requirements Phase 3l3 Chapter Review 3l5 For Further Reading 3l5 Problems 316 References 3l7
Chapter 11 Specification Phase 319 ll.l The Specification Document 3l9 ll.2 Informal Specifications 32l ll.2.l Case Study: Text Processing 322 ll.3 Structured Systems Analysis 323 1l.3.l Sally's Software Shop 323 l1.4 Other Semiformal Techniques 33l ll.5 Entity-Relationship Modeling 332 1l.6 Finite State Machines 335 ll.6.l Elevator Problem: Finite State Machines 336 ll.7 Petri Nets 34l ll.7.l Elevator Problem: Petri Nets 343 ll.8 Z 346 ll.8.l Elevator Problem: Z 347 ll.8.2 Analysis of Z 349 ll.9 Other Formal Techniques 35l ll.l0 Comparison of Specification Techniques 352 ll.ll Testing during the Specification Phase 353 ll.l2 CASE Tools for the Specification Phase 354 ll.l3 Metrics for the Specification Phase 355 ll.l4 Air Gourmet Case Study: Structured Systems Analysis 355 ll.l5 Air Gourmet Case Study: Software Project Management Plan 357 ll.l6 Challenges of the Specification Phase 358 Chapter Review 358 For Further Reading 359 Problems 360 References 362
Chapter 12 Object-Oriented Analysis Phase 366 l2.l Object-Oriented Analysis 366 l2.2 Elevator Problem: Object-Oriented Analysis 369 l2.3 Use-Case Modeling 369 l2.4 Class Modeling 37l l2.4.l Noun Extraction 372 l2.4.2 CRC Cards 374 l2.5 Dynamic Modeling 375 l2.6 Testing during the Object-Oriented Analysis Phase 378 l2.7 CASE Tools for the Object-Oriented Analysis Phase 383 l2.8 Air Gourmet Case Study: Object-Oriented Analysis 383 l2.9 Challenges of the Object-Oriented Analysis Phase 390 Chapter Review 39l For Further Reading 39l Problems 392 References 393
Chapter 13 Design Phase 395 l3.l Design and Abstraction 395 l3.2 Action-Oriented Design 396 l3.3 Data Flow Analysis 397 l3.3.l Data Flow Analysis Example 398 l3.3.2 Extensions 402 13.4 Transaction Analysis 403 13.5 Data-Oriented Design 406 l3.6 Object-Oriented Design 406 l3.7 Elevator Problem: Object-Oriented Design 407 13.8 Formal Techniques for Detailed Design 415 l3.9 Real-Time Design Techniques 4l6 l3.10 Testing during the Design Phase 4l8 13.l1 CASE Tools for the Design Phase 4l8 l3.l2 Metrics for the Design Phase 4l9 l3.13 Air Gourmet Case Study: Object-Oriented Design 420 l3.l4 Challenges of the Design Phase 429 Chapter Review 429 For Further Reading 430 Problems 43l References 43l
Chapter 14 Implementation Phase 434 14.l Choice of Programming Language 434 l4.2 Fourth-Generation Languages 437 l4.3 Good Programming Practice 440 l4.4 Coding Standards 445 l4.5 Module Reuse 446 l4.6 Module Test Case Selection 447 l4.6.l Testing to Specifications versus Testing to Code 447 l4.6.2 Feasibility of Testing to Specifications 447 l4.6.3 Feasibility of Testing to Code 448 l4.7 Black-Box Module-Testing Techniques 451 l4.7.l Equivalence Testing and Boundary Value Analysis 45l l4.7.2 Functional Testing 452 l4.8 Glass-Box Module-Testing Techniques 454 l4.8.l Structural Testing: Statement, Branch, and Path Coverage 454 l4.8.2 Complexity Metrics 456 l4.9 Code Walkthroughs and Inspections 458 l4.l0 Comparison of Module-Testing Techniques 458 l4.ll Cleanroom 459 l4.12 Potential Problems When Testing Objects 460 l4.l3 Management Aspects of Module Testing 463 l4.l4 When to Rewrite Rather than Debug a Module 463 l4.l5 CASE Tools for the Implementation Phase 465 l4.l6 Air Gourmet Case Study: Black-Box Test Cases 465 l4.l7 Challenges of the Implementation Phase 467 Chapter Review 467 For Further Reading 468 Problems 469 References 470
Chapter 15 Implementation and Integration Phase 474 l5.l Introduction to Implementation and Integration 474 l5.l.l Top-down Implementation and Integration 475 l5.l.2 Bottom-up Implementation and Integration 477 l5.l.3 Sandwich Implementation and Integration 478 l5.l.4 Implementation and Integration of Object-Oriented Products 480 l5.l.5 Management Issues during the Implementation and Integration Phase 480 l5.2 Testing during the Implementation and Integration Phase 48l l5.3 Integration Testing of Graphical User Interfaces 48l l5.4 Product Testing 482 l5.5 Acceptance Testing 483 l5.6 CASE Tools for the Implementation and Integration Phase 484 l5.6 CASE Tools for the Complete Software Process 484 l5.8 Integrated Environments 485 l5.9 Environments for Business Applications 486 l5.l0 Public Tool Infrastructures 487 l5.ll Potential Problems with Environments 487 l5.l2 Metrics for the Implementation and Integration Phase 488 l5.l3 Air Gourmet Case Study: Implementation and Integration Phase 488 l5.l4 Challenges of the Implementation and Integration Phase 489 Chapter Review 489 For Further Reading 490 Problems 490 References 492
Chapter 16 Maintenance Phase 493 16.1 Why Maintenance Is Necessary 493 16.2 What Is Required of Maintenance Programmers 494 l6.3 Maintenance Case Study 497 l6.4 Management of Maintenance 498 l6.4.l Fault Reports 498 l6.4.2 Authorizing Changes to the Product 499 l6.4.3 Ensuring Maintainability 500 l6.4.4 Problem of Repeated Maintenance 500 l6.5 Maintenance of Object-Oriented Software 501 l6.6 Maintenance Skills versus Development Skills 504 l6.7 Reverse Engineering 505 16.8 Testing during the Maintenance Phase 506 l6.9 CASE Tools for the Maintenance Phase 507 l6.l0 Metrics for the Maintenance Phase 507 l6.l1 Air Gourmet Case Study: Maintenance Phase 508 16.l2 Challenges of the Maintenance Phase 508 Chapter Review 509 For Further Reading 509 Problems 510 References 51l
Appendix A Broadlands Area Children's Hospital 513 Appendix B Software Engineering Resources 518 Appendix C Air Gourmet Case Study: C Rapid Prototype 520 Appendix D Air Gourmet Case Study: Java Rapid Prototype 521 Appendix E Air Gourmet Case Study: Structured Systems Analysis 522 Appendix F Air Gourmet Case Study: Software Project Management Plan 529 Appendix G Air Gourmet Case Study: Object-Object-Oriented Analysis 534 Appendix H Air Gourmet Case Study: Design for C++ Implementation 535 Appendix I Air Gourmet Case Study: Design for Java Implementation 560 Appendix J Air Gourmet Case Study: Black-Box Test Cases 582 Appendix K Air Gourmet Case Study: C++ Source Code 588 Appendix L Air Gourmet Case Study: Java Source Code 589
Bibliography 590 Author Index 617 Subject Index 623