6.5.1 Recall and Precision of Change Propagation Heuristics, 243
6.5.2 Heuristics for Change Propagation, 245
6.5.3 Empirical Studies, 246
6.6 Summary, 247
Literature Review, 248
References, 249
Exercises, 253
7 Refactoring 255
7.1 General Idea, 255
7.2 Activities in a Refactoring Process, 258
7.2.1 Identify What to Refactor, 258
7.2.2 Determine Which Refactorings Should be Applied, 259
7.2.3 Ensure that Refactoring Preserves the Behavior of the Software, 261
7.2.4 Apply the Refactorings to the Chosen Entities, 262
7.2.5 Evaluate the Impacts of the Refactorings on Quality, 263
7.2.6 Maintain Consistency of Software Artifacts, 265
7.3 Formalisms for Refactoring, 265
7.3.1 Assertions, 265
7.3.2 Graph Transformation, 266
7.3.3 Software Metrics, 267
7.4 More Examples of Refactorings, 271
7.5 Initial Work on Software Restructuring, 273
7.5.1 Factors Influencing Software Structure, 273
7.5.2 Classification of Restructuring Approaches, 275
7.5.3 Restructuring Techniques, 276
7.6 Summary, 282
Literature Review, 283
References, 286
Exercises, 288
8 Program Comprehension 289
8.1 General Idea, 289
8.2 Basic Terms, 291
8.2.1 Goal of Code Cognition, 291
8.2.2 Knowledge, 291
8.2.3 Mental Model, 293
8.2.4 Understanding Code, 296
8.3 Cognition Models for Program Understanding, 298
8.3.1 Letovsky Model, 298
8.3.2 Shneiderman and Mayer Model, 301
8.3.3 Brooks Model, 303
8.3.4 Soloway, Adelson, and Ehrlich Model, 308
8.3.5 Pennington Model, 310
8.3.6 Integrated Metamodel, 312
8.4 Protocol Analysis, 315
8.5 Visualization for Comprehension, 317
8.6 Summary, 321
Literature Review, 321
References, 322
Exercises, 324
9 Reuse and Domain Engineering 325
9.1 General Idea, 325
9.1.1 Benefits of Reuse, 327
9.1.2 Reuse Models, 327
9.1.3 Factors Influencing Reuse, 328
9.1.4 Success Factors of Reuse, 329
9.2 Domain Engineering, 329
9.2.1 Draco, 331
9.2.2 DARE, 331
9.2.3 FAST, 331
9.2.4 FORM, 331
9.2.5 KobrA, 332
9.2.6 PLUS, 332
9.2.7 PuLSE, 332
9.2.8 Koala, 332
9.2.9 RSEB, 332
9.3 Reuse Capability, 333
9.4 Maturity Models, 334
9.4.1 Reuse Maturity Model, 334
9.4.2 Reuse Capability Model, 336
9.4.3 RiSE Maturity Model, 338
9.5 Economic Models of Software Reuse, 340
9.5.1 Cost Model of Gaffney and Durek, 346
9.5.2 Application System Cost Model of Gaffney and Cruickshank, 348
9.5.3 Business Model of Poulin and Caruso, 350
9.6 Summary, 352
Literature Review, 352
References, 353
Exercises, 356
Glossary 359
Index 379
Provides students and engineers with the fundamental developments and common practices of software evolution and maintenance
Software Evolution and Maintenance: A Practitioner’s Approach introduces readers to a set of well-rounded educational materials, covering the fundamental developments in software evolution and common maintenance practices in the industry. Each chapter gives a clear understanding of a particular topic in software evolution, and discusses the main ideas with detailed examples. The authors first explain the basic concepts and then drill deeper into the important aspects of software evolution. While designed as a text in an undergraduate course in software evolution and maintenance, the book is also a great resource forsoftware engineers, information technology professionals, and graduate students in software engineering. Based on the IEEE SWEBOK (Software Engineering Body of Knowledge) Explains two maintenance standards: IEEE/EIA 1219 and ISO/IEC14764 Discusses several commercial reverse and domain engineering toolkits Slides for instructors are available online Software Evolution and Maintenance: A Practitioner’s Approach equips readers with a solid understanding of the laws of software engineering, evolution and maintenance models, reengineering techniques, legacy information systems, impact analysis, refactoring, program comprehension, and reuse.