リファクタリングとテストと私

わかってたことだけど改めて気づいたのでまとめました

ポイントは

プログラム性能が悪くなってきたので性能改善のためにリファクタリングをすることになりました。何が遅いかというのはNewRelicを使ってわかってました。ビバNewRelic。

どこに注力してなおすか決めないとグダグダになるのは見えてたのでどうなったらいいのか?というゴールを決めましょう。
今回はNewRelicとプログラムを見ると特定の条件を満たすと、DBへのアクセス回数が多いのがわかったので、そこをどう減らすかというのに注力することに決めました。

SQL周りが絡んでくることと、かなり昔に作られてたコードだったので、最初に修正後の理想の状態の擬似コードをメモ書きしたら、複数の呼び出し元の処理まで変更がはいって(そしてテストコードがない)と数珠つなぎになってきました。この時点で理想の状態を一度横におきました。もちろん今の動きを無視してもいいけど、今のプログラムはそれなりに動いてるし。。。

まずは現状動くテストコードを書いてたらそれ自体が冗長になってきました。モックで振るまいを定義したら、モックの量が予想以上に増えてきたのです。ループの中で全く同じモック(例:キャッシュから定数値を取得する)を何度も呼び出す必要が出てきました。

自分が書いたコードが綺麗かどうかというのはレビューやCheckStyle,FindBugsとかでも潰せるけど、テストコードがシンプルというのもまた1つの指標なんだなーと改めて実感。

明日も続きだなぁ