レガシーコード改善ガイド(Michael C. Feathers)
書籍情報
- 著者:Michael C. Feathers(著), ウルシステムズ株式会社(訳), 平澤章(訳), 越智典子(訳), 稲葉信之(訳), 田村友彦(訳), 小堀真義(訳)
- 発行日:2009-07-13
- ISBN:9784798116839
- URL:https://www.shoeisha.co.jp/book/detail/9784798116839
書籍目次
- まえがき
- はじめに
- 謝辞
- 序文
- 第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 一般的なテストハーネス
- 第1章 ソフトウェアの変更
- 第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章 もうウンザリです。何も改善できません
- 第6章 時間がないのに変更しなければなりません
- 第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 テキストによる再定義
- 第25章 依存関係を排除する手法
- 付録A リファクタリング
- A1 メソッドの抽出
- 付録B 用語集
- 訳者あとがき
- 索引
- 著者紹介
- 訳者紹介