基本情報 平成27年度 春期 問49:テクノロジ系に関する問題
ソースコードやオブジェクトコードを解析して, プログラムの仕様と設計の情報 を取り出す手法はどれか。
- aりエツジダニアリング
- bリストラクチャリング
- cリバースエンジニアリング正答
- dリファクタリング
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは c「リバースエンジニアリング」 です。
リバース=「逆」、エンジニアリング=「作ること」。普通は[設計書→プログラム]の順なのを、逆に[プログラム→設計書]を取り出す手法です。
古いシステムで設計書を失くしてしまった…そんなとき、動いているプログラムを解析して仕様を“復元”します。料理で例えるなら「完成した料理を食べてレシピを当てる」感じ。
👉 覚え方:リバース=逆=出来上がりから仕様を取り出す。
ほかの選択肢:a リエンジニアリング=業務全体を作り直す/b リストラクチャリング=構造を整理する/d リファクタリング=動作を変えずにコードを綺麗にする。
なぜこれが正解か
正解は c。リバースエンジニアリング(Reverse Engineering)は、既存システムのソースコード・オブジェクトコードを解析して、設計仕様・データ構造・処理フローなどの上位情報を抽出する手法。設計文書を失った既存システム(レガシーシステム)の再生・移行・保守時に活用される。
各選択肢の解説
- a リエンジニアリング:業務プロセスや既存システムを抜本的に再構築する手法(BPR)。
- b リストラクチャリング:プログラムの構造を整理して保守性を向上させる手法。動作と外部仕様は変えない。
- d リファクタリング:プログラムの動作を変えずに内部構造を改善する手法(マーティン・ファウラー提唱)。
覚え方・ひっかけ注意
「リ-」で始まる紛らわしい4用語のセット暗記:リバース=逆解析/リストラクチャリング=構造整理/リファクタリング=内部改善/リエンジニアリング=抜本再構築。情報抽出の対象がコード→設計か、コード→より良いコードかで判別。
理論的背景
リバースエンジニアリングはソフトウェア進化(Software Evolution)研究の基幹手法。Chikofskyらの分類(1990)では「Forward Engineering(仕様→設計→実装)」の逆方向プロセスと定義され、抽出層により (1) 再ドキュメント化(コード→ドキュメント)、(2) 設計回復(コード→抽象設計)、(3) 仕様回復(コード→形式仕様)に細分化される。
実務での使われ方
レガシーマイグレーション(COBOL→Java、メインフレーム→クラウド)の前処理として必須。ツール例:(1) Eclipse MoDisco(モデル抽出)、(2) Understand(コード解析)、(3) IDA Pro/Ghidra(バイナリ逆解析)、(4) JD-GUI/JADX(Javaバイトコード逆コンパイル)。マルウェア解析・セキュリティ研究でも中核技術(バイナリ解析)。
法的側面:日本国内では著作権法47条の2(リバースエンジニアリング目的の複製)で限定的に許容。海外ライセンス(EULA)で禁止条項がある場合は要注意。EU指令ではセキュリティ研究目的は広く認められる。
試験での位置づけ
ソフトウェア工学・保守分野の頻出語。基本情報・応用情報・システム監査・情報処理安全確保支援士でセット出題。リエンジニアリング(業務プロセス再構築)と混同しやすいので要注意。
選択肢の発展補足
- リファクタリング(d):Martin Fowler『リファクタリング』(1999年)の体系。「動作を変えずに内部構造を改善」が定義。Extract Method/Rename Variable/Pull Up Method等のカタログ化されたパターンがある。
- リストラクチャリング(b):構造化されていないGOTO多用コードを構造化制御(if/while)に書き換える等、保守性向上目的の構造変換。
- リエンジニアリング(a):BPR(Business Process Reengineering)と同義の文脈もある。マイケル・ハマー提唱の業務革新手法。
- 関連:レガシーリプレースメント、レガシーモダナイゼーション、コードクローン検出(CCFinder等)。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成27年度 春期 問49/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。