前編 リファクタリングとVisual Studio

コードメトリックスの例(VS 2017 Communityエディション)TDDの例題によく取り上げられる「FizzBuzz」プログラムである。左側が元のコード、右側がリファクタリング後のコードだ。リファクタリングによってif文の入れ子が解消し、条件式をメソッドに切り出したことで「3と5の倍数のときは"Fizz Buzz"を、3の倍数のときは"Fizz"を、5の倍数のときは"Buzz"を、それ以外のときは数字を返す」というFizz Buzzのロジックが分かりやすくなった(切り出したメソッド名は、日本語圏以外の人にも見せる可能性のあるコードの場合は、分かりやすさを多少犠牲にしてもIsMultipleOf3などとしなければならない)。コードメトリックスを計算する機能は、Communityエディション以上のVS 2017に搭載されている。この画像はCommunityエディションである。ソリューションに含まれる全てのプロジェクトのコードメトリックスを計算させるには、ソリューションエクスプローラーでソリューション名を右クリックし、出てきたコンテキストメニューで[コードメトリックスを計算する]を選ぶ。しばらくするとコードメトリックスが表示される(画像の下側)。ここではリファクタリング前後のコードメトリックスを一度に示すために、リファクタリング前後のそれぞれをあえて別のプロジェクトとしている。このリファクタリングによって、保守容易性指数は73から81へと向上している。ただし、サイクロマティック複雑度(コードパスの複雑さ)は6から9へと悪化してしまった。また、本文に書いたように、読みやすくしたのに保守容易性指数は下がってしまうこともある。現在のところ、コードメトリックスは参考として、メンテナンスしやすさの判断は人間の主観によるしかなさそうだ。なお、参考とはいえ、コードメトリックスの結果を無視しないでほしい。保守容易性指数の欄が赤くなったら、リファクタリングが必要だというサインだ(この画像では2つとも緑色だが、保守容易性指数が下がると黄色から赤色に変わっていく)。

コードメトリックスの例(VS 2017 Communityエディション)TDDの例題によく取り上げられる「FizzBuzz」プログラムである。左側が元のコード、右側がリファクタリング後のコードだ。リファクタリングによってif文の入れ子が解消し、条件式をメソッドに切り出したことで「3と5の倍数のときは"Fizz Buzz"を、3の倍数のときは"Fizz"を、5の倍数のときは"Buzz"を、それ以外のときは数字を返す」というFizz Buzzのロジックが分かりやすくなった(切り出したメソッド名は、日本語圏以外の人にも見せる可能性のあるコードの場合は、分かりやすさを多少犠牲にしてもIsMultipleOf3などとしなければならない)。コードメトリックスを計算する機能は、Communityエディション以上のVS 2017に搭載されている。この画像はCommunityエディションである。ソリューションに含まれる全てのプロジェクトのコードメトリックスを計算させるには、ソリューションエクスプローラーでソリューション名を右クリックし、出てきたコンテキストメニューで[コードメトリックスを計算する]を選ぶ。しばらくするとコードメトリックスが表示される(画像の下側)。ここではリファクタリング前後のコードメトリックスを一度に示すために、リファクタリング前後のそれぞれをあえて別のプロジェクトとしている。このリファクタリングによって、保守容易性指数は73から81へと向上している。ただし、サイクロマティック複雑度(コードパスの複雑さ)は6から9へと悪化してしまった。また、本文に書いたように、読みやすくしたのに保守容易性指数は下がってしまうこともある。現在のところ、コードメトリックスは参考として、メンテナンスしやすさの判断は人間の主観によるしかなさそうだ。なお、参考とはいえ、コードメトリックスの結果を無視しないでほしい。保守容易性指数の欄が赤くなったら、リファクタリングが必要だというサインだ(この画像では2つとも緑色だが、保守容易性指数が下がると黄色から赤色に変わっていく)。