レガシーコード改善ガイド
https://gyazo.com/0ead73853dfc4c3116115e8f00e602f9
単語
レガシーコード
テストのないコードのこと
既存の振る舞いと新しい振る舞い
変更箇所が少ないとしても、集中すべきは変更箇所だけではない。既存の振る舞いが変わってないことを保証しなければならない。
しばしば問題になるのは、ある変更によってどれだけの振る舞いに影響が及ぶかを把握できないこと
単体テスト
個々のソフトウェアコンポーネントに対して個別に行うテスト。
システムの振る舞いの面から見て、最も原始的な単位。
オブジェクト指向ではクラスに対して単体テストを用意する。
実行に0.1秒もかかる単体テストは、遅い単体テストである
上位レベルのテスト
アプリケーションのシナリオや相互作用を対象とするテスト
依存関係
ソフトウェア開発における最も重大な問題の一つ。レガシーコードを扱うときには大抵、変更を容易にするために依存関係を排除する必要がある。
検出と分離
検出
コードの計算した値にアクセスできない時に、それを検出するために依存関係を排除する
分離
コードをテストハーネスに入れて実行することすらできない時、分離するために依存関係を排除する
接合モデル
接合部(seam)とは、その場所を直接編集しなくても、プログラムの振る舞いを変えることのできる場所
ソフトウェアを接合部という観点から見ることで、コードにすでに含まれている依存関係を排除するための手がかりを見出すことが可能になる。
ラップメソッド
既存のメソッドに振る舞いを追加することは簡単にできますが、多くの場合において、正しい方法ではない。
ラップメソッドは、新しい要件を追加しつつ、接合部を導入する優れた方法。
ラップクラスとDecoraterパターン