Software systems degrade over time. You’re probably familiar with systems where change takes five times as long today as it did when they were new. Even a simple question, such as “What does the system do in this case?,” can take hours to answer.
You’re stuck with these systems, but that doesn’t mean you have to accept increasing costs to enhance and maintain them. Legacy code rescue is a growing body of lore and technique that allows your team to get your systems under control–to rescue it from seeming unstoppable degradation.
In this heavily hands-on class, you’ll learn how to to transition a difficult legacy codebase into something that is highly maintainable and a joy to work with. You’ll analyze legacy code in order to determine the best rescue strategy. You’ll write characterization tests for existing code, to clamp down on it and allow for safer change. You’ll incrementally improve challenging code with numerous techniques for safely breaking dependencies. You’ll also practice techniques for managing large-scale, invasive code refactoring.
-
Review: TDD & refactoring
-
Legacy code defined
-
Legacy “quick start”
-
Legacy themes
-
Sprout method / sprout class
-
Characterization testing
-
The legacy change algorithm
-
Effects analysis
-
Static code analysis guidelines
-
Code forensics
-
Hotspot analysis
-
Breaking dependencies
-
Seams
-
Safety techniques:
-
Safe refactoring
-
Preserve signatures
-
Leaning on the compiler
-
-
Dependency breaking techniques:
-
Expose static method
-
Extract and override call
-
Parameterize constructor
-
Extract and override factory method
-
Extract interface
-
Adapt parameter
-
-
Legacy strategies
-
Large-scale legacy refactoring
-
The Mikado Method