Refactoring Legacy Software

Everyone wants software that 'just works', that is a joy to maintain, and where you can add new features easily. In practice however, there are always bugs to fix and customers to please. Corners are cut and design debt accumulates, ultimately resulting in legacy code – code without tests. You would like to improve the software piecemeal using refactoring - which means improving the design of existing code without changing its behaviour. There is a Catch-22 here: to refactor safely, you need automated tests to ensure the code behaves the same as before. To add tests, you first have to make it modular by refactoring.

There still is hope! Through demos and programming exercises with some really dirty code, you will learn to break dependencies, refactor, and add tests in messy legacy code, so that you can add new features with more ease and confidence. This workshop helps you get started and offers effective practices and courage to persevere. 

This workshop is very practical and hands-on: most of the workshop will be demos, programming exercises, discussion and feedback, augmented with a little theory. 

Benefits

This workshop will help you to work more effectively with legacy software: you will learn principles, practices and techniques to make changes and add new features to existing software faster and in a more predictable way, while reducing the risk of breaking existing functionality. 

If you participate in this workshop, you will:

  • apply a number of techniques to break unwanted dependencies in code
  • know how to start making changes and adding tests simply and responsibly
  • experience prioritizing, planning, and executing a large refactoring in small steps with a team, on real, representative legacy code.
  • have fun! - we take pride in creating a fun and effective learning environment, mixing presentations with exercises and hands-on development.

Intended Audience

Software developers, architects, technical team leads, Scrum masters, and agile coaches who seek to augment their refactoring knowledge, so that they are able to work more effectively with legacy software. Prerequisite knowledge and experience:

  • Object orientation
  • Experience in a programming language with Object/Class features, for example Java, C#, C++, VB(.Net), Ruby, Python, Smalltalk
  • Basic knowledge of automated unit testing

Programme

Topics covered:

  • Smells & refactorings
  • Refactoring tactics and strategies
  • Breaking dependencies in existing code - getting your first unit test in
  • Using mock objects to break dependencies

Next course: 16 December 2008