リファクタリングとは

リファクタリングの概要、およびメリットなどをご紹介

リファクタリングの概要

リファクタリング(ソースコード・リファクタリング)とは、一言でいえばソフトウェアの機能を変更することなく、ソースコードをブラッシュアップすることです。

リファクタリングの主な目的は、ソースコードを保守しやすく、かつ理解しやすいものにすることにあります。たとえば、「a」や「b」といった無意味な変数名を「item_name」「item_price」などの分かりやすい名前に変更することで、開発者本人以外でも分かりやすいコードにすることができます。

リファクタリングを行うメリット

リファクタリングには、以下に述べるようなメリットがあります。

  • コードが理解しやすくなる
    前述の通り、変数名やメソッド名、関数名などを意味のあるものに置き換えることで、誰にでも分かりやすいソースコードになります。
  • ソフトウェアの品質が向上する
    リファクタリングによって分かりやすいソースコードに置き換えることで、バグが混入しにくいソフトウェアを作ることができます。また、リファクタリングを行う過程でソースコードへの理解が深まり、早期におけるバグの発見に繋げられるというメリットもあります。
  • 保守性(メンテナンス性)が向上する
    複雑で理解しづらいコードは、再利用やメンテナンスにコストがかかります。
    例えば、ある開発者が書いたソースコードを別の開発者が解読し、修正を施すことを想像してみてください。保守プロジェクトではこうしたことは日常茶飯事ですが、この時、ソースコードが書いた本人にしか理解できないような複雑なものであったらどうでしょう。このようなソースコードを修正するのは、ゼロからソフトウェアを作成するよりも遥かに手間と時間がかかります。

リファクタリングにより理解しやすいソースコードに置き換えることで、将来的なメンテナンスにおけるコストを削減することが可能です。

静的コード解析ツール「Klocwork(クロックワーク)」で
理想的なリファクタリングを実現

静的コード解析ツール「Klocwork(クロックワーク)」には、Visual StudioやEclipse等の開発環境に統合可能な、パワフルなリファクタリング機能が搭載されています。Klocworkのリファクタリング機能を利用すれば、変数名や関数名の置き換え、変数のインライン化などを手軽に行うことが可能です。

手動によるリファクタリングにはそれなりのコストがかかるため、通常はリファクタリングにかかるコストと得られるメリットを比較した上で、実施の要否が検討されます。
KlocworkのC/C++リファクタリング機能はVisual StudioやEclipseなどの開発環境に統合可能で、コーディングフェーズにおけるパワフルなリファクタリングを可能とします。デスクトップ上で簡単に使用できるため、開発者のコーディング作業を妨げません。このため、納期やリソースに制約のある厳しいプロジェクトにおいても、リファクタリングのメリットを十分に感じていただけることでしょう。

Klocworkで利用可能なリファクタリング機能

  • エンティティの名前の変更
    識別子名をより分かりやすいものにします。
  • メソッドまたは関数の抽出 (EclipseおよびVisual Studioでの重複検出)
    長大で不便な関数から機能を抽出し、小規模で論理的な関数を作成します。
    抽出された関数はソースファイルに追加され、選択したコードが新しい関数の呼び出しに自動的に置換されます。
  • 変数の導入 (EclipseおよびVisual Studioでの重複検出)
    複雑な式を変数に置換して簡略化します。
  • インライン変数
    与えられた変数のすべての出現箇所を初期値に置換します。これは、前述した変数の導入の逆の処理です。
  • インライン関数
    過度にセグメント化されたソースレイアウトのオーバーヘッドを削除します。
    インライン化の典型的な候補は数箇所の異なる場所から呼び出される単関数ですが、内部ループからの呼び出しなど、実行時に頻繁に呼び出される場合もあり得ます。これらの関数呼び出しからオーバーヘッドを削除することで、パフォーマンス向上などの大きな利点を得ることができます。
    インライン関数のリファクタリングには、メソッド・ボディの呼び出し側をボディに配置する処理、およびメソッドの削除処理が含まれます。
  • ヘッダーの解析
    includeの欠落や不要なincludeを検出します。
  • ヘッダーの最適化
    使用していないヘッダーや欠落した推移的ヘッダーの変更を、ユーザー確認なしにすべてワンステップで適用します。