Тренируемся работать с унаследованным кодом

В пятницу, в нашей компании проходил Legacy Code Retreat, организованный по инициативе наших сотрудников. Мероприятие не было похожим на то что происходит обычно в международный день Code Retreat по нескольким причинам: это было внутреннее мероприятие на котором присутствовали только сотрудники нашей компании, а соответственно разнообразие инструментов и языков программирования не было таким большим. Вдобавок, мероприятие проходило в рабочие часы и наконец, это был вариант унаследованного исходного кода.


А в чем, собственно смысл?

Можно задаться вопросом, а был ли смысл проводить внутренний эвент, поскольку одним из главных правил подобных тренингов является именно ваша заинтересованность в улучшении ваших навыков, а не вашего работодателя. В нашем случае на это было несколько причин:

  • Мы знали, что есть некоторые навыки, которые разработчикам нашей компании необходимо улучшить (рефакторинг, следование простым правилам дизайна, написание тестов и тестируемого кода и т.д.) Мы знали, какие конкретно проблемы случаются в различных продуктах и решили что ознакомление с этими основами является первым шагом навстречу улучшения нашего кода.
  • У нас не было средств, соответственно мы не могли рассчитывать на профессионального тренера. Даже если бы они были, тратить деньги на изучение основ, которые мы собирались охватывать не имело смысла.
  • Большинство сотрудников работают помногу часов в день и просить их о дополнительных часах в их свободное время было бы слишком. Даже попытка выдернуть некоторых людей из проектов всего на один день обернулась немыслимо сложной, так что нам требовалось официальное одобрение, чтобы позволить людям потратить некоторое время на обучение.
  • Мы хотели улучшить возможности людей попрактиковаться с новыми навыками: презентации, организации Lunch and Learn и всего такого уже не работали.

Что мы сделали?

  • Взяли исходные коды игры JBrains Trivia
  • Организовали короткое введение в Git за день до мероприятия
  • Запустили сессии по 45 минут каждая, по окончанию которой были разборы полетов и перерыв. Поскольку ретроспективы между сессиями были достаточно коротки, не всем сотрудникам приходилось отвечать на вопросы
  • В самом конце мы опросили каждого на тему что он изучил, какая сессия понравилась больше всего и что изменится в его ежедневной работе начиная со следующего понедельника.
  • А потом мы пошли в паб 🙂

Как оно вообще прошло?

Мы были удивлены когда люди сообщили, как много новых вещей они узнали во время работы в паре с друг другом. Без вообще каких-либо намеков с нашей стороны, несколько человек сказали именно то что мы хотели услышать по поводу изменений в том, как они будут работать дальше. Люди были в восторге по поводу изученного; некоторые, например, неожиданно встретили новые для них инструменты, используемые их коллегами.

Несомненно, работа и тренинги не одно и тоже; у нас не было баз данных, исходный код был небольшим, мы не волновались по поводу дедлайнов и давления со стороны менеджмента. Так что будем следить с тем, чтобы увидеть, удалось ли им осуществить эти новые идеи на работе и с какими проблемами они столкнулись.

Полное описание сессий:

Сессия 1: Golden Master. Напишите тест для игры, изменив как можно меньшее количество кода и покрыв наибольшее количество кейсов (измените только одну строчку кода). Сохраните тесты и используйте их в следующих сессиях.
Ретроспектива:

  • Сколько исходного кода вы изменили?
  • Сколько тест кейсов вы охватили?
  • С какими проблемами вы столкнулись? Как решили?

Сессия 2: Делаем код лучше Используя любые известные вам методы, сделайте, чтобы код выглядел лучше (чтобы это для вас не означало).
Ретроспектива:

  • Что вы думаете об исходном коде? Какие проблемы вы обнаружили?
  • Как вы изменили код (выделение методов, классов, удаление дубликатов)?
  • Сколько новых тестов вы добавили?



Сессия 3: Pure functions Выделите методы которые не имеют состояний и возвращают тот же самый результат для того же набора аргументов.
Ретроспектива:

  • Сколько методов получилось выделить?
  • Какие методы выделили?
  • Сколько новых тестов добавили?

Сессия 4: Single responsibility principle Убедитесь, что каждый класс имеет single responsibility.
Ретроспектива:

  • Сколько классов получилось выделить?
  • Какие классы вы выделили?
  • Сколько новых тестов добавили?



Сессия 5: Короткий рефакторинг Накладывается ограничение в 3 минуты на рефакторинг и покрытие изменений тестами. Если вы не успеваете закончить до окончания времени, откатите сделанные изменения.
Ретроспектива:

  • Сколько рефакторингов получиось закончить?
  • Что вы изучили во время этой сессии?
  • Использовали ли вы Resharper и сокращения клавиатурных клавиш?

Сессия 6: На выбор дается использование только коротких методов, запрет на использование условных выражений или мыши! Выберите одно из двух ограничений или объедините несколько 🙂

Ретроспектива:

  • Какое ограничение вы выбрали?
  • Как много условных операторов вы избежали?
  • Какие методы вы использовали (словари либо modulo function)?
  • Сколько методов вы добавили?
  • Сколько ваших методов получились больше чем N строк?
  • Сколько новых тестов добавили?


  • 3

Удобный способ не пропустить новое в блоге. Раз в месяц пишу обстоятельное письмо всем читателям: анонсы постов, новости нашей деревни и прочие ништяки, которые не ушли в RSS, Feedly или куда-там еще.

На ежемесячную email рассылку подписаны 258 человек

Мотофотопрограммист
Живу в Новой Зеландии. Рассказываю о стране и красивых местах, пишу про бытовые вещи.
Прыгнуть с парашютом - осуществил на 50%; приобрести 1400 - работаю над этим; осилить 300км/ч - осилил на 96.6%