In todayГ‚вЂTMs fast-changing, competitive environment, having an up-to-date information system (IS) is critical for all companies and institutions. Rather than creating a new system from scratch, reengineering is an economical way to develop an IS to match changing business needs. Using detailed examples, this practical book gives you methods and techniques for reengineering systems for flexibility and reliability. It helps you reengineer a system to continue to provide for business critical missions as well as achieve a smooth transformation to an up-to-date software technology environment. WhatГ‚вЂTMs more, it shows you how to redevelop a flexible system that can evolve to meet future business objectives, reduce start time and save money in the reengineering process. This unique resource places particular emphasis on the reengineering of legacy assembler systems using the FermaT workbench, and describes other widely available general techniques. The book poses the key questions that you need to address before reengineering can provide an integrated framework that reveals the answers. A built workbench is used to illustrate the approach with the application of real case studies. Successful Evolution of Software Systems 2 Contents vii 8 Preface xiii 14 Acknowledgments xv 16 Chapter 1 Constant Software Changes 18 1.1 Legacy systems 1 18 1.2 Business changes 2 19 1.3 Software evolution 3 20 References 4 21 Chapter 2 Software Engineering and Evolution 5 22 2.1 Computer system evolution 5 22 2.2 Software engineering 8 25 2.3 Software quality 11 28 2.4 Software everywhere 12 29 2.5 Software maintenance 14 31 2.6 Evolving software 19 36 References 19 36 Chapter 3 Software Reengineering for Evolution 23 40 3.1 Introduction 23 40 3.2 Software reengineering cycle 24 41 3.3 Taxonomy of software reengineering 26 43 3.4 Reverse engineering 29 46 3.5 Current state of formal methods in reengineering 31 48 3.6 Classification of formal methods 33 50 3.7 Criteria and results 42 59 3.8 Analysis and summary 45 62 References 47 64 Chapter 4 WSL and Transformation Theory 53 70 4.1 Introduction 53 70 4.2 Background 55 72 4.3 Syntax and semantics of the kernel language 57 74 4.4 Proving the correctness of a refinement 64 81 4.5 Algorithm derivation 70 87 4.6 Extending the kernel language 71 88 4.7 Example transformations 73 90 4.8 Why invest WSL? 76 93 References 80 97 Chapter 5 The FermaT Evolution Workbench 83 100 5.1 Introduction 83 100 5.2 Previous tranformation tools 84 101 5.3 Analyzing assembler code 88 105 5.4 The FermaT workbench 89 106 5.5 Results 100 117 References 101 118 Chapter 6 An Intergrated Evolution Framework 103 120 6.1 Characteristics of legacy systems 103 120 6.2 The expanded evolution approach 106 123 6.3 EWSL 110 127 6.4 Summary 116 133 References 116 133 Chapter 7 Process for Evolution 119 136 7.1 A process for evolution 119 136 7.2 Implementing the process 119 136 7.3 Translating into EWSL 123 140 7.4 Restructuring 123 140 7.5 Abstracting 124 141 7.6 Understanding with the support of the domain knowledge-based analysis (DKBA) tool 132 149 7.7 Reusing components 149 166 7.8 Retargeting 154 171 7.9 Measuring software evolution 155 172 References 169 186 Chapter 8 Case Studies in Evolution 175 192 8.1 First case study: Book index generator 177 194 8.2 Second case study: Topological sorting algorithm 190 207 8.3 Third case study: Assembler reengineering 204 221 8.4 Forth case study: A mass migration exercise 218 235 8.5 Fifth case study: Migrating a telecommunications system 228 245 8.6 Sixth case study: Mine drainage system 229 246 8.7 Summary 235 252 References 237 254 Chapter 9 Concluding Remarks 239 256 9.1 Is software evolution a bridge too far? 239 256 9.2 Formal or not formal? 257 9.3 Coping with new development paradigms 240 257 9.4 Questions answered 242 259 Appendix A WSL Transformations 243 260 A.1 Assertions 243 260 A.2 Conditionals (see Table A.1) 244 261 A.3 Assignments 244 261 A.4 Invariants 246 263 A.5 Loops 247 264 A.6 Unbounded Loops 248 265 A.7 Absorption 249 266 A.8 False loop 250 267 A.9 Loop doubling 250 267 A.10 Loop inversion 250 267 A.11 Loop unrolling 251 268 A.12 The induction rule for recursion 252 269 A.13 General recursion removal 253 270 A.14 Recursion removal examples 257 274 References 260 277 Appendix B Abstraction Rules 261 278 B.1 Elementary abstraction rules 261 278 B.2 Further abstraction rules 266 283 About the authors 271 288 Index 273 290 In todayÂ’s fast-changing, competitive environment, having an up-to-date information system (IS) is critical for all companies and institutions. Rather than creating a new system from scratch, reengineering is an economical way to develop an IS to match changing business needs. Using detailed examples, this practical book gives you methods and techniques for reengineering systems for flexibility and reliability. It helps you reengineer a system to continue to provide for business critical missions as well as achieve a smooth transformation to an up-to-date software technology environment. WhatÂ’s more, it shows you how to redevelop a flexible system that can evolve to meet future business objectives, reduce start time and save money in the reengineering process. This unique resource places particular emphasis on the reengineering of legacy assembler systems using the FermaT workbench, and describes other widely available general techniques. The book poses the key questions that you need to address before reengineering can provide an integrated framework that reveals the answers. A built workbench is used to illustrate the approach with the application of real case studies. Annotation Explores The Feasibility Of Using Techniques Such As Program Transformation And Program Abstraction To Re-engineer And Extend The Life Of An Existing It System. The Authors (de Montfort University) Outline A Program Transformation-based Evolution Workbench Called Fermat, The Architecture Of The Wide Spectrum Language (wsl), And A Process For Evolving Object-oriented, Real-time, And Parallel Systems. The Final Chapter Presents Six Case Studies That Use Fermat And Re- Engineering Assistant Tools To Evolve From Source Code To Specifications Or To New Source Code In A Different Language. Annotation Copyrighted By Book News, Inc., Portland, Or "The term legacy system is currently a well-accepted and well-defined one within the software community, which was not the case a number of years ago."