| Foreword | 5 |
|---|
| Foreword | 7 |
|---|
| Preface | 15 |
|---|
| Book Overview | 16 |
| Part 1: Introduction | 16 |
| Part 2: Uses of Rationale | 17 |
| Part 3: Rationale and Software Engineering | 18 |
| Part 4: Frameworks for Using Rationale in Software Engineering | 19 |
| Acknowledgements | 20 |
| Author Biographies | 21 |
|---|
| Contents | 25 |
|---|
| Part 1 Introduction | 34 |
|---|
| 1 What is Rationale and Why Does It Matter? | 35 |
| 1.1 Introduction | 35 |
| 1.1.1 The Scope and Value of Rationale in Software Engineering | 35 |
| 1.1.2 Objectives of This Chapter | 37 |
| 1.2 A Rough Sketch of Research on Rationale | 37 |
| 1.2.1 Argumentative Approaches to Rationale | 37 |
| 1.2.2 Rationale Methods That Go Beyond Argumentation | 44 |
| 1.3 Why Rationale Matters | 45 |
| 1.3.1 The Usefulness of Rationale for Artifact Creation | 45 |
| 1.3.2 The Usefulness of Rationale for Software Engineering | 48 |
| 1.4 Summary and Conclusions | 54 |
| 2 What Makes Software Different | 57 |
| 2.1 Introduction | 57 |
| 2.1.1 Rationale for Software Artifacts versus Rationale for Physical Artifacts | 57 |
| 2.1.2 Objectives of This Chapter | 58 |
| 2.2 The Roles of the Computer | 58 |
| 2.2.1 Comparison of the Roles of the Computer in the Lifecycles of Physical and Software Artifacts | 59 |
| 2.2.2 The Significance for Rationale Management in Software Engineering | 60 |
| 2.3 Iteration in Development | 64 |
| 2.3.1 The Role of Iteration in Different Types of Development | 64 |
| 2.3.2 Implications of Iteration for Rationale Management in Software Engineering | 65 |
| 2.4 Summary and Conclusion | 67 |
| 3 Rationale and Software Engineering | 69 |
| 3.1 Introduction | 69 |
| 3.1.1 Software Engineering | 69 |
| 3.1.2 Software Engineering Rationale | 70 |
| 3.1.3 Objectives of This Chapter | 70 |
| 3.2 Rationale and the Software Process | 70 |
| 3.2.1 Software Process Definition and Implementation | 70 |
| 3.2.2 Rationale and SE Process Decision-Making | 71 |
| 3.3 Rationale and Project Management | 73 |
| 3.4 Rationale and Software Development | 75 |
| 3.4.1 Why Capture Software Engineering Rationale? | 75 |
| 3.4.2 What are the Uses of Software Engineering Rationale? | 76 |
| 3.4.3 When can Software Engineering Rationale be Used in Software Development? | 77 |
| 3.4.4 How Can We Support Software Engineering Rationale Use in Software Development? | 79 |
| 3.5 Summary and Conclusions | 79 |
| 4 Learning from Rationale Research in Other Domains | 81 |
| 4.1 Introduction | 81 |
| 4.1.1 Research on Rationale in other Domains | 81 |
| 4.1.2 Objectives of This Chapter | 82 |
| 4.2 Domain-Oriented Design Environments Using PHI | 82 |
| 4.2.1 PHIDIAS and JANUS | 82 |
| 4.2.2 Discussion | 85 |
| 4.3 Automating the Capture of Design Rationale with CAD | 87 |
| 4.3.1 The Rationale Capture Problem | 87 |
| 4.3.2 Solution Approach: Automating the Capture of Rationale | 88 |
| 4.3.3 Implementation: The Rationale Construction Framework | 89 |
| 4.3.4 Discussion | 90 |
| 4.4 Parameter Dependency Networks as Design Rationale | 91 |
| 4.4.1 The DRIVE System and Parameter Dependency Networks | 91 |
| 4.4.2 Discussion | 92 |
| 4.5 Case-Based Reasoning as Design Rationale | 93 |
| 4.5.1. From Automated Case-Based Reasoning to Case-Based Design Aids | 93 |
| 4.5.2 Discussion | 96 |
| 4.6 Summary and Conclusions | 98 |
| 5 Decision-Making in Software Engineering | 99 |
| 5.1 Introduction | 99 |
| 5.1.1 General | 99 |
| 5.1.1 Objectives of this Chapter | 99 |
| 5.2 Decision-Making Problems | 100 |
| 5.2.1 Where Decisions Go Wrong | 100 |
| 5.2.2 Poor Decisions in Software | 101 |
| 5.3 Naturalistic Decision-Making | 103 |
| 5.3.1 Background | 103 |
| 5.3.2 The Recognition-Primed Decision Model | 104 |
| 5.4 Rationale as a Resource for Decision-Making | 105 |
| 5.4.1 Classical Decision-Making | 106 |
| 5.4.2 Naturalistic Decision-making |