Instructor
Michael is best known for his work on Working Effectively with Legacy Code, he is also a frequent invited speaker and well known in software development. For the first time in Thailand, we can learn directly from him without travelling to America. The following are the workshops we planned to organise while he is here.
Course Detail
Test Driven Development and Refactoring are powerful tools. With them you can add new code to systems and make existing code more maintainable. However, refactoring code without having tests in place can be hazardous. This class presents a collection of dependency breaking and test writing techniques that can be used to get existing code safely under test for refactoring. These techniques can be used in conjunction with Test Driven Development to breathe new life into large existing code bases. This class is structured as a set of lectures, discussions, and hands-on exercises.
Objectives
By the end of this course, you will:
- Understand what legacy code is
- Understand how to break dependencies in legacy code
- Learn a variety of techniques for breaking external dependencies
- Learn a variety of techniques for breaking internal dependencies
- Understand when to employ each of the techniques
- Learn a variety of strategies for code refactoring
- Learn how to identify change points
- Learn how to find an inflection point
- Understand the concept of test coverage for inflection points
- Understand how to write effective tests for legacy code
Course Outline
Day 1
- Introduction / Testing as a Programmer’s tool
- Seam identification
- Breaking Dependencies – Sensing and Separation
- Breaking Hidden and Manifest Dependencies
- Characterization Testing
- Refactoring Toward Understandability
Day 2
- Strategies for Getting Large Methods under Test
- Dealing with Deeply Nested Conditionals
- Planning Large-Scale Refactoring and Technical Debt Reduction
Workshop Format
The format of the course is lecture, with team exercises and discussion.
Target Audience
This course is for developers. There will be extensive coding exercises. Participants should have experience in Java, C#, or C++.
What to bring?
A laptop computer with a Java, C#, or C++ programming environment. The exercises will translated into all of those languages.