Get more out of your legacy systems: more performance, functionality, reliability, and manageabilityIs your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts.In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his renowned Object Mentor seminars: techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control.The topics covered include Understanding the mechanics of software change: adding features, fixing bugs, improving design, optimizing performance Getting legacy code into a test harness Writing tests that protect you against introducing new problems Techniques that can be used with any language or platform-with examples in Java, C++, C, and C# Accurately identifying where code changes need to be made Coping with legacy systems that aren't object-oriented Handling applications that don't seem to have any structureThis book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.© Copyright Pearson Education. All rights reserved.
Cited By
- Gazzinelli Cruz V, Rocha H and Valente M (2023). Snapshot testing in practice, Journal of Systems and Software, 204:C, Online publication date: 1-Oct-2023.
- Reich P and Maalej W Testability Refactoring in Pull Requests: Patterns and Trends Proceedings of the 45th International Conference on Software Engineering, (1508-1519)
- Guo P and Cooper R (2023). Six Opportunities for Scientists and Engineers to Learn Programming Using AI Tools Such as ChatGPT, Computing in Science and Engineering, 25:3, (73-78), Online publication date: 1-May-2023.
- Mejstrik T and Hollomey C Injection testing backed refactoring Proceedings of the 27th European Conference on Pattern Languages of Programs, (1-7)
- Rebai S, Alizadeh V, Kessentini M, Fehri H and Kazman R (2022). Enabling Decision and Objective Space Exploration for Interactive Multi-Objective Refactoring, IEEE Transactions on Software Engineering, 48:5, (1560-1578), Online publication date: 1-May-2022.
- Silva L, Castro R and Guimaraes M Supporting real demands in software engineering with a four steps project-based learning approach Proceedings of the 43rd International Conference on Software Engineering: Joint Track on Software Engineering Education and Training, (50-59)
- Mosseri I, Alon L, Harel R and Oren G ComPar: Optimized Multi-compiler for Automatic OpenMP S2S Parallelization OpenMP: Portable Multi-Level Parallelism on Modern Systems, (247-262)
- Megas I, Zarras A and Karelis C How to Test the Extract Method Refactoring Proceedings of the European Conference on Pattern Languages of Programs 2020, (1-7)
- Gergely T, Balogh G, Horváth F, Vancsics B, Beszédes Á and Gyimóthy T (2019). Differences between a static and a dynamic test-to-code traceability recovery method, Software Quality Journal, 27:2, (797-822), Online publication date: 1-Jun-2019.
- Wiese E, Rafferty A and Fox A Linking code readability, structure, and comprehension among novices Proceedings of the 41st International Conference on Software Engineering: Software Engineering Education and Training, (84-94)
- Fairbanks G (2019). Ignore, Refactor, or Rewrite, IEEE Software, 36:2, (133-136), Online publication date: 1-Mar-2019.
- Nanthaamornphong A, Leatongkam A and Mateos C (2019). Extended ForUML for Automatic Generation of UML Sequence Diagrams from Object-Oriented Fortran, Scientific Programming, 2019, Online publication date: 1-Jan-2019.
- Zaytsev V An industrial case study in compiler testing (tool demo) Proceedings of the 11th ACM SIGPLAN International Conference on Software Language Engineering, (97-102)
- Li F, Fröhlich J, Schall D, Lachenmayr M, Stückjürgen C, Meixner S and Buschmann F Microservice Patterns for the Life Cycle of Industrial Edge Software Proceedings of the 23rd European Conference on Pattern Languages of Programs, (1-11)
- Chatley R and Field T Lean learning Proceedings of the 39th International Conference on Software Engineering: Software Engineering and Education Track, (117-126)
- Hovy C and Kunkel J Towards automatic and flexible unit test generation for legacy HPC code Proceedings of the Fourth International Workshop on Software Engineering for HPC in Computational Science and Engineering, (42-49)
- Lin Y, Peng X, Cai Y, Dig D, Zheng D and Zhao W Interactive and guided architectural refactoring with search-based recommendation Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, (535-546)
- Steinhauser A and Gauthier F JSPChecker Proceedings of the 2016 ACM Workshop on Programming Languages and Analysis for Security, (57-68)
- Bernstein M Storyspace 3 Proceedings of the 27th ACM Conference on Hypertext and Social Media, (201-206)
- Romano S, Fucci D, Scanniello G, Turhan B and Juristo N Results from an Ethnographically-informed Study in the Context of Test Driven Development Proceedings of the 20th International Conference on Evaluation and Assessment in Software Engineering, (1-10)
- Yao Z, Jia Y, Wang D, Steed C and Atchley S (2016). In Situ Data Infrastructure for Scientific Unit Testing Platform1, Procedia Computer Science, 80:C, (587-598), Online publication date: 1-Jun-2016.
- Clune T, Finkel H and Rilee M Testing and debugging exascale applications by mocking MPI Proceedings of the 3rd International Workshop on Software Engineering for High Performance Computing in Computational Science and Engineering, (5-8)
- Terrell J KinEdit: a tool to help developers refactor manually Companion Proceedings of the 2015 ACM SIGPLAN International Conference on Systems, Programming, Languages and Applications: Software for Humanity, (71-72)
- Rilee M and Clune T Towards test driven development for computational science with pFUnit Proceedings of the 2nd International workshop on Software Engineering for High Performance Computing in Computational Science and Engineering, (20-27)
- Rajlich V Software evolution and maintenance Future of Software Engineering Proceedings, (133-144)
- Choudhari J and Suman U (2014). Extended iterative maintenance life cycle using eXtreme programming, ACM SIGSOFT Software Engineering Notes, 39:1, (1-12), Online publication date: 11-Feb-2014.
- Simic B and Walden J Eliminating SQL injection and cross site scripting using aspect oriented programming Proceedings of the 5th international conference on Engineering Secure Software and Systems, (213-228)
- Winkler D, Schmidt M, Ramler R and Biffl S Improving unfamiliar code with unit tests Proceedings of the 13th international conference on Product-Focused Software Process Improvement, (290-304)
- Rüegg M and Sommerlad P Refactoring towards seams in C++ Proceedings of the 7th International Workshop on Automation of Software Test, (117-123)
- Fox A and Patterson D (2012). Crossing the software education chasm, Communications of the ACM, 55:5, (44-49), Online publication date: 1-May-2012.
- Otani Y, Hashiura H and Seiichi K A software testing tool with the facilities to restore the state at program execution of a program under test Proceedings of the 11th WSEAS international conference on Applied informatics and communications, and Proceedings of the 4th WSEAS International conference on Biomedical electronics and biomedical informatics, and Proceedings of the international conference on Computational engineering in systems applications, (154-159)
- de Halleux J and Tillmann N Moles Proceedings of the 48th international conference on Objects, models, components, patterns, (253-270)
- Strasser A, Mayr H and Naderhirn T Harmonizing the test support for object-oriented legacy systems using state-of-the-art test tools Proceedings of the 1st Workshop on Testing Object-Oriented Systems, (1-7)
- Kropp M and Schwaiger W Reverse generation and refactoring of fit acceptance tests for legacy code Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications, (659-664)
- Bartlett R Integration strategies for Computational Science & Engineering software Proceedings of the 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering, (35-42)
- Zlotnick A and Raz O Hardware-less testing for RAS software Proceedings of SYSTOR 2009: The Israeli Experimental Systems Conference, (1-11)
- Bohnet J, Voigt S and Döllner J Projecting code changes onto execution traces to support localization of recently introduced bugs Proceedings of the 2009 ACM symposium on Applied Computing, (438-442)
- Van Rompaey B, Du Bois B, Demeyer S and Rieger M (2007). On The Detection of Test Smells, IEEE Transactions on Software Engineering, 33:12, (800-817), Online publication date: 1-Dec-2007.
- Evans R and Savoia A Differential testing Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering, (549-552)
- Monteiro M and Aguiar A Patterns for refactoring to aspects Proceedings of the 14th Conference on Pattern Languages of Programs, (1-10)
- Evans R and Savoia A Differential testing The 6th Joint Meeting on European software engineering conference and the ACM SIGSOFT symposium on the foundations of software engineering: companion papers, (549-552)
- Saff D, Artzi S, Perkins J and Ernst M Automatic test factoring for java Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering, (114-123)
- Smith M, Kwan A, Martin A and Miller J E-TDD – embedded test driven development a tool for hardware-software co-design projects Proceedings of the 6th international conference on Extreme Programming and Agile Processes in Software Engineering, (145-153)
- Overbey J, Xanthos S, Johnson R and Foote B Refactorings for Fortran and high-performance computing Proceedings of the second international workshop on Software engineering for high performance computing system applications, (37-39)
Index Terms
- Working Effectively with Legacy Code