リファクタリングの意味と紛らわしい用語の見分け方
ITパスポート試験 令和5年度 問49 / ソフトウェア開発管理技術 › 開発プロセス・手法
過去問にチャレンジ
リファクタリングの説明として,適切なものはどれか。
- ア
ソフトウェアが提供する機能仕様を変えずに,内部構造を改善すること
- イ
ソフトウェアの動作などを解析して,その仕様を明らかにすること
- ウ
ソフトウェアの不具合を修正し,仕様どおりに動くようにすること
- エ
利用者の要望などを基に,ソフトウェアに新しい機能を加える修正をすること
会話形式の解説
講師今回はリファクタリングという開発用語の意味を問う問題です。選択肢には似た作業の説明が並んでいるので、「ソフトウェアの機能が外から見て変わるかどうか」に注目してください。
受験者リファクタリングは聞いたことがあります。「改善する」という意味なら、不具合を直す説明や新しい機能を加える説明も当てはまりそうで迷います。
講師そこが引っかけになりやすいところです。リファクタリングは、外から見た振る舞い、つまり機能は変えずに、プログラムの中身の構造だけを整える作業です。重複している処理を関数にまとめたり、変数名を分かりやすくしたりするのが例です。
受験者機能は同じままで中身を整えるのなら、機能仕様を変えずに内部構造を改善するという説明がぴったりですね。何のためにそうするのですか。
講師プログラムの読みやすさ(可読性)や、あとで直しやすいこと(保守性)を高めるためです。実務でも、中身が入り組んだプログラムは修正のたびに手間がかかるので、構造を整える意味は大きいです。
受験者不具合を修正して仕様どおりに動くようにする説明は、どうして違うのでしょうか。これも中身を直していると思うのですが。
講師それはデバッグ、つまりバグ修正に当たります。正しく動かない状態から正しく動く状態に変わるので、外から見た動作が変わります。振る舞いを変えないリファクタリングとは目的が違います。
受験者なるほど。利用者の要望をもとに新しい機能を加える説明も、機能が増えるので外から見て変わりますね。
講師そのとおりです。これはソフトウェア保守のうち、機能を追加・拡張する修正に当たります。外部の機能仕様が変わるので、リファクタリングではありません。
受験者残りの、動作を解析して仕様を明らかにする説明は何でしょうか。カタカナ語が多くて、どれがどれか混ざりそうです。
講師それはリバースエンジニアリングです。既にあるソフトウェアを調べて仕組みや仕様を知るための作業で、内部構造の改善を目的とするものではありません。「調べる」のがリバースエンジニアリング、「整える」のがリファクタリングと分けると覚えやすいです。
受験者整理すると、機能を変えずに中身を整えるのがリファクタリング、調べるのがリバースエンジニアリング、不具合を直すのがデバッグ、機能を足すのが保守の機能追加ということですね。
講師よく整理できています。補足すると、リファクタリングはアジャイル開発の文脈でも使われる用語です。「改善」という言葉に引きずられず、「機能が変わるかどうか」を基準にすると迷いにくくなります。
まとめ
リファクタリングとは、ソフトウェアの外から見た機能(振る舞い)を変えずに、内部構造を改善する作業です。目的は、プログラムの可読性や保守性を高めることです。動作を解析して仕様を明らかにするのはリバースエンジニアリング、不具合を直すのはデバッグ、要望をもとに機能を加えるのはソフトウェア保守の機能追加に当たります。不具合修正と機能追加は外部の動作が変わるので、リファクタリングとは区別します。迷ったときは「機能が変わるかどうか」で判断すると見分けやすくなります。
解答・解説
正解はアです
この問題のテーマ
ソフトウェア開発の用語「リファクタリング」の意味を問う問題です。あわせて、リバースエンジニアリング、デバッグ、ソフトウェア保守(機能追加)との違いが分かっているかも確かめています。
解き方の考え方
まず、リファクタリングは「外から見た振る舞い(機能)は変えずに、中身の構造だけを整える作業」だと押さえます。次に、各選択肢で外部の機能や仕様が変わるかどうかを見ます。機能が変わらず内部だけを改善するものがリファクタリングです。仕様を調べる、不具合を直す、機能を増やすといった作業は、目的が違う別の用語に当たると判断できます。
選択肢ごとの解説
- ○ア ソフトウェアが提供する機能仕様を変えずに,内部構造を改善すること機能仕様を変えずに内部構造を改善するというアの説明は、リファクタリングの定義そのものです。重複している処理を関数にまとめたり、変数名を分かりやすくしたりして、プログラムを読みやすく保守しやすくすることが目的です。
- ×イ ソフトウェアの動作などを解析して,その仕様を明らかにすること動作などを解析して仕様を明らかにするというイの説明は、リバースエンジニアリングに当たります。既にあるソフトウェアを調べて仕組みや仕様を知るための作業で、内部構造の改善を目的とするものではありません。
- ×ウ ソフトウェアの不具合を修正し,仕様どおりに動くようにすること不具合を直して仕様どおりに動くようにするというウの説明は、デバッグ(バグ修正)に当たります。正しく動かない状態から正しく動く状態に変えるので、外から見た動作が変わります。そのため、振る舞いを変えないリファクタリングとは目的が異なります。
- ×エ 利用者の要望などを基に,ソフトウェアに新しい機能を加える修正をすること利用者の要望をもとに新しい機能を加えるというエの説明は、ソフトウェア保守のうち機能を追加・拡張する修正に当たります。外部の機能仕様が変わるので、リファクタリングには当たりません。
補足
リファクタリングは、アジャイル開発に関連する用語として出題されることがあります。「改善」という言葉に引きずられて、不具合修正や機能追加を選ばないよう注意してください。見分けるときは「機能(外から見た動作)が変わるかどうか」を判断基準にすると迷いにくくなります。
POINT
- リファクタリングは、外から見た振る舞いを変えずに内部構造を改善する作業です。
- リファクタリングの目的は、プログラムの読みやすさ(可読性)や保守のしやすさ(保守性)を高めることです。
- 動作を解析して仕様を明らかにする作業はリバースエンジニアリングと呼びます。
- 不具合を修正する作業や機能を追加する作業は、外部の動作が変わるためリファクタリングとは区別します。
