| Formatted contents note |
TABLE OF CONTENTS<br/>Preface xiii<br/><br/>List of Figures xvii<br/><br/>List of Tables xxi<br/><br/>1 Basic Concepts and Preliminaries 1<br/><br/>1.1 Evolution Versus Maintenance, 1<br/><br/>1.1.1 Software Evolution, 3<br/><br/>1.1.2 Software Maintenance, 4<br/><br/>1.2 Software Evolution Models and Processes, 6<br/><br/>1.3 Reengineering, 9<br/><br/>1.4 Legacy Systems, 11<br/><br/>1.5 Impact Analysis, 12<br/><br/>1.6 Refactoring, 13<br/><br/>1.7 Program Comprehension, 14<br/><br/>1.8 Software Reuse, 15<br/><br/>1.9 Outline of the Book, 16<br/><br/>References, 18<br/><br/>Exercises, 23<br/><br/>2 Taxonomy of Software Maintenance and Evolution 25<br/><br/>2.1 General Idea, 25<br/><br/>2.1.1 Intention-Based Classification of Software Maintenance, 26<br/><br/>2.1.2 Activity-Based Classification of Software Maintenance, 28<br/><br/>2.1.3 Evidence-Based Classification of Software Maintenance, 28<br/><br/>2.2 Categories of Maintenance Concepts, 37<br/><br/>2.2.1 Maintained Product, 37<br/><br/>2.2.2 Maintenance Types, 40<br/><br/>2.2.3 Maintenance Organization Processes, 41<br/><br/>2.2.4 Peopleware, 43<br/><br/>2.3 Evolution of Software Systems, 44<br/><br/>2.3.1 SPE Taxonomy, 46<br/><br/>2.3.2 Laws of Software Evolution, 49<br/><br/>2.3.3 Empirical Studies, 54<br/><br/>2.3.4 Practical Implications of the Laws, 56<br/><br/>2.3.5 Evolution of FOSS Systems, 58<br/><br/>2.4 Maintenance of Cots-Based Systems, 61<br/><br/>2.4.1 Why Maintenance of CBS Is Difficult?, 62<br/><br/>2.4.2 Maintenance Activities for CBSs, 65<br/><br/>2.4.3 Design Properties of Component-Based Systems, 67<br/><br/>2.5 Summary, 70<br/><br/>Literature Review, 73<br/><br/>References, 75<br/><br/>Exercises, 80<br/><br/>3 Evolution and Maintenance Models 83<br/><br/>3.1 General Idea, 83<br/><br/>3.2 Reuse-Oriented Model, 84<br/><br/>3.3 The Staged Model for Closed Source Software, 87<br/><br/>3.4 The Staged Model for Free, Libre, Open Source Software, 90<br/><br/>3.5 Change Mini-Cycle Model, 91<br/><br/>3.6 IEEE/EIA Maintenance Process, 94<br/><br/>3.7 ISO/IEC 14764 Maintenance Process, 99<br/><br/>3.8 Software Configuration Management, 111<br/><br/>3.8.1 Brief History, 112<br/><br/>3.8.2 SCM Spectrum of Functionality, 113<br/><br/>3.8.3 SCM Process, 117<br/><br/>3.9 CR Workflow, 119<br/><br/>3.10 Summary, 125<br/><br/>Literature Review, 126<br/><br/>References, 129<br/><br/>Exercises, 131<br/><br/>4 Reengineering 133<br/><br/>4.1 General Idea, 133<br/><br/>4.2 Reengineering Concepts, 135<br/><br/>4.3 A General Model for Software Reengineering, 137<br/><br/>4.3.1 Types of Changes, 140<br/><br/>4.3.2 Software Reengineering Strategies, 141<br/><br/>4.3.3 Reengineering Variations, 143<br/><br/>4.4 Reengineering Process, 144<br/><br/>4.4.1 Reengineering Approaches, 144<br/><br/>4.4.2 Source Code Reengineering Reference Model, 146<br/><br/>4.4.3 Phase Reengineering Model, 150<br/><br/>4.5 Code Reverse Engineering, 153<br/><br/>4.6 Techniques Used for Reverse Engineering, 156<br/><br/>4.6.1 Lexical Analysis, 157<br/><br/>4.6.2 Syntactic Analysis, 157<br/><br/>4.6.3 Control Flow Analysis, 157<br/><br/>4.6.4 Data Flow Analysis, 158<br/><br/>4.6.5 Program Slicing, 158<br/><br/>4.6.6 Visualization, 160<br/><br/>4.6.7 Program Metrics, 162<br/><br/>4.7 Decompilation Versus Reverse Engineering, 164<br/><br/>4.8 Data Reverse Engineering, 165<br/><br/>4.8.1 Data Structure Extraction, 168<br/><br/>4.8.2 Data Structure Conceptualization, 169<br/><br/>4.9 Reverse Engineering Tools, 170<br/><br/>4.10 Summary, 174<br/><br/>Literature Review, 176<br/><br/>References, 178<br/><br/>Exercises, 185<br/><br/>5 Legacy Information Systems 187<br/><br/>5.1 General Idea, 187<br/><br/>5.2 Wrapping, 189<br/><br/>5.2.1 Types of Wrapping, 189<br/><br/>5.2.2 Levels of Encapsulation, 191<br/><br/>5.2.3 Constructing a Wrapper, 192<br/><br/>5.2.4 Adapting a Program for Wrapper, 194<br/><br/>5.2.5 Screen Scraping, 194<br/><br/>5.3 Migration, 195<br/><br/>5.4 Migration Planning, 196<br/><br/>5.5 Migration Methods, 202<br/><br/>5.5.1 Cold Turkey, 202<br/><br/>5.5.2 Database First, 203<br/><br/>5.5.3 Database Last, 204<br/><br/>5.5.4 Composite Database, 205<br/><br/>5.5.5 Chicken Little, 206<br/><br/>5.5.6 Butterfly, 208<br/><br/>5.5.7 Iterative, 212<br/><br/>5.6 Summary, 217<br/><br/>Literature Review, 218<br/><br/>References, 219<br/><br/>Exercises, 221<br/><br/>6 Impact Analysis 223<br/><br/>6.1 General Idea, 223<br/><br/>6.2 Impact Analysis Process, 225<br/><br/>6.2.1 Identifying the SIS, 228<br/><br/>6.2.2 Analysis of Traceability Graph, 229<br/><br/>6.2.3 Identifying the Candidate Impact Set, 231<br/><br/>6.3 Dependency-Based Impact Analysis, 234<br/><br/>6.3.1 Call Graph, 234<br/><br/>6.3.2 Program Dependency Graph, 235<br/><br/>6.4 Ripple Effect, 238<br/><br/>6.4.1 Computing Ripple Effect, 238<br/><br/>6.5 Change Propagation Model, 242<br/><br/>6.5.1 Recall and Precision of Change Propagation Heuristics, 243<br/><br/>6.5.2 Heuristics for Change Propagation, 245<br/><br/>6.5.3 Empirical Studies, 246<br/><br/>6.6 Summary, 247<br/><br/>Literature Review, 248<br/><br/>References, 249<br/><br/>Exercises, 253<br/><br/>7 Refactoring 255<br/><br/>7.1 General Idea, 255<br/><br/>7.2 Activities in a Refactoring Process, 258<br/><br/>7.2.1 Identify What to Refactor, 258<br/><br/>7.2.2 Determine Which Refactorings Should be Applied, 259<br/><br/>7.2.3 Ensure that Refactoring Preserves the Behavior of the Software, 261<br/><br/>7.2.4 Apply the Refactorings to the Chosen Entities, 262<br/><br/>7.2.5 Evaluate the Impacts of the Refactorings on Quality, 263<br/><br/>7.2.6 Maintain Consistency of Software Artifacts, 265<br/><br/>7.3 Formalisms for Refactoring, 265<br/><br/>7.3.1 Assertions, 265<br/><br/>7.3.2 Graph Transformation, 266<br/><br/>7.3.3 Software Metrics, 267<br/><br/>7.4 More Examples of Refactorings, 271<br/><br/>7.5 Initial Work on Software Restructuring, 273<br/><br/>7.5.1 Factors Influencing Software Structure, 273<br/><br/>7.5.2 Classification of Restructuring Approaches, 275<br/><br/>7.5.3 Restructuring Techniques, 276<br/><br/>7.6 Summary, 282<br/><br/>Literature Review, 283<br/><br/>References, 286<br/><br/>Exercises, 288<br/><br/>8 Program Comprehension 289<br/><br/>8.1 General Idea, 289<br/><br/>8.2 Basic Terms, 291<br/><br/>8.2.1 Goal of Code Cognition, 291<br/><br/>8.2.2 Knowledge, 291<br/><br/>8.2.3 Mental Model, 293<br/><br/>8.2.4 Understanding Code, 296<br/><br/>8.3 Cognition Models for Program Understanding, 298<br/><br/>8.3.1 Letovsky Model, 298<br/><br/>8.3.2 Shneiderman and Mayer Model, 301<br/><br/>8.3.3 Brooks Model, 303<br/><br/>8.3.4 Soloway, Adelson, and Ehrlich Model, 308<br/><br/>8.3.5 Pennington Model, 310<br/><br/>8.3.6 Integrated Metamodel, 312<br/><br/>8.4 Protocol Analysis, 315<br/><br/>8.5 Visualization for Comprehension, 317<br/><br/>8.6 Summary, 321<br/><br/>Literature Review, 321<br/><br/>References, 322<br/><br/>Exercises, 324<br/><br/>9 Reuse and Domain Engineering 325<br/><br/>9.1 General Idea, 325<br/><br/>9.1.1 Benefits of Reuse, 327<br/><br/>9.1.2 Reuse Models, 327<br/><br/>9.1.3 Factors Influencing Reuse, 328<br/><br/>9.1.4 Success Factors of Reuse, 329<br/><br/>9.2 Domain Engineering, 329<br/><br/>9.2.1 Draco, 331<br/><br/>9.2.2 DARE, 331<br/><br/>9.2.3 FAST, 331<br/><br/>9.2.4 FORM, 331<br/><br/>9.2.5 KobrA, 332<br/><br/>9.2.6 PLUS, 332<br/><br/>9.2.7 PuLSE, 332<br/><br/>9.2.8 Koala, 332<br/><br/>9.2.9 RSEB, 332<br/><br/>9.3 Reuse Capability, 333<br/><br/>9.4 Maturity Models, 334<br/><br/>9.4.1 Reuse Maturity Model, 334<br/><br/>9.4.2 Reuse Capability Model, 336<br/><br/>9.4.3 RiSE Maturity Model, 338<br/><br/>9.5 Economic Models of Software Reuse, 340<br/><br/>9.5.1 Cost Model of Gaffney and Durek, 346<br/><br/>9.5.2 Application System Cost Model of Gaffney and Cruickshank, 348<br/><br/>9.5.3 Business Model of Poulin and Caruso, 350<br/><br/>9.6 Summary, 352<br/><br/>Literature Review, 352<br/><br/>References, 353<br/><br/>Exercises, 356<br/><br/>Glossary 359<br/><br/>Index 379 |