リファクタリング 既存のコードを安全に改善する(第2版)

前表紙
株式会社 オーム社, 2019/11/29 - 456 ページ

ソフトウェア開発の名著、第2版登場!

 リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。

 本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。


はじめに

リファクタリングとは?

本書の内容

本書の対象読者

先人の礎の上に

謝辞


第1章 リファクタリング――最初の例

スタート地点

着手前のコメント

リファクタリングの第一歩

statement関数の分割

現況:入れ子になった関数がたくさん

計算とフォーマットにフェーズを分割

現況:二つのファイル(とフェーズ)への分離

型による計算処理の再編成

現況:ポリモーフィックなCalculatorでデータを作成

まとめ


第2章 リファクタリングの原則

リファクタリングの定義

二つの帽子

リファクタリングを行う理由

いつリファクタリングをすべきか

リファクタリングの問題点

リファクタリングとアーキテクチャ、そしてYagni

リファクタリングとソフトウェア開発プロセス

リファクタリングとパフォーマンス

リファクタリングの起源

自動化されたリファクタリング

さらに興味のある方へ


第3章 コードの不吉な臭い

不可思議な名前

重複したコード

長い関数

長いパラメータリスト

グローバルなデータ

変更可能なデータ

変更の偏り

変更の分散

特性の横恋慕

データの群れ

基本データ型への執着

重複したスイッチ文

ループ

怠け者の要素

疑わしき一般化

一時的属性

メッセージの連鎖

仲介人

インサイダー取引

巨大なクラス

クラスのインタフェース不一致

データクラス

相続拒否

コメント


第4章 テストの構築

自己テストコードの意義

テストのためのサンプルコード

最初のテスト

テストの追加

フィクスチャの変更

境界値の検査

これより先には


第5章 カタログの紹介

リファクタリングのフォーマット

リファクタリングの選択


第6章 リファクタリングはじめの一歩

関数の抽出

関数のインライン化

変数の抽出

変数のインライン化

関数宣言の変更

変数のカプセル化

変数名の変更

パラメータオブジェクトの導入

関数群のクラスへの集約

関数群の変換への集約

フェーズの分離


第7章 カプセル化

レコードのカプセル化

コレクションのカプセル化

オブジェクトによるプリミティブの置き換え

問い合わせによる一時変数の置き換え

クラスの抽出

クラスのインライン化

委譲の隠蔽

仲介人の除去

アルゴリズムの置き換え


第8章 特性の移動

関数の移動

フィールドの移動

ステートメントの関数内への移動

ステートメントの呼び出し側への移動

関数呼び出しによるインラインコードの置き換え

ステートメントのスライド

ループの分離

パイプラインによるループの置き換え

デッドコードの削除


第9章 データの再編成

変数の分離

フィールド名の変更

問い合わせによる導出変数の置き換え

参照から値への変更

値から参照への変更


第10章 条件記述の単純化

条件記述の分解

条件記述の統合

ガード節による入れ子の条件記述の置き換え

ポリモーフィズムによる条件記述の置き換え

特殊ケースの導入

アサーションの導入


第11章 APIのリファクタリング

問い合わせと更新の分離

パラメータによる関数の統合

フラグパラメータの削除

オブジェクトそのものの受け渡し

問い合わせによるパラメータの置き換え

パラメータによる問い合わせの置き換え

setterの削除

ファクトリ関数によるコンストラクタの置き換え

コマンドによる関数の置き換え

関数によるコマンドの置き換え


第12章 継承の取り扱い

メソッドの引き上げ

フィールドの引き上げ

コンストラクタ本体の引き上げ

メソッドの押し下げ

フィールドの押し下げ

サブクラスによるタイプコードの置き換え

サブクラスの削除

スーパークラスの抽出

クラス階層の平坦化

委譲によるサブクラスの置き換え

委譲によるスーパークラスの置き換え


文献リスト

訳者あとがき

索引

著者および寄稿者紹介(原稿執筆当時)

