『レガシーコード改善ガイド』
https://images-na.ssl-images-amazon.com/images/I/91n2SO7bqnL.jpg
目次
第1部 変更のメカニズム
第1章 ソフトウェアの変更
1.1 ソフトウェア変更の4つの理由
1.2 危険な変更
第2章 フィードバックを得ながらの作業
2.1 単体テストとは
2.2 上位レベルのテスト
2.3 テストによる保護
2.4 レガシーコードの変更手順
第3章 検出と分離
3.1 協調クラスの擬装
第4章 接合モデル
4.1 巨大な用紙の文字の羅列
4.2 接合部
4.3 接合部の種類
第5章 ツール
5.1 自動リファクタリングツール
5.2 モックオブジェクト
5.3 単体テストハーネス
5.4 一般的なテストハーネス
第2部 ソフトウェアの変更
第6章 時間がないのに変更しなければなりません
6.1 スプラウトメソッド
6.2 スプラウトクラス
6.3 ラップメソッド
6.4 ラップクラス
6.5 まとめ
第7章 いつまで経っても変更作業が終わりません
7.1 理解すること
7.2 遅延時間
7.3 依存関係の排除
7.4 まとめ
第8章 どうやって機能を追加すればよいのでしょうか?
8.1 テスト駆動開発(TDD)
8.2 差分プログラミング
8.3 まとめ
第9章 このクラスをテストハーネスに入れることができません
9.1 いらだたしいパラメータ
9.2 隠れた依存関係
9.3 複雑な生成
9.4 いらだたしグローバルな依存関係
9.5 恐るべきインクルードの依存関係
9.6 玉ねぎパラメータ
6.7 別名のパラメータ
第10章 このメソッドをテストハーネスで動かすことができません
10.1 隠れたメソッド
10.2 言語の「便利な」機能
10.3 検出できない副作用
第11章 変更する必要がありますが、どのメソッドをテストすればよいのでしょうか?
11.1 影響の調査
11.2 前方向の調査
11.3 影響の伝播
11.4 影響調査のためのツール
11.5 影響スケッチの単純化
第12章 1ヶ所にたくさんの変更が必要ですが、関係するすべてのクラスの依存関係を排除すべきでしょうか?
12.1 割り込み点
12.2 絞り込み点で設計を判断する
12.3 絞り込み点の落とし穴
第13章 変更する必要がありますが、どんなテストを書けばよいのかわかりません
13.1 仕様化テスト
13.2 クラスの仕様を明らかにする
13.3 狙いを定めたテスト
13.4 仕様化テストを書くための経験則
第14章 ライブラリへの依存で身動きが取れません
第15章 私のアプリケーションはAPI呼び出しだらけです
第16章 変更できるほど十分に私はコードを理解していません
16.1 メモを取る/スケッチを描く
16.2 印を付ける
16.3 試行リファクタリング
16.4 使用していないコードを削除する
第17章 私のアプリケーションには構造がありません
17.1 システムのストーリーを話す
17.2 白紙のCRC
17.3 会話の吟味
第18章 自分のテストコードが邪魔になっています
18.1 クラスの命名規約
18.2 テストコードの配置
第19章 私のプロジェクトはオブジェクト指向ではありませんが、どうすれば安全に変更できるでしょうか?
19.1 簡単なケース
19.2 困難なケース
19.3 新しい振る舞いの追加
19.4 オブジェクト指向の長所の活用
19.5 すべてはオブジェクト指向
第20章 このクラスは大きすぎて、もうこれ以上大きくしたくありません
20.1 責務の把握
20.2 その他の技法
20.3 先へ進む
20.4 クラスの抽出後
第21章 同じコードをいたるところで変更しています
21.1 最初のステップ
第22章 モンスターメソッドを変更する必要がありますが、テストを書くことができません
22.1 モンスターの変種
22.2 自動リファクタリング機能でモンスターに立ち向かう
22.3 手作業によるリファクタリングに挑戦
22.4 戦略
第23章 どうすれば何も壊していないことを確認できるでしょうか?
23.1 超集中編集
23.2 単一目的の編集
23.3 シグネチャの維持
23.4 コンパイラまかせ
23.5 ペアプログラミング
第24章 もうウンザリです。何も改善できません
第3部 依存関係を排除する手法
第25章 依存関係を排除する手法
25.1 パラメータの適合
25.2 メソッドオブジェクトの取り出し
25.3 定義の補完
25.4 グローバル参照のカプセル化
25.5 静的メソッドの公開
25.6 呼び出しの抽出とオーバーライド
25.7 Factory Methodの抽出とオーバーライド
25.8 getメソッドの抽出とオーバーライド
25.9 実装の抽出
25.10 インタフェースの抽出
25.11 インスタンス委譲の導入
25.12 静的setメソッドの導入
25.13 リンクによる置き換え
25.14 コンストラクタのパラメータ化
25.15 メソッドのパラメータ化
25.16 パラメータのプリミティブ化
25.17 メソッドと変数の引き上げ
25.18 依存関係の押し出し
25.19 関数ポインタによる関数の置き換え
25.20 getメソッドによるグローバル参照の置き換え
25.21 サブクラス化とメソッドのオーバーライド
25.22 インスタンス変数の入れ替え
25.23 テンプレートによる再定義
25.24 テキストによる再定義
付録A リファクタリング
A1 メソッドの抽出
付録B 用語集