答えて

5

私は大規模なレガシースパゲッティコードベースにユニットテストを追加しています。

私のアプローチは、問題を解決するように頼まれたときに、私の現在のタスクに関連するコードベースの部分の周りに新しいラッパーを作成しようとしています。この新しいラッパーは、TTDを使用して開発されました(最初にテストを書く)。いくつかの時間のに非ユニットテスト済みのレガシーコードを呼び出します。他の時には、私は既存のモジュールの新しいコピーを作成し、それに深刻な暴力を加え始める。時には機能を最初から書き直すこともあります。

しかし、私はそれをかなりよくテストしているので、私はかなりコントロールしています。

あまりにも多くのコピーと貼り付けで開発されたこのコードベースで見つかったことは、特定の部分を理解してからその中からいくつかの機能を抽出することです。 ...これらの機能は、他の多くの場所で使用できることがよくあります。したがって、レガシーコードを自分でテストしたライブラリで置き換える割合が増えます。

私の現在の問題(通常は修正しようとしているバグ)に触れられていないコードの部分にテストを書き直したり追加したりすることはありませんが触れられていて関連性のあるものには積極的な積極的な立場をとっています。

更新:Penguinix氏は質問しています。「あなたはどの言語で作業していますか?特定のテストハーネスをお勧めしますか?」

今、私は...いろいろなところで働いています!しかし、同じ原理がどこでも働く。私はMinUnitを見たhttp://www.jera.com/techinfo/jtns/jtn002.html

が、それは一種の私のための啓発の「禅」瞬間だった:UTの私の理解を変換

何かがMinUnitました。単体テストについての誤解は、洗練されたオブジェクト指向フレームワークなどを必要とする複雑なものであった。私は、UTがたくさんのテストを書いていることを理解した。 「ハーネス」は、好きな言語で約3分で自分で書くことができます。ちょうどそれをやりなさい。

+0

あなたはどの言語で作業していますか?あなたが推奨するテストハーネスがありますか? –

1

これは実際にコードベースの状態に依存します...大規模なクラスはありますか?メガメソッドを持つ1つのクラス?クラスは緊密に結合されていますか?構成は負担ですか?

これを考慮して、Working Effectively with Legacy Codeを読んで、問題を選んで、推奨事項を適用することをお勧めします。

+0

http://www.manning.com/baley/ .NETのBrownfieldアプリケーションも良好に見えます。 –

+0

興味深いですね。私は今、最初の主要なブラウンフィールドアプリケーションで「Working Effectively ...」を使用しています。 Refactoring http://www.amazon.com/dp/0201485672も役に立つと思う(私の次の購入)。 –

+0

Martin Fowlerによるリファクタリングは、リファクタリングツールです。それは私の開発に非常に役立っています。ヘッド・ファースト・デザイン・パターンとコード・コンプリートもお勧めします。 –

関連する問題