最終更新日:2026年8月31日
fe fe-technology software-engineering development-method
まず結論
リバースエンジニアリング(Reverse Engineering)とは、既存のソフトウェアやシステムを解析して、仕様・内部構造・処理内容などを明らかにする手法です。
基本情報技術者試験では、次の表現が判断の合図になります。
既存のソフトウェア・システム
↓
解析する
↓
仕様・構造を明らかにする
→ リバースエンジニアリング
最初に覚えるなら、次の一文で十分です。
「できあがったものから、設計や仕様へ戻る」のがリバースエンジニアリング。
直感的な説明
通常の開発では、仕様や設計をもとにプログラムを作ります。
仕様・設計
↓
プログラムを作る
↓
ソフトウェア
これは、上流から下流へ進むイメージです。
一方、リバースエンジニアリングでは逆方向に進みます。
既存ソフトウェア
↓
コードや動作を解析
↓
処理内容・構造・仕様を推定
つまり、完成済みのソフトウェアを調べて、「どう作られているのか」「どんな仕様なのか」を理解するための活動です。
データベースでも同じ考え方が使えます。
既存データベース
↓
テーブル定義・キー・関連を調べる
↓
E-R図などの設計情報を復元する
定義・仕組み
リバースエンジニアリングでは、既存の成果物を分析して、設計情報や仕様に近い情報を取り出します。
対象になるものは、たとえば次のようなものです。
- ソースコード
- 実行ファイル
- データ構造
- モジュール構成
- 入出力の動作
- データベースのテーブル定義や関連
目的は、既存システムを理解することです。
何を明らかにする?
解析によって、次のような情報を整理します。
どんな機能があるか
どのモジュールが関係するか
どのようなデータを使うか
どんな処理順序になっているか
古いシステムで設計書が不足している場合や、保守のために既存プログラムを理解したい場合にも使われます。
データベースでの例
データベース分野では、既存DBの定義から設計情報を読み取ることがあります。
| 読み取る情報 | 設計上分かること |
|---|---|
| テーブル定義 | エンティティ |
| カラム定義 | 属性 |
| 主キー | 一意に識別する項目 |
| 外部キー | テーブル間の関連 |
| 制約 | データのルール |
既存DB
→ 定義情報を解析
→ E-R図などを作る
これもリバースエンジニアリングの一例です。
「作り直すこと」ではない
リバースエンジニアリングの中心は、あくまで解析して理解することです。
解析・理解
→ リバースエンジニアリング
分析後に全体を改善・再構築する
→ リエンジニアリング
ここを分けて考えることが重要です。
このテーマは基本情報技術者試験のソフトウェア開発管理技術やデータベース設計と関係します。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、似た開発・改善用語の説明から正しいものを選ぶ問題として出題されます。
次の判断基準を使うと切り分けやすくなります。
| 問題文の中心 | 用語 |
|---|---|
| 既存ソフトウェアを解析し、仕様や構造を明らかにする | リバースエンジニアリング |
| 設計情報から実装・ソースコードを作る | フォワードエンジニアリング |
| 外部仕様を変えず内部構造を改善する | リファクタリング |
| 既存システムを分析したうえで改善・再構築する | リエンジニアリング |
試験直前は、次の向きで覚えると便利です。
既存 → 仕様・設計
→ リバース
仕様・設計 → 実装
→ フォワード
「分析」という言葉だけでは決めない
リエンジニアリングでも、既存システムの分析を行うことがあります。
そのため、問題文の最後まで確認します。
分析して仕様・構造を明らかにする
→ リバースエンジニアリング
分析したうえで改善・再構築する
→ リエンジニアリング
どんな場面で使う?
リバースエンジニアリングは、既存システムの情報が不足しているときに役立ちます。
たとえば、次のような場面です。
- 古いシステムの設計書が残っていない
- 保守のために既存コードを理解したい
- 他システムとの接続仕様を確認したい
- 移行前に現行システムの構造を整理したい
- 本稼働中のデータベースからE-R図を作り直したい
実務では、契約やライセンス、知的財産権などの条件も確認する必要があります。
よくある誤解・混同
リバースエンジニアリングとフォワードエンジニアリング
方向が逆です。
仕様・設計
↓
実装
→ フォワードエンジニアリング
既存ソフトウェア
↓
仕様・設計を明らかにする
→ リバースエンジニアリング
リバースエンジニアリングとリファクタリング
リファクタリングは、既存ソフトウェアの外部から見た振る舞いを変えず、内部構造を改善することです。
理解する
→ リバースエンジニアリング
内部構造を改善する
→ リファクタリング
リバースエンジニアリングとリエンジニアリング
リエンジニアリングでは、既存システムを分析した後、必要に応じて新しい形へ改善・再構築します。
解析して明らかにするところまで
→ リバースエンジニアリング
解析+改善・再構築
→ リエンジニアリング
コンカレントエンジニアリングとの違い
コンカレントエンジニアリングは、設計・製造・テストなど複数の工程を並行して進める考え方です。
既存物を解析する
→ リバース
複数工程を同時並行で進める
→ コンカレント
ソーシャルエンジニアリングとの違い
ソーシャルエンジニアリングはセキュリティ分野の用語で、人の心理や不注意を利用して情報を得る手法です。
技術的に既存システムを解析
→ リバースエンジニアリング
人の心理を突いて情報を得る
→ ソーシャルエンジニアリング
自動的にソースコードを作ることではない
設計情報からソースコードを生成する方向は、リバースではありません。
設計 → コード
→ フォワード方向
コード・実物 → 設計・仕様
→ リバース方向
まとめ(試験直前用)
- リバースエンジニアリングは、既存ソフトウェアやシステムを解析して仕様・構造を明らかにする手法
- 「既存から設計へ戻る」という方向で覚える
- 設計から実装へ進むのはフォワードエンジニアリング
- 外部仕様を変えず内部構造を改善するのはリファクタリング
- 分析後にシステムを改善・再構築するのはリエンジニアリング
- データベース定義からE-R図を復元するのもリバースエンジニアリングの例
- 「分析した」だけで決めず、その後に何をするかまで確認する
既存のものから仕様・構造へ戻るなら、リバースエンジニアリング。