条件は読みやすいか
以下のように論理否定を使ったりすると読み替えるのが面倒
if customer.isEnabled?
if !customer.isEnabled?
したがって以下のように書き換える
if customer.isEnabled?
if customer.isDisabled?
ベタ書きロジックを目的を表すメソッドに置き換えているか
以下のように書いていると、理解に手間がかかる
if customer.posessionPoint.amount < comic.currentPurchasePoint.amount
したがって、以下のようにメソッドを用意すれば可読性が上がる。
def isShortofPoint(comic)
return customer.posessionPoint.amount < comic.currentPurchasePoint.amount
end
テストを使用しよう
テストコードを用いたリファクタリングの流れ
- あるべき構造の雛形クラスをある程度作る
- 雛形に対してテストコードを書く
- テストを失敗させる
4. テストを成功させるための最低限のコードを書く - 雛形クラス内部でリファクタリング対象のコードを呼び出す
- テストが成功するようあるべき構造へロジックを少しずつリファクタリングしていく
仕様化テスト
実際の現場では仕様がわからない開発も多々あります。そのような場合、仕様化テストが1つの有効な手段。
分析したいメソッドのテストを書き、そのメソッドがどんな挙動を示すかを明らかにする方法
いくつかメソッドに対するテストをかき、その結果からどのような挙動が類推し理解する。
IDEのリファクタリング機能
リネームやメソッド抽出などを利用してリファクタリングに活用する。
機能追加とリファクタリングを同時にしていないか
バグが発生した場合問題の切り分けが難しくなったり、コミットの目的が分からなくなったりするので同時にやることは避ける。