Foreword |
|
xiii | |
The Author |
|
xvii | |
Acknowledgments |
|
xix | |
Prologue |
|
xxiii | |
1 Introduction |
|
1 | |
|
|
1 | |
|
|
1 | |
|
1.2 The Problem of Software Change |
|
|
3 | |
|
1.3 Software Evolution and Its Challenges |
|
|
5 | |
|
|
8 | |
|
|
10 | |
PART I: CONVENTIONAL METHODS OF SOFTWARE MAINTENANCE AND EVOLUTION |
|
|
2 Static Program Analysis Methods |
|
|
15 | |
|
|
15 | |
|
2.1 Introduction to Static Program Analysis |
|
|
15 | |
|
2.2 Approaches to Static Program Analysis |
|
|
17 | |
|
2.3 How Does an SPA Work? |
|
|
19 | |
|
2.4 Source Language: SIMPLE |
|
|
20 | |
|
2.5 Program Design Abstractions for SIMPLE |
|
|
22 | |
|
2.6 Querying Programs with PQL |
|
|
33 | |
|
2.7 Design of PQL and SPA |
|
|
39 | |
|
2.8 Optimizing the Performance of Query Evaluation |
|
|
42 | |
|
|
44 | |
|
|
44 | |
|
|
45 | |
|
3 Reverse Engineering Methods |
|
|
47 | |
|
|
47 | |
|
3.1 Review of Approaches to Reverse Engineering |
|
|
47 | |
|
3.2 Incremental and Interactive Reverse Engineering Process |
|
|
49 | |
|
3.3 Recovering Object Models from Code |
|
|
51 | |
|
3.4 Object Recovery Heuristics |
|
|
53 | |
|
3.5 Semiautomatic Recovery of Abstract Objects as Candidates for Classes |
|
|
53 | |
|
3.6 A Plan for Semiautomatic Recovery of Abstract Data Types as Candidates for Classes |
|
|
54 | |
|
3.7 Specifying Reverse Engineering Heuristics in PQL |
|
|
55 | |
|
3.8 Specifying Object Recovery Heuristics for C Programs |
|
|
57 | |
|
3.9 Generation of Recovered Design Views in Extended PQL |
|
|
59 | |
|
|
61 | |
|
|
61 | |
|
4 Model-Based Design for Ease of Maintenance |
|
|
67 | |
|
|
67 | |
|
4.1 The Role of Models in the Design of Software Tools |
|
|
67 | |
|
4.2 The Concept of Model-Based Design |
|
|
68 | |
|
4.3 Model-Based PQL Query Validator in SPA and REA |
|
|
70 | |
|
4.4 Model-Based Design of the PQL Query Evaluator in SPA and REA |
|
|
72 | |
|
4.5 Model-Based Design of a Software Project-Support Environment |
|
|
73 | |
|
|
91 | |
|
|
92 | |
|
5 Evolution of Versions and Configuration Management |
|
|
95 | |
|
|
95 | |
|
5.1 A Working Example: FRS Evolution |
|
|
96 | |
|
5.2 FRS Component Architecture |
|
|
97 | |
|
5.3 Evolution of FRS with CVS |
|
|
99 | |
|
5.4 Reuse of Features Implemented in Past Releases When Building New System Releases |
|
|
101 | |
|
5.5 Adding New Features to a System Release |
|
|
104 | |
|
5.6 Selective Propagation of New Features to Past Releases |
|
|
105 | |
|
5.7 The Visibility of Changes during Evolution |
|
|
105 | |
|
5.8 Explosion of Variant Features and Feature Dependencies |
|
|
106 | |
|
|
107 | |
|
|
107 | |
|
|
108 | |
|
|
109 | |
|
6 Limits of Conventional Techniques |
|
|
111 | |
|
|
111 | |
|
6.1 Software Complexity Factor |
|
|
112 | |
|
6.2 Tackling Software Evolution Challenges |
|
|
114 | |
|
|
117 | |
|
|
118 | |
PART II: REUSE-BASED SOFTWARE MAINTENANCE AND EVOLUTION |
|
|
7 The Mixed-Strategy Approach: An Overview |
|
|
125 | |
|
|
125 | |
|
7.1 Concepts of Reuse-Based Evolution |
|
|
126 | |
|
7.2 Change-Design versus Design for Change |
|
|
127 | |
|
7.3 Concepts of the Mixed-Strategy Approach |
|
|
128 | |
|
7.4 A Preview of the Mixed-Strategy Approach: An Example |
|
|
131 | |
|
7.5 The Role of Genericity in the Mixed-Strategy Approach |
|
|
136 | |
|
|
138 | |
|
|
138 | |
|
8 Step-by-Step Introduction to XVCL |
|
|
141 | |
|
|
141 | |
|
8.1 Salient Features of XVCL |
|
|
142 | |
|
8.2 Flexible Composition of X-Frames |
|
|
144 | |
|
8.3 Defining Compositions with XVCL |
|
|
146 | |
|
8.4 Specifying Small-Granularity Changes |
|
|
153 | |
|
8.5 Changes at Various Abstraction Levels |
|
|
156 | |
|
8.6 Defining Generic Structures and Generators |
|
|
157 | |
|
8.7 Capturing Change Traces and Similarity Patterns in Evolutionary Changes |
|
|
159 | |
|
8.8 Handling Implementation Dependencies among Features |
|
|
161 | |
|
8.9 Summary of XVCL Rules |
|
|
162 | |
|
|
176 | |
|
|
177 | |
|
9 Software Similarities: Symptoms and Causes |
|
|
179 | |
|
|
179 | |
|
9.1 The Problem of Software Similarities and Cloning |
|
|
180 | |
|
9.2 Software Similarities and Reuse |
|
|
183 | |
|
9.3 Software Similarities and Generic Design |
|
|
184 | |
|
9.4 Software Similarities, Genericity, and Software Complexity |
|
|
185 | |
|
9.5 Similarity Patterns in the Buffer Library: An Example |
|
|
189 | |
|
9.6 Similarity Patterns and Clones in STL |
|
|
202 | |
|
9.7 Similarity Patterns in Application Programs |
|
|
203 | |
|
|
209 | |
|
9.9 Identifying Similarity Patterns and Automated Detection of Clones |
|
|
210 | |
|
|
212 | |
|
|
212 | |
|
10 The Mixed-Strategy Approach to Generic Design |
|
|
217 | |
|
|
217 | |
|
10.1 Buffer Library in Java/XVCL Mixed-Strategy Representation |
|
|
218 | |
|
10.2 Evaluation of the Mixed-Strategy Buffer Library Solution |
|
|
228 | |
|
|
234 | |
|
|
236 | |
|
11 Evolution with the Mixed-Strategy Approach |
|
|
237 | |
|
|
237 | |
|
|
237 | |
|
11.2 Stages of FRS Evolution |
|
|
239 | |
|
11.3 An Overview of the FRS X-Framework |
|
|
240 | |
|
11.4 Development of a New System Release |
|
|
243 | |
|
11.5 Specifying Changes for FRSDATE |
|
|
244 | |
|
11.6 Specifying Changes for FRSUSER and FRSDATE,USER |
|
|
246 | |
|
11.7 Specifying Changes for FRSDATE,USER,PREF |
|
|
251 | |
|
11.8 Specifying Changes for FRSDATE,USER,PAY |
|
|
252 | |
|
11.9 Specifying Changes for FRSDATE,USER,PREF,PAY |
|
|
255 | |
|
11.10 Specifying Changes for FRSDATE,USER,PAY,BR |
|
|
255 | |
|
11.11 Specifying Changes for FRSDATE,USER,PAY,BR,BRD |
|
|
257 | |
|
11.12 Specifying Changes for FRSUSER,BR |
|
|
257 | |
|
11.13 Specifying Changes for FRSUSER-PD BR |
|
|
258 | |
|
|
258 | |
|
12 Scaling Up the Mixed-Strategy Approach |
|
|
261 | |
|
|
261 | |
|
|
261 | |
|
12.2 Modeling Features Arising during Evolution |
|
|
262 | |
|
12.3 A Mixed-Strategy Evolution Support Environment (MESE) |
|
|
271 | |
|
12.4 An FRS Architecture with Connectors |
|
|
273 | |
|
12.5 Generic Connectors in the FRS X-Framework |
|
|
273 | |
|
12.6 Comments on X-Framework Organization Principles |
|
|
275 | |
|
12.7 An Overview of the X-Framework Customization Process |
|
|
278 | |
|
12.8 Customization and Assembly Passes over an X-Framework |
|
|
280 | |
|
12.9 Using the Customization Decision Tree (CDT) |
|
|
282 | |
|
12.10 Using MESE to Customize and Evolve the FRS X-Framework: An Example |
|
|
282 | |
|
|
289 | |
|
12.12 Related Work on Product Line Research |
|
|
291 | |
|
|
291 | |
|
|
292 | |
|
13 The Mixed-Strategy Approach in Other Projects |
|
|
295 | |
|
|
295 | |
|
|
296 | |
|
|
296 | |
|
13.3 Web Portal Product Line in ASP/XVCL |
|
|
298 | |
|
13.4 CAP-WP in J2EE/XVCL |
|
|
301 | |
|
13.5 Role-Playing Games (RPG) for Mobile Phones |
|
|
302 | |
|
|
304 | |
|
|
305 | |
|
14 Other Techniques Related to XVCL |
|
|
307 | |
|
|
307 | |
|
|
307 | |
|
14.2 Conventional Techniques |
|
|
308 | |
|
14.3 Generation Techniques |
|
|
311 | |
|
14.4 Separation of Concerns and Its Relation to Generic Design |
|
|
312 | |
|
|
316 | |
|
|
316 | |
|
15 Evaluation of the Mixed-Strategy Approach |
|
|
319 | |
|
|
319 | |
|
15.1 Summary of the Mixed-Strategy Approach |
|
|
319 | |
|
15.2 The Mixed-Strategy Process |
|
|
320 | |
|
15.3 Trade-Offs Involved in Applying the Mixed-Strategy Approach |
|
|
322 | |
|
|
326 | |
|
|
326 | |
|
|
329 | |
Appendix A: Summary of PQL Grammar Rules |
|
331 | |
Appendix B: Program Design Models for COBOL85 |
|
333 | |
Appendix C: XVCL Specifications A Reference Manual |
|
339 | |
Index |
|
387 | |