リファクタリング 既存のコードを安全に改善する 第2版
オーム社
著者:Martin Fowler
訳者:児玉公信、友野晶夫、平澤章、梅澤真史
目次
初版の「本書に寄せて」
はじめに
第1章 リファクタリング―最初の例
スタート地点
着手前のコメント
リファクタリングの第一歩
statement 関数の分割
現況:入れ子になった関数がたくさん
計算とフォーマットにフェーズを分割
現況:二つのファイル(とフェーズ)への分離
型による計算処理の再編成
現況:ポリモーフィックなCalculator でデータを作成
まとめ
第2章 リファクタリングの原則
リファクタリングの定義
二つの帽子
リファクタリングを行う理由
いつリファクタリングをすべきか
リファクタリングの問題点
リファクタリングとアーキテクチャ、そしてYagni
リファクタリングとソフトウェア開発プロセス
リファクタリングとパフォーマンス
リファクタリングの起源
自動化されたリファクタリング
さらに興味のある方へ
第3章 コードの不吉な臭い
不可思議な名前
重複したコード
長い関数
長いパラメータリスト
グローバルなデータ
変更可能なデータ
変更の偏り
変更の分散
特性の横恋慕
データの群れ
基本データ型への執着
重複したスイッチ文
ループ
怠け者の要素
疑わしき一般化
一時的属性
メッセージの連鎖
仲介人
インサイダー取引
巨大なクラス
クラスのインタフェース不一致
データクラス
相続拒否
コメント
第4章 テストの構築
自己テストコードの意義
テストのためのサンプルコード
最初のテスト
テストの追加
フィクスチャの変更
境界値の検査
これより先には
第5章 カタログの紹介
リファクタリングのフォーマット
リファクタリングの選択
第6章 リファクタリングはじめの一歩
関数の抽出
関数のインライン化
変数の抽出
変数のインライン化
関数宣言の変更
変数のカプセル化
変数名の変更
パラメータオブジェクトの導入
関数群のクラスへの集約
関数群の変換への集約
フェーズの分離
第7章 カプセル化
レコードのカプセル化
コレクションのカプセル化
オブジェクトによるプリミティブの置き換え
問い合わせによる一時変数の置き換え
クラスの抽出
クラスのインライン化
委譲の隠蔽
仲介人の除去
アルゴリズムの置き換え
第8章 特性の移動
関数の移動
フィールドの移動
ステートメントの関数内への移動
ステートメントの呼び出し側への移動
関数呼び出しによるインラインコードの置き換え
ステートメントのスライド
ループの分離
パイプラインによるループの置き換え
デッドコードの削除
第9章 データの再編成
変数の分離
フィールド名の変更
問い合わせによる導出変数の置き換え
参照から値への変更
値から参照への変更
第10章 条件記述の単純化
条件記述の分解
条件記述の統合
ガード節による入れ子の条件記述の置き換え
ポリモーフィズムによる条件記述の置き換え
特殊ケースの導入
アサーションの導入
第11章 API のリファクタリング
問い合わせと更新の分離
パラメータによる関数の統合
フラグパラメータの削除
オブジェクトそのものの受け渡し
問い合わせによるパラメータの置き換え
パラメータによる問い合わせの置き換え
setter の削除
ファクトリ関数によるコンストラクタの置き換え
コマンドによる関数の置き換え
関数によるコマンドの置き換え
第12章 継承の取り扱い
メソッドの引き上げ
フィールドの引き上げ
コンストラクタ本体の引き上げ
メソッドの押し下げ
フィールドの押し下げ
サブクラスによるタイプコードの置き換え
サブクラスの削除
スーパークラスの抽出
クラス階層の平坦化
委譲によるサブクラスの置き換え
委譲によるスーパークラスの置き換え
文献リスト
訳者あとがき
索引
著者および寄稿者紹介(原稿執筆当時)
リファクタリングリスト