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


123

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

カタが見つかる場所はたくさんあります。お気に入り..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

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

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

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

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


便利な情報が提供された素敵な質問+1
KLE

私は+1以上を与えることができればいいのに:)素晴らしい質問です。私はプログラミングのためのこの種の習慣についてさえ考えたことはありません...
FallenAvatar

誰かが実際にレガシーコードのリファクタリングのために小さなシステムを実際に投稿するのを見てみたいです...マイケルフェザーズのリファクタリングが光る部分を持つ何か。私はこのようなものを1週間以上探していました。誰でも?誰でも?:)
デリックベイリー

いい質問です @Ryanが返信で述べた内容を練習できます。giithubリポジトリをフォークすることをお勧めします:github.com/garora/TDD-Katas履歴にアクセスして、これらのKatasがどのようにリファクタリングされるかを確認できます。
Gaurav Aroraa 2017

回答:


92

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

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

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

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

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


4
+1非常に興味深い提案。あなたが言ったように、トリッキーなことは適切なプロジェクトを見つけることです。私はこれに多くの配慮をします。おそらく、私や他の人が非常に役立つものを見つけたら、それをカタとして保存して文書化することができます...
mezoid

3
「レガシーコードの取り扱い」-「レガシーコードの効果的な使用」という意味ですか?amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/...
TrueWill

1
はい、「レガシーコードを効果的に使用する」という意味です。キャッチありがとう!
ライアン

21

私はそのような古いスレッドに返信するネクロマンサーのように感じますが、価値のある追加をするために1つ、レガシーコードリトリートがあります。

レガシーコードを使用したコードリトリートを用意し、それを処理するためのテクニックを実際に試してみることが考えられますが、用意されたコードを使用して自分で練習するだけでは禁止されるものはありません。ゴールデンマスターを作成するためにそれを使用するだけで、1時間の作業になり、さらに多くのことができます。通常、カタが2時間程度続く場合、LCRで通常発生することをカタに分割するだけで、4つの異なる作業を行うことができます。

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

主催者/参加者としての私の経験から、人々はこれが本当に好きで、レガシーコードで何が問題になり、どこにリファクタリングがあなたを迷わせてしまうのか(そしてその方法を!)Andreas Leidigによる、これがどのように見えるかについてのもう1つの説明があります。


20

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

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

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

  • C ++
  • C#
  • ジャワ
  • JavaScript
  • パイソン
  • ルビー

4
Emilyは、カタをリストし、独自のコーディング道場を開始および実行する方法を説明する本「コーディング道場ハンドブック」も発行しています。私は本を​​強くお勧めします:leanpub.com/codingdojohandbook
Christian Maslen

1
私は彼女の本を道場の運営に使用しましたが、それが優れた資料であることに同意します。エミリーには、pluralsight.com / courses / the-coding-dojoにも関連コースがあります。
Steve Clanton、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.