訳者紹介

奥付

リファクタリングリスト

不吉な臭いと、対処する一般的リファクタリング

 

レビュー - レビューを書く

レビューが見つかりませんでした。

ページのサンプル

目次

問い合わせによる一時変数の置き換え
185
クラスの抽出
189
クラスのインライン化
193
委譲の隠蔽
196
仲介人の除去
199
アルゴリズムの置き換え
202
第8章特性の移動
205
関数の移動
206

ポリモーフィックなCalculatorでデータを作成
41
まとめ
43
第2章リファクタリングの原則
45
二つの帽子
46
リファクタリングを行う理由
47
いつリファクタリングをすべきか
50
リファクタリングの問題点
56
リファクタリングとアーキテクチャそしてYagni
63
リファクタリングとソフトウェア開発プロセス
64
リファクタリングとパフォーマンス
65
リファクタリングの起源
68
自動化されたリファクタリング
70
さらに興味のある方へ
71
第3章コードの不吉な臭い
73
不可思議な名前
74
長い関数
75
長いパラメータリスト
76
変更可能なデータ
77
変更の偏り
78
変更の分散
79
データの群れ
80
重複したスイッチ文
81
ループ
82
一時的属性
83
仲介人
84
クラスのインタフェース不一致
85
相続拒否
86
第4章テストの構築
89
テストのためのサンプルコード
91
最初のテスト
95
テストの追加
97
フィクスチャの変更
100
境界値の検査
101
これより先には
104
第5章カタログの紹介
107
リファクタリングの選択
108
第6章リファクタリングはじめの一歩
111
関数の抽出
112
関数のインライン化
121
変数の抽出
125
変数のインライン化
129
関数宣言の変更
130
変数のカプセル化
138
変数名の変更
143
パラメータオブジェクトの導入
146
関数群のクラスへの集約
150
関数群の変換への集約
155
フェーズの分離
160
第7章カプセル化
167
レコードのカプセル化
168
コレクションのカプセル化
176
オブジェクトによるプリミティブの置き換え
181
フィールドの移動
215
ステートメントの関数内への移動
221
ステートメントの呼び出し側への移動
225
関数呼び出しによるインラインコードの置き換え
230
ステートメントのスライド
231
ループの分離
236
パイプラインによるループの置き換え
240
デッドコードの削除
246
第9章データの再編成
247
変数の分離
248
フィールド名の変更
252
問い合わせによる導出変数の置き換え
256
参照から値への変更
260
値から参照への変更
264
第10章条件記述の単純化
267
条件記述の分解
268
条件記述の統合
271
ガード節による入れ子の条件記述の置き換え
274
ポリモーフィズムによる条件記述の置き換え
279
特殊ケースの導入
296
アサーションの導入
309
第11章 APIのリファクタリング
313
問い合わせと更新の分離
314
パラメータによる関数の統合
318
フラグパラメータの削除
322
オブジェクトそのものの受け渡し
327
問い合わせによるパラメータの置き換え
332
パラメータによる問い合わせの置き換え
335
setterの削除
339
ファクトリ関数によるコンストラクタの置き換え
342
コマンドによる関数の置き換え
345
関数によるコマンドの置き換え
352
第12章継承の取り扱い
357
メソッドの引き上げ
358
フィールドの引き上げ
361
コンストラクタ本体の引き上げ
363
メソッドの押し下げ
367
フィールドの押し下げ
368
サブクラスによるタイプコードの置き換え
369
サブクラスの削除
376
スーパークラスの抽出
382
クラス階層の平坦化
387
委譲によるサブクラスの置き換え
388
委譲によるスーパークラスの置き換え
407
文献リスト
413
訳者あとがき
419
索引
421
著者および寄稿者紹介原稿執筆当時
433
訳者紹介
434
奥付
435
リファクタリングリスト
436
不吉な臭いと対処する一般的リファクタリング
438

他の版 - すべて表示

多く使われている語句

書誌情報