Видео. Онлайн лекция по Refactoring Legacy Code

18 декабря 2011 г.

На прошедший вебинар зарегистрировался 51 человек, около 30 приняли участие, из которых 20 держались все 3 часа. Я не стал выкладывать видео целиком, а разделил 3 часа на две логические части и убрал лишнее.

Это был довольно необычный опыт «парного программирования» — я за клавиатурой и 30 программистов обсуждают дальнейшие шаги. Часто спорили, иногда начинали говорить несколько человек одновременно.

Как всё проходило

Сценарий: нам (участникам вебинара) дали приложение — игра в покер по сети — и сказали, что некоторая функция в нем не работает. Чтобы ее поправить нам пришлось разбираться в коде и оценивать, что будет быстрее: отрефакторить код или написать всё с нуля.

Код был очень запутанным с названиями в переменных типа aaa, b, w и т.п. Вся бизнес-логика находилась в UI и одном классе с вложениями логических конструкций в 9 уровней.

Шаги по его рефакторингу

При работе с кодом совместно наметили два этапа.

На первом этапе надо сделать код читабельным и разобраться как он работает:

  1. Сделать Code Cleanup, чтобы отступы везде были одинаковые, выравнивания и т.п.
  2. Удалить весь закомментированный код
  3. Переименовать методы и переменные, дать им значимые имена (с нами был автор кода, чего в реальных условиях часто не бывает)
  4. Написать тесты на существующие куски кода, чтобы понять, как работает система

На втором этапе мы перерабатывали API и писали тесты:

  1. Через TDD выстроить своё API параллельно с существующим
  2. Скрыть части системы, которые будем рефакторить, за интерфейсы, чтобы остальная система ничего не узнала про рефакторинг (в этом могут помочь UML диаграммы и NDepend)
  3. Отрефакторить или переписать скрытую часть системы

Результаты

В целом я доволен этим экспериментом, был рад пообщаться с людьми из разных городов. Мне понравилось, что все не просто соглашались с одним мнением, а выдвигали свои. Уже поступили предложения повторить, но с некоторыми модификациями. Каким вы видите следующий вебинар из этой серии? Как можно улучшить формат? Как можно сделать вебинар более полезным?

Благодарности

Отдельное спасибо проекту SkillTrek, который предоставил свою площадку для вебинара.

Спасибо Тимуру за помощь в обработке видео.

Автору кода, Максиму, желаю успехов. Он умеет признавать свои ошибки и работать над ними, а это основа для развития.


Ссылки

Детали вебинара и исходный код проекта

Working Effectively with Legacy Code, Michael Feathers

Видео. Пример разработки приложения с помощью TDD

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...