基本情報技術者 2015年 秋期 午前(科目A) 問49
問題文
ソースコードやオブジェクトコードを解析して、プログラムの仕様と設計の情報を取り出す手法はどれか。
選択肢
ア:リエンジニアリング
イ:リストラクチャリング
ウ:リバースエンジニアリング(正解)
エ:リファクタリング
ソースコードやオブジェクトコードを解析して、プログラムの仕様と設計の情報を取り出す手法はどれか。 【午前2 解説】
要点まとめ
- 結論:ソースコードやオブジェクトコードを解析して仕様や設計情報を取り出す手法はウのリバースエンジニアリングであり、設計復元が主要な目的です。
- 根拠:リバースエンジニアリングはソースやバイナリから振る舞いや設計を解析・抽出する活動で、ドキュメントがない既存システムの仕様復元に用います。
- 差がつくポイント:リファクタリング/リストラクチャリング/リエンジニアリングと目的が似て見えるため、問いの「解析して情報を取り出す」という表現で解析系(リバース)を選ぶのが正解の鍵です。
正解の理由
正解は ウ(リバースエンジニアリング)です。
問題文は「ソースコードやオブジェクトコードを解析して、プログラムの仕様と設計の情報を取り出す」と明記しており、これは既存成果物(ソースやバイナリ)から仕様や設計を抽出・復元する活動を指します。リバースエンジニアリングはまさにこの定義に合致します。対して他の選択肢は主に「構造改善」や「再構築」「設計変更」を目的とする用語であり、直接的に解析して情報を取り出す行為を指しません。
問題文は「ソースコードやオブジェクトコードを解析して、プログラムの仕様と設計の情報を取り出す」と明記しており、これは既存成果物(ソースやバイナリ)から仕様や設計を抽出・復元する活動を指します。リバースエンジニアリングはまさにこの定義に合致します。対して他の選択肢は主に「構造改善」や「再構築」「設計変更」を目的とする用語であり、直接的に解析して情報を取り出す行為を指しません。
よくある誤解
- 「リファクタリング=リバースエンジニアリング」と混同する誤解:リファクタリングはソースの内部構造を改善する行為で、設計情報の抽出が目的ではありません。
- 「リエンジニアリング=解析だけ」と思う誤解:リエンジニアリングは既存システムを改修・再設計する一連の工程で、リバースエンジニアリングを含むことはありますが目的が異なります。
- 「オブジェクトコード解析は無理」と考える誤解:バイナリ解析や逆アセンブル/逆コンパイルを使えば、オブジェクトコードからでも設計手がかりを得られます(ただし完全ではありません)。
解法ステップ
- 問題文のキーワードを抽出:「ソースコードやオブジェクトコードを解析」「仕様と設計の情報を取り出す」。
- 各選択肢の定義を短く確認:リバース=解析・復元、リファクタリング=内部改善、リストラクチャリング=構造変換、リエンジニアリング=再設計・改修。
- 目的に最も合致する語を選ぶ:解析して情報を取り出す=リバースエンジニアリング→ウ。
選択肢別の誤答解説
- ア: リエンジニアリング
説明:既存システムを新しい仕様やアーキテクチャに合わせて再設計・再構築する工程全体を指します。リバース工程を含むことはありますが、問いの「解析して情報を取り出す」だけを指す語ではありません。 - イ: リストラクチャリング
説明:ソフトウェアの構造(構成やモジュール分割)を整理・再編する意味合いが強く、内部構造の変更や整理が目的であって、仕様や設計情報の抽出そのものを指す言葉ではありません。 - ウ: リバースエンジニアリング
説明:正解。ソースやオブジェクト(バイナリ)を解析して振る舞い・設計・仕様を復元する活動を指します。逆アセンブルや逆コンパイル、静的/動的解析を活用します。 - エ: リファクタリング
説明:ソースコードの内部構造を改善して可読性や保守性を高める行為であり、外部仕様を変更せずに実施します。解析して情報を取り出す目的とは異なります。
補足コラム
- ツール例:バイナリ解析はGhidra、IDA Pro、逆コンパイラではJadxやJD-GUI、静的解析ツールやデバッガ(gdb, WinDbg)を併用します。
- 用途:レガシーシステムの仕様復元、文書化、自動化移行、マルウェア解析などで広く使われます。
- 注意点:法的・倫理的制約に注意が必要です。ライセンスや契約で逆解析が禁じられている場合や、第三者の知的財産を侵害する恐れがあります。
- 限界:バイナリから完全な高水準設計を得るのは困難で、得られる情報は断片的であることが多い点を理解しておきましょう。
FAQ
Q1. リバースエンジニアリングとリエンジニアリングの違いは?
A1. リバースは解析・復元が主目的、リエンジニアリングは既存システムの再設計・改修(場合によってはリバースを含む)です。
A1. リバースは解析・復元が主目的、リエンジニアリングは既存システムの再設計・改修(場合によってはリバースを含む)です。
Q2. リバースエンジニアリングはソースがなくてもできる?
A2. できます。オブジェクトコード(バイナリ)を解析して挙動や設計の手がかりを得る手法が存在しますが、ソースがある場合より困難です。
A2. できます。オブジェクトコード(バイナリ)を解析して挙動や設計の手がかりを得る手法が存在しますが、ソースがある場合より困難です。
Q3. リファクタリングとリストラクチャリングは同じ?
A3. 両者は似ていますが、リファクタリングはソースレベルで振る舞いを変えずに改善することを強調し、リストラクチャリングはより広い構造再編や統合を含む場合があります。
A3. 両者は似ていますが、リファクタリングはソースレベルで振る舞いを変えずに改善することを強調し、リストラクチャリングはより広い構造再編や統合を含む場合があります。
Q4. 試験での解法のコツは?
A4. 問題文の「目的語」(解析して情報を取り出す/改修する/構造を改善する)に注目して、目的に最も合致する用語を選んでください。
A4. 問題文の「目的語」(解析して情報を取り出す/改修する/構造を改善する)に注目して、目的に最も合致する用語を選んでください。
関連キーワード: リバースエンジニアリング、リファクタリング、リエンジニアリング、リストラクチャリング、逆コンパイル、静的解析、動的解析、バイナリ解析、設計復元、ソフトウェア保守

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

