web-dev-qa-db-ja.com

レガシーコードのリファクタリングを実践するためのKatasのコーディング

私はここ数ヶ月でカタのコーディングに非常に興味を持ちました。それらは私のプログラミングスキルを磨き、仕事で書くコードの品質を向上させる素晴らしい方法だと思います。

カタスを見つけることができる多くの場所があります。お気に入り..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

これらはKatasの優れたリポジトリであることがわかりました...それらのいくつかでの私の試みは非常にやりがいがあります。

しかし、私がこれまでに見たすべてのカタには、1つの不足があると感じています。それらのどれも、私が悪いコードのリファクタリングを練習することを許していないようです。クリーンなコードを初めて書く方法を学ぶのは素晴らしいことですが...現在の仕事では、新しいコードを書く機会があまりありません。むしろ、私はしばしばレガシーコードと戦い、モジュールをリファクタリングし、依存関係を排除し、結合を減らす方法を見つけようとしています。

そのため、レガシーコードをリファクタリングしてクリーンコードに変換するスキルを磨くために使用できる2つのKatasを探しています。

すでに存在するものを誰か知っていますか?私は仕事中に多くの練習をすることを知っています...しかし、私はクラスの依存関係を分離し、懸念を分離する方法をすぐに見ることができるようにスキルを磨きたいですやりすぎです。

120
mezoid

私はそれらを直接カタログするサイトを知りませんが、私が時々使った戦略の一つはこれです:

  1. Sourceforgeで古い、小さく、メンテナンスされていないオープンソースプロジェクトを見つける
  2. それをダウンロードし、コンパイル/ビルド/実行する
  3. ドキュメントを読み、コードの感触をつかむ
  4. レガシーコードを効果的に使用するの手法を使用して、テスト対象の一部を取得します。
  5. その部分をリファクタリングし、おそらくバグを修正して機能を追加する
  6. 手順4〜6を繰り返します

特にやりがいのある部分を見つけたら、作業を捨てて数回繰り返してスキルを強化します。

これは単にリファクタリングを実践するだけでなく、コードの読み取り、テスト、ビルドプロセスの処理などの他のスキルも備えています。

最も難しい問題は、作業を続けるのに十分に興味のあるプロジェクトを見つけることです。最後に取り組んだのは、遺伝子プログラミング用のpythonライブラリで、現在取り組んでいるのはIRC Java用ライブラリ。

89
Ryan

Emily Bacheには、いくつかのリファクタリングカタが含まれるgithubリポジトリがあります。 Emily Bacheのリファクタリングカタレポ 。リファクタリングするKataYahtzeeとKataTennisのバリアントがあります。また、彼女はリファクタリングカタとして設計された、Gilded Rose Kataのバリアントを持っています。

また、彼女のリポジトリにはRacing Car Katasがあります: Racing Car Kata 。 Race Car Katasには、リファクタリングのための優れた演習も含まれています。

これらのカタには、複数の言語のコードがあります。

  • C++
  • C#
  • Java
  • Javascript
  • Python
  • Ruby
19
Steve Clanton

ネクロマンサーはそのような古いスレッドに返信したい気がしますが、価値のある追加をもたらすものが1つあります- Legacy Code Retreat

アイデアは、レガシーコードで Code Retreat を使用し、そのようなコードに対処するための技術を実践しようとすることですが、準備されたコードを使用して練習することを禁止するものは見当たりません自分で。ゴールデンマスターを作成するためにそれを使用するだけで1時間の作業が必要になり、さらに多くのことができます。カタが通常約2時間続く場合、LCRで通常起こることをカタに分割するだけで、4つの異なる作業を行うことができます。

アイデアの著者であるJ.B. Rainsbergerによる GitHubリポジトリ があります。これには、使用する単純なレガシーシステムであるTrivia Gameが含まれています。

オーガナイザー/参加者としての私の経験から、人々はこれを本当に気に入っており、レガシーコードで何が問題になるのか、そしてリファクタリングがあなたを迷わせる可能性のある場所(そしてその方法!) Andreas Leidig による、さらに別の説明です。