Artikel werden geladen
Autoren:
Verlag:
Springer-Verlag Weitere Titel dieses Verlages anzeigen
| Contents | ||||||
| Preface to the Third Edition | xiii | |||||
| 1 | Introduction | 1 | ||||
| 1.1 | The Problem Domain | 2 | ||||
| 1.1.1 | Industrial Strength Software | 2 | ||||
| 1.1.2 | Software is Expensive | 4 | ||||
| 1.1.3 | Late and Unreliable | 5 | ||||
| 1.1.4 | Maintenance and Rework | 6 | ||||
| 1.2 | The Software Engineering Challenges | 8 | ||||
| 1.2.1 | Scale | 9 | ||||
| 1.2.2 | Quality and Productivity | 11 | ||||
| 1.2.3 | Consistency and Repeatability | 14 | ||||
| 1.2.4 | Change | 15 | ||||
| 1.3 | The Software Engineering Approach | 15 | ||||
| 1.3.1 | Phased Development Process | 16 | ||||
| 1.3.2 | Managing the Process | 20 | ||||
| 1.4 | Summary | 21 | ||||
| Exercises | 22 | |||||
| 2 | Software Processes | 25 | ||||
| 2.1 | Software Process | 25 | ||||
| 2.1.1 | Processes and Process Models | 26 | ||||
| 2.1.2 | Component Software Processes | 27 | ||||
| 2.1.3 | ETVX Approach for Process Specification | 29 | ||||
| 2.2 | Desired Characteristics of Software Process | 31 | ||||
| 2.2.1 | Predictability | 31 | ||||
| 2.2.2 | Support Testability and Maintainability | 33 | ||||
| 2.2.3 | Support Change | 34 | ||||
| 2.2.4 | Early Defect Removal | 35 | ||||
| 2.2.5 | Process Improvement and Feedback | 36 | ||||
| 2.3 | Software Development Process Models | 37 | ||||
| 2.3.1 | Waterfall Model | 37 | ||||
| 2.3.2 | Prototyping | 41 | ||||
| 2.3.3 | Iterative Development | 43 | ||||
| 2.3.4 | Timeboxing
Model | 46 | ||||
| 2.3.5 | Comparision of Models | 50 | ||||
| 2.4 | Other Software Processes | 50 | ||||
| 2.4.1 | Project Management Process | 52 | ||||
| 2.4.2 | The Inspection Process | 54 | ||||
| 2.4.3 | Software Configuration Management Process | 61 | ||||
| 2.4.4 | Requirements
Change
Management
Process | 67 | ||||
| 2.4.5 | Process Management Process | 69 | ||||
| 2.5 | Summary | 73 | ||||
| Exercises | 75 | |||||
| 3 | Software Requirements Analysis and Specification | 79 | ||||
| 3.1 | Software Requirements | 80 | ||||
| 3.1.1 | Need for SRS | 81 | ||||
| 3.1.2 | Requirement Process | 85 | ||||
| 3.2 | Problem Analysis | 89 | ||||
| 3.2.1 | Informal Approach | 90 | ||||
| 3.2.2 | Data Flow Modeling | 91 | ||||
| 3.2.3 | Object-Oriented Modeling | 103 | ||||
| 3.2.4 | Prototyping | 113 | ||||
| 3.3 | Requirements Specification | 117 | ||||
| 3.3.1 | Characteristics of an SRS | 118 | ||||
| 3.3.2 | Components of an SRS | 120 | ||||
| 3.3.3 | Specification Language | 124 | ||||
| 3.3.4 | Structure of a Requirements Document | 125 | ||||
| 3.4 | Functional Specification with Use Cases | 128 | ||||
| 3.4.1 | Basics | 129 | ||||
| 3.4.2 | Examples | 132 | ||||
| 3.4.3 | Extensions | 135 | ||||
| 3.4.4 | Developing Use Cases | 136 | ||||
| 3.5 | Validation | 138 | ||||
| 3.6 | Metrics | 142 | ||||
| 3.6.1 | Size-Function Points | 142 | ||||
| 3.6.2 | Quality Metrics | 147 | ||||
| 3.7 | Summary | 148 | ||||
| Exercises | 150 | |||||
| Case Studies | 152 | |||||
| 4 | Software Architecture | 159 | ||||
| 4.1 | Role of Software Architecture | 160 | ||||
| 4.2 | Architecture Views | 163 | ||||
| 4.3 | Component and Connector View | 167 | ||||
| 4.3.1 | Components | 167 | ||||
| 4.3.2 | Connectors | 169 | ||||
| 4.3.3 | An Example | 172 | ||||
| 4.4 | Architecture Styles for C&C View | 176 | ||||
| 4.4.1 | Pipe and Filter | 176 | ||||
| 4.4.2 | Shared-Data Style | 178 | ||||
| 4.4.3 | Client-Server Style | 181 | ||||
| 4.4.4 | Some Other Styles | 182 | ||||
| 4.5 | Discussion | 183 | ||||
| 4.5.1 | Architecture and Design | 183 | ||||
| 4.5.2 | Preserving the Integrity of an Architecture | 184 | ||||
| 4.5.3 | Deployment View and Performance Analysis | 188 | ||||
| 4.5.4 | Documenting Architecture Design | 190 | ||||
| 4.6 | Evaluating Architectures | 194 | ||||
| 4.6.1 | The ATAM Analysis Method | 195 | ||||
| 4.6.2 | An Example | 196 | ||||
| 4.7 | Summary | 199 | ||||
| Exercises | 201 | |||||
| Case Studies | 203 | |||||
| 5 | Planning a Software Project | 207 | ||||
| 5.1 | Process Planning | 208 | ||||
| 5.2 | Effort Estimation | 208 | ||||
| 5.2.1 | Uncertainties in Effort Estimation | 209 | ||||
| 5.2.2 | Building Effort Estimation Models | 211 | ||||
| 5.2.3 | A Bottom-Up Estimation Approach | 213 | ||||
| 5.2.4 | COCOMO Model | 215 | ||||
| 5.3 | Project Scheduling and Staffing | 219 | ||||
| 5.3.1 | Overall Scheduling | 219 | ||||
| 5.3.2 | Detailed Scheduling | 221 | ||||
| 5.3.3 | An Example | 223 | ||||
| 5.3.4 | Team Structure | 224 | ||||
| 5.4 | Software Configuration Management Plan | 225 | ||||
| 5.5 | Quality Plan | 226 | ||||
| 5.5.1 | Defect Injection and Removal Cycle | 227 | ||||
| 5.5.2 | Approaches to Quality Management | 228 | ||||
| 5.5.3 | Quality Plan | 229 | ||||
| 5.6 | Risk Management | 230 | ||||
| 5.6.1 | Risk Management Concepts | 230 | ||||
| 5.6.2 | Risk Assessment | 232 | ||||
| 5.6.3 | Risk Control | 236 | ||||
| 5.6.4 | A Practical Risk Management Approach | 237 | ||||
| 5.7 | Project Monitoring Plan | 237 | ||||
| 5.7.1 | Measurements | 239 | ||||
| 5.7.2 | Project Monitoring and Tracking | 239 | ||||
| 5.8 | Summary | 241 | ||||
| Exercises | 243 | |||||
| Case Studies | 245 | |||||
| 6 | Function-Oriented Design | 247 | ||||
| 6.1 | Design Principles | 248 | ||||
| 6.1.1 | Problem Partitioning and Hierarchy | 250 | ||||
| 6.1.2 | Abstraction | 251 | ||||
| 6.1.3 | Modularity | 253 | ||||
| 6.1.4 | Top-Down and Bottom-Up Strategies | 254 | ||||
| 6.2 | Module-Level Concepts | 255 | ||||
| 6.2.1 | Coupling | 255 | ||||
| 6.2.2 | Cohesion | 257 | ||||
| 6.3 | Design Notation and Specification | 260 | ||||
| 6.3.1 | Structure Charts | 261 | ||||
| 6.3.2 | Specification | 265 | ||||
| 6.4 | Structured Design Methodology | 266 | ||||
| 6.4.1 | Restate the Problem as a Data Flow Diagram | 267 | ||||
| 6.4.2 | Identify the Most Abstract Input and Output Data Elements | 269 | ||||
| 6.4.3 | First-Level Factoring | 271 | ||||
| 6.4.4 | Factoring the Input, Output, and Transform Branches | 273 | ||||
| 6.4.5 | Design Heuristics | 276 | ||||
| 6.4.6 | Transaction Analysis | 277 | ||||
| 6.4.7 | Discussion | 279 | ||||
| 6.5 | Verification | 281 | ||||
| 6.6 | Metrics | 283 | ||||
| 6.6.1 | Network Metrics | 284 | ||||
| 6.6.2 | Stability Metrics | 285 | ||||
| 6.6.3 | Information Flow Metrics | 288 | ||||
| 6.7 | Summary | 290 | ||||
| Exercises | 292 | |||||
| Case Studies | 294 | |||||
| 7 | Object-Oriented Design | 303 | ||||
| 7.1 | OO Analysis and OO Design | 304 | ||||
| 7.2 | OO Concepts . | 306 | ||||
| 7.2.1 | Classes and Objects | 307 | ||||
| 7.2.2 | Relationships Among Objects | 312 | ||||
| 7.2.3 | Inheritance and Polymorphism | 315 | ||||
| 7.3 | Design Concepts | 323 | ||||
| 7.3.1 | Coupling . | 323 | ||||
| 7.3.2 | Cohesion | 325 | ||||
| 7.3.3 | The Open-Closed Principle | 327 | ||||
| 7.3.4 | Some Design Guidelines | 329 | ||||
| 7.4 | Unified Modeling Language (UML) | 331 | ||||
| 7.4.1 | Class Diagram | 331 | ||||
| 7.4.2 | Sequence and Collaboration Diagrams | 335 | ||||
| 7.4.3 | Other Diagrams and Capabilities | 339 | ||||
| 7.5 | A Design Methodology | 341 | ||||
| 7.5.1 | Dynamic Modeling | 343 | ||||
| 7.5.2 | Functional Modeling | 345 | ||||
| 7.5.3 | Defining Internal Classes and Operations | 346 | ||||
| 7.5.4 | Optimize and Package | 347 | ||||
| 7.5.5 | Examples | 348 | ||||
| 7.6 | Metrics | 356 | ||||
| 7.7 | Summary | 360 | ||||
| Exercises | 362 | |||||
| Case Studies | 364 | |||||
| 8 | Detailed Design | 371 | ||||
| 8.1 | Detailed Design and PDL | 371 | ||||
| 8.1.1 | PDL | 371 | ||||
| 8.1.2 | Logic/Algorithm Design | 374 | ||||
| 8.1.3 | State Modeling of Classes | 378 | ||||
| 8.2 | Verification | 380 | ||||
| 8.2.1 | Design Walkthroughs | 380 | ||||
| 8.2.2 | Critical Design Review | 381 | ||||
| 8.2.3 | Consistency Checkers | 382 | ||||
| 8.3 | Metrics | 383 | ||||
| 8.3.1 | Cyclomatic Complexity | 383 | ||||
| 8.3.2 | Data Bindings | 386 | ||||
| 8.3.3 | Cohesion Metric | 387 | ||||
| 8.4 | Summary | 388 | ||||
| Exercises | 389 | |||||
| 9 | Coding | 391 | ||||
| 9.1 | Programming Principles and Guidelines | 392 | ||||
| 9.1.1 | Common Coding Errors | 393 | ||||
| 9.1.2 | Structured
Programming | 398 | ||||
| 9.1.3 | Information Hiding | 401 | ||||
| 9.1.4 | Some Programming Practices | 402 | ||||
| 9.1.5 | Coding Standards | 406 | ||||
| 9.2 | Coding Process | 409 | ||||
| 9.2.1 | An Incremental Coding Process | 410 | ||||
| 9.2.2 | Test Driven Development | 411 | ||||
| 9.2.3 | Pair Programming | 413 | ||||
| 9.2.4 | Source Code Control and Build | 414 | ||||
| 9.3 | Refactoring | 416 | ||||
| 9.3.1 | Basic Concepts | 417 | ||||
| 9.3.2 | An example | 419 | ||||
| 9.3.3 | Bad Smells | 422 | ||||
| 9.3.4 | Common Refactorings | 424 | ||||
| 9.4 | Verification | 429 | ||||
| 9.4.1 | Code Inspections | 429 | ||||
| 9.4.2 | Static Analysis | 431 | ||||
| 9.4.3 | Proving Correctness | 437 | ||||
| 9.4.4 | Unit Testing | 444 | ||||
| 9.4.5 | Combining Different Techniques | 449 | ||||
| 9.5 | Metrics | 451 | ||||
| 9.5.1 | Size Measures | 452 | ||||
| 9.5.2 | Complexity Metrics | 453 | ||||
| 9.6 | Summary | 456 | ||||
| Exercises | 458 | |||||
| Case Studies | 462 | |||||
| 10 | Testing | 465 | ||||
| 10.1 | Testing Fundamentals | 466 | ||||
| 10.1.1 | Error, Fault, and Failure | 466 | ||||
| 10.1.2 | Test Oracles | 468 | ||||
| 10.1.3 | Test
Cases
and
Test
Criteria | 469 | ||||
| 10.1.4 | Psychology of Testing | 471 | ||||
| 10.2 | Black-Box Testing | 472 | ||||
| 10.2.1 | Equivalence Class Partitioning | 473 | ||||
| 10.2.2 | Boundary Value Analysis | 475 | ||||
| 10.2.3 | Cause-Effect Graphing | 477 | ||||
| 10.2.4 | Pair-wise Testing | 480 | ||||
| 10.2.5 | Special Cases | 483 | ||||
| 10.2.6 | State-Based Testing | 484 | ||||
| 10.3 | White-Box Testing | 487 | ||||
| 10.3.1 | Control Flow-Based Criteria | 488 | ||||
| 10.3.2 | Data Flow-Based Testing | 491 | ||||
| 10.3.3 | An Example | 495 | ||||
| 10.3.4 | Mutation Testing | 498 | ||||
| 10.3.5 | Test Case Generation and Tool Support | 502 | ||||
| 10.4 | Testing Process | 504 | ||||
| 10.4.1 | Levels of Testing | 505 | ||||
| 10.4.2 | Test Plan | 507 | ||||
| 10.4.3 | Test Case Specifications | 509 | ||||
| 10.4.4 | Test Case Execution and Analysis | 511 | ||||
| 10.4.5 | Defect Logging and Tracking | 513 | ||||
| 10.5 | Defect Analysis and Prevention | 516 | ||||
| 10.5.1 | Pareto Analysis | 517 | ||||
| 10.5.2 | Perform Causal Analysis | 517 | ||||
| 10.5.3 | Develop and Implement Solutions | 520 | ||||
| 10.6 | Metrics-Reliability Estimation | 521 | ||||
| 10.6.1 | Basic Concepts and Definitions | 522 | ||||
| 10.6.2 | A Reliability Model | 524 | ||||
| 10.6.3 | Failure Data and Parameter Estimation | 529 | ||||
| 10.6.4 | Translating to Calendar Time | 532 | ||||
| 10.6.5 | An Example | 532 | ||||
| 10.7 | Summary | 534 | ||||
| Exercises | 536 | |||||
| Case Studies | 539 | |||||
| Bibliography | 543 | |||||
| Index | 553 | |||||
Preface to the Third Edition
An introductory course in Software Engineering remains one of the hardest subjects to teach. Much of the difficulty stems from the fact that Software Engineering is a very wide field which includes a wide range of topics. Consequently, what should be the focus of an introductory course remains a challenge with many possible viewpoints.
This third edition of the book approaches the problem from the perspective of what skills a student should possess after the introductory course, particularly if it may be the only course on software engineering in the student's program. The goal of this third edition is to impart to the student knowledge and skills that are needed to successfully execute a project of a few person-months by employing proper practices and techniques. Incidently, a vast majority of the projects executed in the industry today are of this scope-executed by a small team over a few months. Another objective of the book is to lay the foundation for the student for advanced studies in Software Engineering.
Executing any software project requires skills in two key dimensions- engineering and project management. While engineering deals with issues of architecture, design, coding, testing, etc., project management deals with planning, monitoring, risk management, etc. Consequently, this book focuses on these two dimensions, and for key tasks in each, discusses concepts and techniques that can be applied effectively on projects.
The focus of the book remains as the first course in software engineering, and it retains its character of having a running case study with most of the outputs available. This edition draws upon my experience during my sabbaticals with two software companies-Infosys Technologies and Microsoft Corporation-and my practice-oriented book Software Project Management in Practice (Addison-Wesley, 2002) to bring, in addition to the concepts, more elements of how these concepts are actually applied in practice.
In this edition, new material has been added on current practices, out dated material has been removed, and discussion has been sharpened. The following key additions have been made:
In "Software Process" a discussion on the timeboxing model for iterative development and on inspection process
In "Requirements Analysis and Specification" a description of Use Cases
A new chapter on "Software Architecture"
In "Project Planning" some practical techniques for estimation, scheduling, tracking, risk management, etc.
In "Object Oriented Design", discussion on UML and on concepts like cohesion, coupling, and open-closed principle
In "Coding" many additions have been made. These include refactoring, test driven development, and pair programming, as well as a discussion on common coding defects, coding standards, and some useful coding practices.
In "Testing" a discussion on pair-wise testing as an approach for functional testing, defect tracking, and defect analysis and prevention
In addition to the old case study, a new case study has been added. Various work products of the case studies, including the SRS, architecture document, project plan, design document, code, and test plan, have been made available through the Web site.
A Web site has been created for this edition. In addition to outputs of the case studies, implementations of some of some of the examples are also available from the site. The site will soon include presentation slides for teaching, as well as other instructional material like examples and illustrative studies. The URL of the website is:
http://www.cse.iitk.ac.in/Jalote-SEbook
I would like to express my gratitude to many people who helped me in preparing the case study. These include Kapil Narula, Ragesh Jaiswal, Vivek Pandey, Nilesh Lunawat, and Rajneesh Malviya. My special thanks to Vipindeep Vangala and Raghu Lingampally whose help in manuscript and Web site preparation allowed me to focus on the contents.
Pankaj Jalote
An Integrated Approach to Software Engineering introduces software engineering to advanced-level undergraduate and graduate students of computer science. It emphasizes a case-study approach whereby a project is developed through the course of the book, illustrating the different activities of software development. The sequence of chapters is essentially the same as the sequence of activities performed during a typical software project. All activities, including quality assurance and control activities, are described in each chapter as integral activities for that phase of development. Similarly, the author carefully introduces appropriate metrics for controlling and assessing the software process.
Chapters in this revised edition, updated for today's standards, include these new features:
The text, bolstered by numerous examples and chapter summaries, imparts to the reader the knowledge, skills, practices and techniques needed to successfully execute a software project.
ISBN 0-387-20881-X
springeronline.com
Index
AAbstract data type, 310
Abstraction, 251
- data, 253
- functional, 252
Acceptance testing, 506
Accessing uninitialized memory, 395
Activity diagram, 340
Adaptive maintenance, 7
Aggregation, 314, 335
Agile approach, 46
Algorithm design, 374
All defs criterion, 493
All uses criterion, 493
Alternate statement rule, 439
Analysis, 85, 89, 149
- data flow modeling, see Structured analysis
- for Case Study 1 (Scheduling), 152
- for Case Study 2 (PIMS), 156
- informal approach, 90
- level of detail, 87
- object-oriented analysis, see Objectoriented analysis
- problem partitioning, 89
- projection, 89
- prototyping, see Prototyping
- similarity with design, 87
- structured analysis, see Structured analysis
- transition to specification, 87, 117
Architecture, see Software architectureArchitecture description language, 193
Assignment axiom, 438
Associations, 105
Axiomatic approach for verification, 437
- alternate statement rule, 439
- an example, 441
- assignment axiom, 438
- iteration rule, 440
- loop invariant, 441
- post condition, 437
- pre condition, 437
- program specification, 438
- rule of composition, 439
- rule of consequence, 440
BBase class, 315
Behavioral testing, see Black-box testing
Black-box testing, 472
- boundary value analysis, 475
- cause effect graphing, 477
- equivalence class partitioning, 473
- error guessing, 483
- example, 475, 476, 478, 481, 485
- pair-wise testing, 480
- state-based testing, see State-based testingBottom up design, 254
Bottom-up approach to coding, 409
Boundary value analysis, 475
- an example, 476
- selecting test cases, 476
Branch testing, 489
Buffer overflow, 397
Bug, see Fault, ErrorBuild process, 416
CCapability Maturity Model, 15, 70
Case study 1 (Scheduling)- design analysis, 299
- design metrics, 299
- development process, 245
- estimation, 245
- implementation of 00
- design, 463
- implementation of the function-oriented design, 462
- object-oriented design, 364
- problem analysis, 152
- project planning, 245
- software architecture, 203
- structured design, 294
- test plan, 539
Case study 2 (PIMS)
- development process, 246
- estimation, 246
- implementation of the design, 463
- object-oriented design, 368
- problem analysis, 156
- project planning, 246
- software architecture, 203
- test plan, 540
Causal analysis of defects, 517
Cause effect graphing, 477
- an example, 478
- selecting test cases, 479
Cause-effect diagram, 518
- an example, 520
- steps for constructing, 518
Central transforms, 270
Change request frequency, 148
Chief programmer team, 224
Class, 104, 307, 309
- container, 346
- hierarchy, 316
- inheritance, see Inheritance
- methods, 311
- operation types, 310
- relationship to abstract data types 310
- relationship to objects, 310
- state modeling, 378
Class diagram, 104, 331
- drug store example, 105
- restaurant example, 111
Client-server interaction of objects, 312
Client-server style, 181
COCOMO, 215
- cost driver attributes, 216
- distribution with phases, 216
- effort multipliers, 216
- example, 218
- project types, 215
- schedule distribution, 221
- schedule estimation, 220
Code inspection, 429
Code inspection checklist, 429
Code reading, 430
Code verification, 429, 457
- code reading, 430
- combining different techniques, 451
- cost effectiveness of techniques, 450
- dynamic analysis, 431
- effectiveness of different techniques, 450
- formal verification, see Axiomatic approach for verification
- inspection, 429
- model checking, 431
- static analsyis, see Static analysis
- unit testing, see Unit testingCoding, 19, 391
- bottom-up approach, 409
- errors, see Coding errors
- goal of, 391
- incremental coding, 410
- of function-oriented design of case study 1, 462
- of OO design of the case study 1, 463
- of OO design of the case study 2, 463
- pair programming, 413
- process, 409
- refactoring, see Refactoring
- test driven development, 411
- top-down approach, 409
Coding errors
- accessing unitialized memory, 395
- arithmetic exceptions, 396
- array index out of bounds, 396
- buffer overflow, 397
- enumerated data type, 396
- freeing an already freed resource,
- lack of unique addresses, 395
- memory leaks, 393
- NULL dereferencing, 394
- off by one, 396
- string handling, 397
- synchronization, 395
Coding standards, 406
- commenting and layout, 408
- conventions for statements, 407
- conventions on files, 407
- naming conventions, 406
Cohesion, 257, 325, 359
- determining, 260
- levels, 258
Cohesion metric, 387
Collaboration diagram, 337
Combinatorial testing, 481
Commenting, 408
Communicating processes style, 183
Comparison of different V&V techniques, 449
Competent programmer hypothesis, 499
Complexity metrics, 453
Component and connector view, 167, 188, 200
- blackboard style, 179
- client-server style, 181
- communicating processes style, 183
- component types, 169
- components, 167
- connector implementation, 171
- connector type, 170
- connectors, 169
- example, 172
- n-tier structure, 181
- object-oriented style, 182
- peer-to-peer style, 182
- pipe and filter style, 176
- pipe and filter style example, 178
- publish-subscribe style, 182
- shared data style example, 179
- shared-data style, 178
- styles, 176, 200
Configuration management, see Software configuration management Consistency checkers, 382
Constructor of an object, 310
Container classes, 346
Context diagram, 97, 99
Control flow based testing
- an example, 495
- criteria, 488
Control flow graph, 383, 384, 488
Corrective maintenance, 6
Correctness of design, 248
Cost estimation, see EstimationCost of correcting errors, 35
Cost of fixing requirement errors, 83
Cost schedule milestone graph, 240
Coupling, 255, 323, 358
- between classes, 358
Coupling effect, 499
Coverage analysis, 503
Critical design review, 381
Cross referencing of requirements, 141
Cyclomatic complexity, 383
Cyclomatic complexity based testing, 491
DData abstraction, 253
Data bindings, 386
Data dictionary, 91, 94
- example, 94
- restaurant example, 101
Data flow based testing, 491
- all defs criterion, 493
- all uses criterion, 493
- an example, 495
- def/use graph, 492
Data flow diagram, 91, 267, 346
- common errors, 95
- conventions, 92
- example, 91
- leveled, 94
- restaurant example, 99, 100
- rules for construction, 93
Data flow modeling, see Structured analysisDebugging, 444
Def/use graph, 492
Defect, 14
- classification, 514
- closure, 515
- life cycle, 513
- logging and tracking, 513
- prevention, see Defect prevention
- severity, 514
- severity classification, 514
- types, 514
Defect arrival and closure trends, 515
Defect distribution, 35
Defect injection and removal cycle, 227
Defect prevention, 36, 516
- an example, 520
- at organization level, 516
- at project level, 516
- causal analysis, 517
- cause-effect diagram, 518
- Pareto analysis, 517
- root cause analysis, 520
- solutions, 520
Defect removal efficiency, 522
Defects, 239
Delphi approach, 236
Depth of inheritance tree, 357
Design, 18
- architecture, see Software architecture- detailed, see Detailed design
- high level, see System designDesign analysis of the case study, 299
Design constraints, 122
Design heuristics, 276
Design methodology, 248
Design metrics, 283
- graph impurity, 284
- identifying error prone modules, 289
- information flow metrics, 288
- network metrics, 284
- of object-oriented design, see OOD Metrics
- stability, 285
Design principles, 248
Design review, 281, 381
Design review checklist, 282, 381
Design specification, 260, 265
Design verification, 281
Design walkthrough, 380
Desk review, 431
Destructor of an object, 310
Detailed design, 18, 247, 371, 388
- algorithm design, 374
- PDL, 371
- state modeling of classes, 378
- stepwise refinement, 375
- verification, 380
Detailed design review, 381
Development process, 16, 27, 37
- a step, 29
- agile approach, 46
- comparison of models, 50
- entry criteria for a step, 30
- ETVX specification, 30
- exit criteria for a step, 30
- extreme programming, 46
- iterative development, see Iterative development
- iterative enhancement model, 44
- prototyping, see Prototyping
- rational unified process, 46
- spiral model, 45
- timeboxing model, see Timeboxing model
- waterfall model, see Waterfall modelDynamic analysis, 431
Dynamic binding, 322
Dynamic modeling, 343
EEfficiency, 13
Efficiency of design, 249
Effort, 239
Effort estimation, see Estimation
Encapsulation, 307
Equivalence class partitioning, 473
- an example, 475
- selecting test cases, 474
ER diagram, 104
Error, 465, see also DefectError guessing, 483
Error report, 512
Errors in coding, see Coding errorsEstimation, 208, 242
- a bottom-up approach example, 21
- bottom-up approach, 213
- building models, 211
- COCOMO, see COCOMO
- delphi approach, 209
- for case study 1 (Scheduling), 245
- models, 211
- multivariable models, 215
- person-months, 209
- single variable models, 211
- size estimation, 212
- top-down approach, 212
- uncertainties, 209
Exhaustive testing, 470
External interface requirements, 123
Extreme programming, 46, 413, 417
FFactoring, 267, 273
Failure, 466
Failure intensity, 523
Fan-in of modules, 276
Fan-out of modules, 276
Fault, see also Error, Defect
- multi-mode, 481
- single-mode, 480
Fault tolerance, 123
Finite state automata, 379
Fishbone diagram, 519
- an example, 520
Formal verification of programs, see Axiomatic approach for verificationFunction point analysis, 142
- advantages, 146
- drawbacks, 146
- parameter complexity, 143
- parameters, 143
- relationship to LOC, 145
- unadjusted function points, 144
- weights, 144
Function-oriented design, 247
Function-oriented design of the case study, 294
Functional abstraction, 252
Functional modeling, 345
Functional requirements, 121
Functional testing, see Black-box testingFunctionality, 13
GGeneric types, 347
Graph impurity metric, 284
HHalstead's measures, 452, 454
Hardware-software cost, 4
High level design, see System design
IIdentifying redundancies in code, 432
Impact analysis, 68
Incremental development, 410, 445, 457
- refactoring, see Refactoring
- test driven development, 411
Industrial strength software, 2, 3, 22
Inflow of a module, 288
Information flow metrics, 288
Information hiding, 401, 402
Inheritance, 104, 315
- base class, 315
- class hierarchy, 316
- multiple, 320
- non-strict, 320
- repeated, 321
- strict, 319
- subclass, 315
- superclass, 315
Inspection process, 54, 74, 429
- checklists, 56
- defect log, 58
- experiments to evaluate benefits, 61
- group review meeting, 56
- guidelines for work products, 60
- moderator, 55
- moderator responsibilities, 59
- overview and preparation, 55
- planning, 55
- reviewer responsibilities, 60
- rework and follow up, 58
- roles and responsibilities, 59
- scribe, 57
- self-preparation log, 56
- self-review, 56
- some characteristics, 54
- summary report, 58
- summary report example, 58
Integration testing, 506
Interaction diagram, 336
Internal documentation of programs, 408
Iron triangle, 15
Ishikawa diagram, 518
ISO9000, 15
Iterative development, 74
- iterative enhancement model, 44
- spiral model, 45
- strengths, weaknesses, and applicability, 50
- timeboxing model, see Timeboxing modelIterative enhancement model, 44
KKnot count, 455
LLack of cohesion in methods, 359
Layers of abstraction, 254
Least squares approach, 529
Leveled data flow diagram, 94
Levels of testing, 505
Life cycle of a defect, 513
Liskov substitution principle, 329
Live variables, 454
Logic design of modules, 374
Loop invariant, 441
MMaintainability, 13
Maintenance, 6
- adaptive, 7
- corrective, 6
- costs, 7
Manpower ramp-up in a project, 220
Mean time to failure, 523
Measurements
- defects, 239
- effort, 239
- size, 239
Memory leaks, 393
Methods of a class, 311
Metrics, 21, 383, 451
- cohesion metric, 387
- complexity measures, 453
- cyclomatic complexity, 383
- data bindings, 386
- defect removal efficiency, 522
- for design, see Design metrics
- for object-oriented design, see Metrics for OOD
- function points, see Function point analysis
- graph impurity, 284
- Halstead's, 452
- information flow metrics, 288
- knot count, 455
- live variables, 454
- network metrics, 284
- process metrics, 21
- product metrics, 21
- productivity, 522
- reliability, 521
- size measures, see Size
- span, 455
- stability, 285
- text size, 142
- topological complexity, 456
Metrics analysis of the case study design, 299
Metrics for OOD, 356, 361
- coupling between classes, 358
- depth of inheritance tree, 357
- lack of cohesion in methods, 359
- number of children, 358
- response for a class, 359
- weighted methods per class, 356
Model checking, 431
Modularity, 253, 291
Module size, 403
Monitoring and control, 242
Most abstract inputs, 269
Most abstract outputs, 269
Multi-mode faults, 481
Multiple inheritance, 320
Musa's basic model, see Reliability modelMutation testing, 498
- competent programmer hypothesis, 499
- coupling effect, 499
- mutants, 499
- mutation operators, 499
- performance, 501
NNesting of constructs, 403
Network metrics, 284
Newton-Raphson method, 531
NULL dereferencing, 394
OObject, 307
- behavior, 308
- constructor, 310
- destructor, 310
- identity, 309
- interface, 307
- relationships between, 312
- state, 308
Object modeling technique, 341, 342
Object-oriented analysis, 103, 342
- aggregation, 104
- assembly, 104
- associations, 105
- attributes, 108
- class, 104
- class diagram, see Class diagram
- defining services, 109
- generalization-specialization, 104
- identifying associations, 109
- identifying attributes, 108
- identifying classes, 107
- identifying structures, 108
- inheritance, 104
- methodology, 107
- relationship to design, 304
- relationship to ER diagram, 104
- restaurant example, 110
- services, 104
- transition to design, 305
- UML, see UMLObject-oriented design, 303
- aggregation, 314
- association between objects, 313
- class diagram, 342
- class hierarchy, 316
- cohesion, 325
- coupling, 323
- defining internal classes and operations, 346
- design guidelines, 329
- design patterns, 303
- dynamic modeling, 343
- functional modeling, 345
- Liskov substitution principle, 329
- methodology, 341
- metrics, see Metrics for OOD
- of case study 1 (Scheduling), 364
- of case study 2 (PIMS), 368
- open-closed principle, 327
- optimization, 347
- rate of returns example, 352
- relationship to analysis, 304
- state modeling of classes, 378
- UML, see UML
- word counting example, 349
OOP testing
- state based testing, 445
Open-closed principle, 327
Operational profile, 524
Orthogonal defect classification, 514
Outflow of a module, 288
PPair programming, 413
Pair-wise testing, 480, 481
- an example, 481
- generating test cases, 482
- objective, 481
Pareto analysis of defects, 517
- an example, 517
Partial correctness, 443
Path testing, 490
Peak team size, 220
Peer-to-peer style, 182
Performance requirements, 122
Pipe and filter style, 176
- example, 178
Polymorphism, 315, 321
Portability, 13
Post condition, 437
Postmortem analysis, 53
Pre condition, 437
Predictability of a Process, 31
Problem analysis, see AnalysisProblem of scale, 9
Problem partitioning, 89, 250
Process, see Software processProcess design language (PDL), 371
Process improvement, 36
Process management, 28, 69
- software engineering process group, 28
Process management process, 75
Process model, 26, 37, 73
Process planning, 208
Process Predictability, 31
Process tailoring, 27, 208
Process under statistical control, 32
Productivity, 1, 3, 4, 12, 522
Programmer time distribution, 33
Programming practices, 392, 402
- checking read return value, 404
- coding standards, see Coding standards
- control constructs, 402
- correlated parameters, 405
- empty if, while, 404
- importance of exceptions, 406
- information hiding, 402
- nesting of constructs, 403
- return from finally block, 405
- robustness, 403
- side effects, 403
- switch case with default, 404
- trusted data sources, 405
- use of gotos, 402
- use of user defined types, 402
Programming principles, 392
Project management, 10, 20, 27, 52, 74
- cost estimation, see Estimation
- monitoring and control, see Project monitoring and control- planning, see Project planning, see Project planning
- postmortem analysis, 53
- process, 52
- project monitoring, 52
- project tracking, 52
- quality, see Quality plan
- relationship with development process, 54
- risk management, see Risk management
- scheduling, see Project schedulingProject monitoring and control, 52, 237
- activity-level monitoring, 240
- cost schedule milestone graph, 240
- measurements, 239
- milestone analysis, 240
- status reports, 240
Project planning, 20, 52, 207
- case study 1 (Scheduling), 245
- case study 2 (PIMS), 246
- chief programmer team, 224
- democratic teams, 225
- effort estimation, see Estimation
- manpower ramp-up, 220
- peak team size, 220
- process planning, 208
- quality plan, 226, 229
- risk management, see Risk management
- schedule, see Project scheduling
- team structure, 224
Project scheduling, 219, 242
- an example, 223
- detailed schedule, 221
- distribution among different phases, 221
- estimation, 219
- flexibility, 219
- Microsoft project, 222
- milestones, 220
- overall schedule estimation, 219
- square root check, 220
Project tracking, 52
Projection, 89
Prototyping, 41, 74, 113
- cost, 42, 115
- cost-cutting methods, 42
- design prototype, 113
- development, 115
- evolutionary, 113
- horizontal, 114
- process, 41
- process suitability, 43
- restaurant example, 116
- selecting requirements, 114
- strengths, weaknesses, and applicability, 50
- throwaway, 41, 113
- vertical, 115
Proving correctness, see Axiomatic approach for verificationPsychology of testing, 471
Publish-subscribe style, 182
QQuality, 5, 12, 13, 82, 465
- defect injection and removal cycle, 227
- management approaches, 228
- procedural approach, 228
- quantitative management approach, 229
- using statistical process control, 229
Quality and productivity, Q&P, 15
Quality attributes, 12
Quality plan, 226, 229
RRational unified process, 46
Rayleigh curve, 220
Refactoring, 416
- an example, 419
- bad smells, 422
- impact on design, 418
- objective, 417
- risk mitigation, 418
- test suite, 418
- to improve classes, 426
- to improve hierarchies, 427
- to improve methods, 425
- unit testing, 420
Regression testing, 7, 506
Reliability, 6, 13, 14, 521, 522
- calendar and clock times, 524
- definition, 523
- failure intensity, 523
- mean time to failure, 523
- musa's basic model, see Reliability model
- operational profile, 524
Reliability model, 524
- an example, 532
- assumptions, 524
- failure data, 529
- parameter estimation, 529
- transition to calendar time, 532
Repeated inheritance, 321
Requirement analysis, see AnalysisRequirement change, 8, 15, 28, 84, 148
- change request, 68
- impact analysis, 68
- management process, 67, 148
Requirement errors, 82
Requirement metrics, 142, 150
- change request frequency, 148
- function points, see Function point analysis
- number of errors found, 147
- quality, 147
- text size, 142
Requirement specification, 81, 117, 159
- components, 120
- design constraints, 122
- desired characteristics, 118
- document structure, 125
- external interface requirements, 123
- functional requirements, 121
- IEEE standards, 125
- performance requirements, 122
- specification language, 124
- use cases, see Use casesRequirement validation, 138
- cross-referencing, 141
- error types, 139
- review checklist, 140
- reviews, 140
Requirements, see Software requirementsRequirements activity, 80
Requirements review, 140
Restaurant example, 99, 110, 116
Reviews, see Inspection process Rework, 7, 8, 84
Risk management, 230, 242
- a practical approach, 237
- activities, 231
- an example, 237
- checklists of frequently occuring risks, 232
- delphi approach, 236
- risk, 230
- risk analysis, 234
- risk assessment, 232
- risk control, 236
- risk exposure, 235
- risk identification, 232
- risk monitoring, 236
- risk prioritization, 234, 237
- top 10
- risks, 232
Root cause analysis of defects, 520
SScenario, 130
Scenarios for modeling, 343
Schedule, 12, 239
Security, 123, 398
Semantic objects, 305
Sequence diagram, 335
Severity of defects, 514
Shared-data style, 178
- example, 179
Side effects, 403
Single-entry, single-exit constructs, 400
Single-mode faults, 480
Size, 4, 11, 212, 239, 452
- function points, see Function point analysis
- halstead's measure, 452
- lines of code, 452
- lines of code (LOC), 1, 4
- of some products, 11
Size estimation, 212
Software, 3
- costs, 4, 12
- industrial strength software, 2
- metrics, see Metrics
- problem of scale, 9
- productivity, 4
size, see Size
student system, 2
- Software architecture, 18, 159, 199
- allocation view, 165
- analysis, see Software architecture evaluation
- behavior description, 192
- blackboard style, 179
- case study 1 (Scheduling), 203
- case study 2 (PIMS), 203
- client-server style, 181
- combining views, 193
- communicating processes style, 183
- component and connector view, see Component and connector view
- definition, 160
- deployment view, 188, 340
- description, 161
- description language, 193
- designing, 200
- documenting, 190
- element catalog, 191
- elements, 164
- evaluation, see Software architecture evaluation
- example, 172
- example implementation, 185
- integrity, 185
- layered style, 182
- mismatch with implementation, 188
- module view, 164, 247
- object-oriented style, 182
- peer-to-peer style, 182
- pipe and filter style, 176
- pipe and filter style example, 178
- preserving integrity, 184
- primary view, 191
- publish-subscribe style, 182
- quality attributes, 194
- rationale, 191
- relationship among views, 165
- relationship between elements, 164
- relationship with design, 183
- role in analysis, 163
- role in communication, 161
- role in construction, 162
- role in reuse, 162
- shared data style example, 179
- shared-data style, 178
- stakeholders, 190
- styles, 200
- system context, 191
- views, 163, 165, 200
Software architecture analysis, 188
Software architecture evaluation, 194, 201
- an example, 196
- approaches, 194
- availability analysis, 198
- performance analysis, 189
- quality attributes, 194
- response time analysis, 198
- the ATAM approach, 195, 201
- tradeoffs, 196
Software configuration management, 28, 61, 62, 75, 225, 242, 414
- baselines, 64
- configuration control board, 67
- configuration controller, 67
- configuration identification, 64
- dependency between items, 64
- functionality, 63
- library management, 66
- life of an item, 65
- mechanisms, 64
- plan, 226
- process, 66
- relationship to development process, 62
- source code control, see Source code control status auditing, 67
- version control, 64
Software design, see DesignSoftware engineering, 2, 22
- definition, 8
- problem domain, 2
Software engineering process group, 28
Software fault, see Fault, Defect, ErrorSoftware inspections, see Inspection process
Software process, 16, 25, 28, 73
- characteristics, 31, 73
- components, 27
- development process, see Development process
- early defect removal, 35
- ETVX specification, 30
- improvement, see Process improvement
- inspection process, see Inspection process
- management, 28
- non-engineering processes, 25
- predictability, 31
- product engineering processes, 28
- project management process, see Project management
- requirement change management process, see Requirement change specification, 29
- support for change, 34
- tailoring, 27, 208
- under statistical control, 32
Software process improvement, 69
Software quality, see QualitySoftware Reliability, see Reliability
Software requirement process, 85
Software requirement specification, see Requirement specificationSoftware requirements, 7, 17, 79, 117, 148
- analysis, see Analysis
- case study 1 (Scheduling), 152
- case study 2 (PIMS), 156
- change, see Requirement change
- consistent, 119
- cost of fixing errors, 83
- definition, 80
- error types, 139
- errors, 82, 83, 139
- impact on development cost, 84
- impact on quality, 82
- metrics, see Requirement metrics
- modifiable, 120
- need, 81
- process, 85
- specification, see Requirement specification
- use cases, see Use cases
- validation, see Requirement validation
- verifiable, 119
Software size, see SizeSource code control, 414
- checkout, 414
- command types, 414
- conflicts, 415
- tools, 65, 414
- version maintenance, 415
Specification, 437
Specification language, 124
Spiral model, 45
Stability metrics for design, 285
Standards compliance, 123
State diagram, 340, 379
State modeling of classes, 378
- an example, 379
State-based testing, 484
- an example, 485
- coverage criteria, 486
- example of selecting test cases, 487
- of classes, 445
- selecting test cases, 485
- state model, 484
- test case selection criteria, 486
Statement coverage criterion, 489
Static analysis, 431
- by compilers, 432
- checkers, 433
- completeness, 432
- cost effectiveness, 436
- data flow anamolies, 432
- false positives, 436
- identifying redundancies, 432
- PREfix, 433
- soundness, 432
Statistical process control, 229
Stepwise refinement, 254, 375
- example, 376
Structural testing, see White-box testingStructure chart, 261, 271
- an example, 261
- decision representation, 263
- iteration representation, 263
- module types, 263
- of the case study, 297
Structured analysis, 91
- context diagram, 97
- data dictionary, 91
- data flow diagram, 91
- man-machine boundary, 98
- methodology, 96
- modeling the current system, 97
- restaurant example, 99
Structured design methodology, 266, 291
- applying to case study, 294
- central transforms, 270
- design heuristics, 276
- factoring, 267, 273
- first level factoring, 271
- most abstract input, 269
- most abstract output, 269
- steps, 267
- transaction analysis, 277
- transform analysis, 277
Structured programming, 398, 457
Superclass, 315
System design, 18, 247
- abstraction, 251
- bottom up approach, 254
- correctness, 248
- efficiency, 249
- function-oriented design, see Structured design methodology
- modularity, 253
- object-oriented design, see Objectoriented design
- principles, 248
- problem partitioning, 250
- simplicity, 249
- specification, 265
- top down approach, 254
- verification, see Design verificationSystem testing, 506
TTeam structure, 224
Test case generation, 502
Test case review, 510
Test case specification, 509
Test criterion, 470
- generating test cases, 470
- inclusion or subsumption, 470
- reliability, 470
- validity, 470
Test driven development, 411, 417, 457
Test oracle, 468
Test plan, 507
- of case study 1, 539
- of case study 2, 540
Test summary report, 512
Testing, 3, 19, 465
- acceptance testing, 20, 506
- black-box, see Black-box testing
- defect logging, 513
- deliverables, 509
- error report, 20, 512
- exhaustive, 470
- functional, see Black-box testing
- integration testing, 19, 506
- levels of, 505
- mutation testing, see Mutation testing
- of object-oriented programs, 445
- process, 504
- psychology of, 471
- purpose of, 471
- regression, 7, 506
- structural testing, see White-box testing
- system testing, 19, 506
- test case execution and analysis, 511
- test case review, 510
- test case specification, 509
- test cases, 469
- test criterion, see Test criterion
- test oracle, 468
- test plan, 20, 507
- test report, 20
- test summary report, 512
- unit testing, see Unit testing
- white-box testing, see White-box testingTesting process, 504
Timeboxing model, 46, 74
- a time box, 47
- execution with three stage time box, 48
- iteration completion times, 48
- pipelined execution of iterations, 47
- stages in a time box, 47
- strengths, weaknesses, and applicability, 50
- suitability, 50
- team size, 49
- team-wise activity, 49
- teams, 49
Tool support for testing, 502
Top down design, 254
Top-down approach to coding, 409
Topological complexity, 456
Total correctness, 443
Transaction analysis, 277
Transform analysis, 277
UUML, 361
- activity diagram, 340
- aggregation, 335
- association between classes, 331
- class diagram, 331
- class hierarchy representation, 333
- collaboration diagram, 337
- components, subsystems, packages, 339
- interaction diagrams, 336
- part-whole relationship representation, 335
- sequence diagram, 335
- state diagram, 340
- stereotype, 341
- subtype, supertype relationship, 331
- tagged values, 341
- use case diagrams, 341
Unified modeling language, see UMLUnit testing, 19, 444, 458, 505
- an example, 446
- of classes, 420
- with Junit, 446
Usability, 13
Use case diagram, 131
Use cases, 128, 149
- actor, 129
- development, 136
- examples, 132, 136
- extension scenario, 130
- failure conditions, 137
- failure handling, 137
- level of detail, 138
- levels, 137
- main success scenario, 130, 137
- precondition, 132
- primary actor, 129
- refinement, 134
- scenario, 130, 343
- scope, 135
- summary level, 135
- use case diagram, 131
- writing them, 138
User-defined types, 402
VVerification and Validation (V&V), 227
Verification of code, see Code verificationVerification of detailed design, 380
WWaterfall model, 37, 74
- impact of linear ordering of phases, 38
- limitations, 40
- outputs, 38
- stages, 37
- strengths, weaknesses, and applicability, 50
Weighted methods per class, 356
Weinberg experiment, 392
White-box testing, 487
- an example, 495
- branch testing, 489
- control flow based, 488
- cyclomatic complexity based testing, 491
- data flow based, 491
- mutation testing, see Mutation testing
- path testing, 490
- statement coverage criterion, 489
- test case generation, 502
- tool support, 502
Work products, 29, 38
From the reviews of the third edition: "Engineering and project management are the two major types of skills required in software engineering. This book discusses those skills. ... The book is well written and well organized; it starts with the most basic software engineering concepts, and then goes gradually toward the most advanced ones. The book ends with a comprehensive index, and an up-to-date list of references. I can recommend this book for all teachers who want to present a first course in software engineering for graduate students." (Soraya Kouadri Mostefaoui, ACM Computing Reviews, Vol. 49 (3), March, 2008)