リファクタリングとは?動作を変えずにコードを改善する考え方

リファクタリングでコードの内部構造を整理し、テストで動作を確認する仕組みを示すITパスポート学習用アイキャッチ

結論:リファクタリングは、外から見えるプログラムの動作を変えずに、内部のコードを読みやすく・直しやすく整えることです。新しい機能を加えることや、不具合を直すこととは目的が異なります。ITパスポートでは、変更を続ける開発で品質を保つための改善として理解しましょう。

目次

リファクタリングとは

ソフトウェアは、機能追加や仕様変更を重ねるうちに、同じ処理が複数の場所に書かれたり、処理の意図が読み取りにくくなったりします。この状態のまま変更を続けると、修正漏れや予期しない影響が起きやすくなります。

リファクタリングでは、重複した処理をまとめる、変数やメソッドに意味が伝わる名前を付ける、長すぎる処理を役割ごとに分ける、といった見直しをします。利用者が画面で行える操作や、プログラムが返す結果を変えない点が前提です。IPAのITパスポート試験シラバスVer.6.5でも、アジャイル開発の関連用語としてリファクタリングが挙げられています。

仕組み:小さく直して動作を確かめる

  1. 改善したい部分を絞る:重複、分かりにくい名前、長い処理など、変更しにくくしている箇所を確認します。
  2. 振る舞いを把握する:今のプログラムが満たすべき条件と、確認に使えるテストを用意します。
  3. 一度に一つずつ整える:処理の分割や名前の変更などを小さな単位で行います。
  4. テストで確認する:変更の前後で期待する結果が同じかを確認し、問題があれば原因を切り分けます。

大きく書き換えてからまとめて確認するのではなく、小さな改善と確認を繰り返すことで、どの変更が影響したかを追いやすくなります。テストはリファクタリングそのものではありませんが、動作を変えていないことを確認する重要な手段です。

バグ修正・機能追加との違い

作業 主な目的 利用者から見える動作
リファクタリング 内部構造を整え、保守しやすくする 変えない
バグ修正 期待と異なる動作を正しくする 変わる
機能追加 できることを増やす 変わる

例えば、注文合計を計算する処理が複数の画面に重複している場合、共通の処理にまとめて結果が同じならリファクタリングです。消費税の計算誤りを直して合計が正しく変わるならバグ修正です。割引コードの入力欄を新しく追加するなら機能追加です。目的と結果を分けて考えると、設問でも区別できます。

仕事と日常生活での見方

仕事では、社内の申請システムに新しい申請種類を追加する前に、同じ入力チェックが画面ごとに重複していることがあります。先にチェック処理を共通化し、既存の申請が従来どおり通ることをテストで確認すれば、次の変更を加えやすくなります。これは機能を増やす前に、変更しやすい状態をつくる考え方です。

日常生活では、家計を集計する表計算で、月ごとに似た計算式を個別に書いている状態を考えます。集計用のセルや参照範囲を整理して、同じ合計が出ることを確認できれば、翌月からの修正を減らせます。ただし、集計の対象を増やして合計が変わる作業は、整理ではなく機能変更です。

ITパスポートの試験で押さえる点

  • リファクタリングの目的は、外部の振る舞いを変えずに内部構造を改善することです。
  • テストは、改善後にも期待どおり動くことを確認するために使います。
  • バグ修正や機能追加は利用者から見える結果を変えるため、リファクタリングと区別します。
  • アジャイル開発やXPでは、変更を続けながら品質を保つ実践の一つとして関連付けます。

確認問題

問題:既存システムの処理を、利用者が受け取る結果を変えずに分かりやすい構造へ整理し、テストで従来どおり動くことを確認した。この作業として最も適切なものはどれですか。

  1. リファクタリング
  2. バグ修正
  3. 機能追加
  4. 要件定義

答え:1. リファクタリングです。外から見える動作を維持したまま、内部の構造を改善しているためです。

次に読む関連記事

XPとは?短い開発サイクルと継続的な改善を重視する手法では、リファクタリングがXPの実践とどう結び付くかを確認できます。

アジャイル開発とは?ITパスポートで押さえる特徴とウォーターフォールとの違いを読むと、小さな変更を繰り返す開発全体の考え方を整理できます。

単体テストとは?プログラムの部品ごとに確認する方法では、改善後も動作を保てているかを確認する基本を学べます。

結合テストとは?複数の部品を組み合わせて確認する方法では、部品間の連携に影響がないかを確かめる視点を補えます。

目次