ITパスポート 2023年 問39
問題文
運用中のソフトウェアの仕様書がないので、ソースコードを解析してプログラムの仕様書を作成した。この手法を何というか。
選択肢
ア:コードレビュー
イ:デザインレビュー
ウ:リバースエンジニアリング(正解)
エ:リファクタリング
🔒 解説は解答すると表示されます
運用中のソフトウェアの仕様書がないので、ソースコードを解析してプログラムの仕様書を作成した。この手法を何というか。【ITパスポート 解説】
正解の理由
選んだべき答えは ウ のリバースエンジニアリングです。
リバースエンジニアリング(reverse engineering:逆向きに設計をたどること)は、既にあるソフトウェアや製品から、その設計や仕様を解き明かす手法です。問題文では「仕様書がない」「ソースコード(プログラムを人が読める形で書いたファイル)を解析して仕様書を作成した」とあります。これはまさに既存の成果物(ソースコード)から仕様を導き出す行為なので、定義と一致します。
リバースエンジニアリング(reverse engineering:逆向きに設計をたどること)は、既にあるソフトウェアや製品から、その設計や仕様を解き明かす手法です。問題文では「仕様書がない」「ソースコード(プログラムを人が読める形で書いたファイル)を解析して仕様書を作成した」とあります。これはまさに既存の成果物(ソースコード)から仕様を導き出す行為なので、定義と一致します。
対して他の選択肢は目的が異なります。コードレビューやデザインレビューは品質確認のための手続きですし、リファクタリングは「振る舞いを変えずに内部を整理する行為」です。したがって、仕様を「作る(復元する)」という点で最も合うのは ウ です。
解法ステップ
- 問題文のキーワードを見つける
- 「仕様書がない」→既存の仕様が欠けている状況
- 「ソースコードを解析して仕様書を作成」→ソースコードから仕様を取り出す行為
- 各選択肢の意味を短く確認する
- コードレビュー:コードの品質や不具合をチェックする作業
- デザインレビュー:設計段階の設計書を評価する会議
- リバースエンジニアリング:既存物から設計や仕様を逆にたどる行為
- リファクタリング:動作を変えずに内部構造を改善する作業
- 意味が最も合致する選択肢を選ぶ
- 「既存のコードから仕様を書く」=リバースエンジニアリング → ウ
選択肢別の誤答解説
-
ア: コードレビュー
- 意味:複数人でソースコードを読み、不具合や読みやすさを指摘する作業。品質改善が目的です。
- なぜ不正解か:仕様を「復元して作成する」ことが主目的ではありません。
-
イ: デザインレビュー
- 意味:設計(デザイン)の段階で設計書をチェックする会議。事前評価が目的です。
- なぜ不正解か:設計書がある前提で評価する行為であり、既存のコードから仕様を取り出す行為ではありません。
-
ウ: リバースエンジニアリング
- 意味:既存のソフトウェアや製品を解析して、設計や仕様、構造を明らかにすること。ソースコードを読み解いて仕様書を作る行為そのものです。
-
エ: リファクタリング
- 意味:外から見た動作(振る舞い)を変えずに、コードの内部構造を改善すること。読みやすさや保守性を高める目的です。
- なぜ不正解か:仕様を抽出して文書化することが目的ではなく、あくまで内部の改善作業です。
よくある誤解
- 「ソースコードを読む=コードレビュー」と混同する
- コードを読む行為自体は両方に含まれることがありますが、目的が違います。コードレビューは品質確認、リバースエンジニアリングは仕様や設計の復元が目的です。
- リバースエンジニアリングは必ずしも違法ではないが注意が必要
- 解析自体は技術的手法ですが、著作権や契約(利用許諾)によって制限される場合があります。業務で行う際は権利関係を確認してください。
- 「リファクタリングで仕様が分かる」は誤り
- リファクタリングは設計を改善しますが、仕様を新たに文書化する作業とは性質が違います。
補足コラム
- よく使われる手法・ツール
- 静的解析(実行せずにコードやバイナリを調べる)。例:ソースコードの構造を解析するツール。
- 動的解析(プログラムを実行して挙動を観察する)。例:ログやトレースを取る。
- 逆コンパイラ(デコンパイラ):バイナリ(コンピュータが実行する機械語)を高級言語に近い形に戻すツール。ただし完全な元のソースには戻らないことが多いです。
- なぜリバースエンジニアリングが必要か
- 仕様書や設計書が紛失したレガシーシステムの保守。
- 他社製品の挙動を理解して相互運用を行う場合(ただし法的制約に注意)。
- 試験対策のコツ
- 「目的(何をするか)」で選ぶ練習をすること。問題文の目的語(仕様を作る、品質を確認する、構造を改善する)を見極めると選択肢が絞れます。
FAQ
Q1. リバースエンジニアリングはソースコードがない場合でもできる?
A1. はい。バイナリ(実行ファイル)を解析して挙動や構造を推定することも含まれますが、解析の難易度や結果の精度は下がります。
A1. はい。バイナリ(実行ファイル)を解析して挙動や構造を推定することも含まれますが、解析の難易度や結果の精度は下がります。
Q2. リバースエンジニアリングとデバッグは違う?
A2. 違います。デバッグはプログラムの不具合を見つけて修正する行為。リバースエンジニアリングは設計や仕様を明らかにする行為です。目的が異なります。
A2. 違います。デバッグはプログラムの不具合を見つけて修正する行為。リバースエンジニアリングは設計や仕様を明らかにする行為です。目的が異なります。
Q3. 業務でリバースエンジニアリングを行うときに気をつけることは?
A3. 著作権やライセンス、契約で制限されていないかを必ず確認してください。場合によっては許可が必要です。
A3. 著作権やライセンス、契約で制限されていないかを必ず確認してください。場合によっては許可が必要です。
関連キーワード: リバースエンジニアリング、逆解析、逆コンパイル、デコンパイラ、静的解析、動的解析、ソフトウェア保守、レガシーシステム、仕様書作成、コードレビュー、リファクタリング

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

