Coding Katas для отработки рефакторинга унаследованного кода

123

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

Есть множество мест, где можно найти ката. лайк..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Я обнаружил, что это отличные хранилища Katas ... мои попытки создать некоторые из них были чрезвычайно полезны.

Однако я чувствую, что у всех Ката, которые я видел до сих пор, есть один недостаток. Ни один из них, похоже, не позволяет мне практиковать рефакторинг плохого кода. Замечательно научиться писать чистый код с первого раза ... но в моей текущей работе у меня не так много возможностей для написания нового кода. Скорее я часто борюсь с устаревшим кодом и пытаюсь понять, как рефакторинг модулей, устранение зависимостей и уменьшение взаимосвязи.

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

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

mezoid
источник
+1 хороший вопрос, с предоставленной полезной информацией
KLE
Хотел бы я дать больше +1 :) Отличный вопрос. Я никогда даже не задумывался о такой практике программирования ...
FallenAvatar
Мне бы очень понравилось, когда кто-то действительно разместит небольшую систему специально для рефакторинга унаследованного кода ... чего-то, что имеет части, в которых рефакторинг Майкла Фезерса будет сиять. Я искал что-то подобное уже больше недели. кто угодно? кто угодно? :)
Дерик Бейли
Хороший вопрос. Вы можете практиковать то, что @Ryan упомянул в своем ответе. Я предлагаю форк репозитория giithub: github.com/garora/TDD-Katas. Вы можете зайти в историю и проверить, как реорганизовываются эти Katas.
Gaurav Aroraa

Ответы:

92

Я не знаю сайта, который каталогизирует их напрямую, но одна стратегия, которую я иногда использовал, такова:

  1. Найдите старый, небольшой, неподдерживаемый проект с открытым исходным кодом на sourceforge
  2. Скачайте, скомпилируйте / соберите / запустите
  3. Прочтите документацию, прочувствуйте код
  4. Используйте методы, описанные в разделе " Эффективная работа с устаревшим кодом" в статье чтобы проверить его на практике.
  5. Реорганизуйте этот фрагмент, возможно, исправляя ошибки и добавляя функции по ходу
  6. Повторите шаги с 4 по 6.

Когда вы найдете часть, которая была особенно сложной, бросьте свою работу и повторите ее пару раз, чтобы закрепить свои навыки.

Это не просто практика рефакторинга, но и другие навыки, такие как чтение кода, тестирование и работа с процессами сборки.

Самая сложная проблема - найти проект, которым вы достаточно заинтересованы, чтобы продолжать работать. Последней, над которой я работал, была библиотека Python для генетического программирования, а текущая, над которой я работаю, - это библиотека IRC для Java.

Райан
источник
4
+1 очень интересное предложение. Как вы сказали, сложная вещь - найти подходящий проект. Я уделю этому много внимания. Возможно, если я или другие найду что-то очень полезное, его можно будет сохранить и задокументировать где-нибудь как Ката ...
вещи, мезоид
3
«Работа с устаревшим кодом» - вы имеете в виду «Эффективная работа с устаревшим кодом»? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill
1
Да, я имею в виду «Эффективная работа с устаревшим кодом». Спасибо за улов!
Райан
21

Я чувствую себя некромантом, отвечающим на такую ​​старую беседу, но есть одна вещь, которая могла бы стать достойным дополнением - Legacy Code Retreat .

Идея в том, чтобы сделать отступление по коду с унаследованным кодом и попытаться отработать самые методы работы с ним, но я не вижу ничего, что запретило бы вам просто использовать подготовленный код и практиковаться с ним самостоятельно. Просто используя его для создания Золотого Мастера, вы потратите час работы, и вы можете сделать гораздо больше. Если ваше ката обычно длится около 2 часов, я бы сказал, что если просто разделить то, что обычно происходит на LCR, на ката, вы получите четыре разные вещи, над которыми нужно работать.

Есть репозиторий GitHub от автора идеи, JB Rainsberger, который содержит простую устаревшую систему, с которой вы должны работать, Trivia Game.

Судя по моему опыту как организатору / участнику, людям это очень понравилось, и было интересно увидеть, что может быть проблемой в устаревшем коде и где ваш рефакторинг может сбить вас с пути (и как!). Вот еще один отчет Андреаса Лейдига о том, как это выглядит .

LAFK говорит: "Восстановить Монику"
источник
20

У Эмили Бач есть репозиторий на github с некоторыми катами рефакторинга: Emily Bache Refactoring Kata Repo . Есть варианты KataYahtzee и KataTennis для рефакторинга. Кроме того, у нее есть вариант ката Gilded Rose Kata, который был разработан как ката рефакторинга.

Кроме того, в ее репозитории есть Racing Car Kata : Racing Car Kata . Катамараны гоночных автомобилей также содержат хорошие упражнения для рефакторинга.

Эти ката имеют код на нескольких языках:

  • C ++
  • C #
  • Ява
  • Javascript
  • питон
  • Рубин
Стив Клэнтон
источник
4
Эмили также опубликовала книгу The Coding Dojo Handbook, в которой перечислены Katas и описано, как запускать и запускать свои собственные додзё для программирования. Я очень рекомендую книгу: Leanpub.com/codingdojohandbook
Кристиан Маслен
1
Я использовал ее книгу для ведения додзё, и я согласен, что это отличный ресурс. У Эмили также есть связанный курс на pluralsight.com/courses/the-coding-dojo.
Стив Клэнтон,