リファクタリング覚え書き①


記事の概要

リファクタリング 既存のコードを安全に改善する の内容まとめ。
・ サンプルコードは全て本書のものをそのまま記載しています。

リファクタリングとは

リファクタリング = ソフトウェアの外部の振る舞いを変えずに内部品質(可読性・拡張性・再利用性等)を改善すること。仕様や機能は一切変更しないことが前提とされます。(リファクタリング前に存在していたバグはリファクタリング後にも残っているべきと言われます。)

外部的な振る舞いが変わっていないことを担保するため、リファクタリングにおいてはユニットテストが重視されています。ユニットテストが書かれていない場合リファクタリングの前にユニットテストを作成する必要があります。
(※ リファクタリングするためにはテストが必要だけれども、テストを書くためにはプログラムがテストしやすい(=ある程度リファクタリングされている)必要があるという卵が先か鶏が先かみたいな話だなあ...と思いました。 )

リファクタリングの目的

  1. ソースコードの可読性を向上させる

ソースコードは書かれる時間よりも読まれる時間の方が長いものなので、読みやすいに越したことはありません。
上手くリファクタリングすれば他のメンバーや未来の自分が楽になります。

  1. バグを見つけやすくする

コードが読みやすくなる→バグの所在が分かりやすくなる。
また、ユニットテストがあればバグを早く正確に検知することができます。

  1. プログラムの開発速度を上げる

リファクタリングは機能追加の速度を犠牲にしてコードの品質を上げる作業と思われがちですが、高品質なプログラムは理解しやすく、変更しやすいため機能開発もしやすくなります。(ただ、リファクタリングがどのくらいの期間で「モトが取れる」のか定量的なデータが本書にはありませんでした。)

感想

・安全にリファクタリングを行うにはユニットテストが重要であるのは納得できました。ただ、ユニットテストが無い場合はどうすればよいか分かりませんでした。
・リファクタリング=機能追加速度を落とすというイメージがありましたが、逆に機能追加を簡単にするという効果があるという認識を持ちました。一方で、開発納期に余裕が無い状況ではある程度コード品質が落ちるのも致し方ないような気もします。