Skip to the content.

最終更新日:2026年8月31日

まず結論

リバースエンジニアリング(Reverse Engineering)とは、既存のソフトウェアやシステムを解析して、仕様・内部構造・処理内容などを明らかにする手法です。

基本情報技術者試験では、次の表現が判断の合図になります。

既存のソフトウェア・システム
↓
解析する
↓
仕様・構造を明らかにする
→ リバースエンジニアリング

最初に覚えるなら、次の一文で十分です。

「できあがったものから、設計や仕様へ戻る」のがリバースエンジニアリング。

直感的な説明

通常の開発では、仕様や設計をもとにプログラムを作ります。

仕様・設計
↓
プログラムを作る
↓
ソフトウェア

これは、上流から下流へ進むイメージです。

一方、リバースエンジニアリングでは逆方向に進みます。

既存ソフトウェア
↓
コードや動作を解析
↓
処理内容・構造・仕様を推定

つまり、完成済みのソフトウェアを調べて、「どう作られているのか」「どんな仕様なのか」を理解するための活動です。

データベースでも同じ考え方が使えます。

既存データベース
↓
テーブル定義・キー・関連を調べる
↓
E-R図などの設計情報を復元する

定義・仕組み

リバースエンジニアリングでは、既存の成果物を分析して、設計情報や仕様に近い情報を取り出します。

対象になるものは、たとえば次のようなものです。

  • ソースコード
  • 実行ファイル
  • データ構造
  • モジュール構成
  • 入出力の動作
  • データベースのテーブル定義や関連

目的は、既存システムを理解することです。

何を明らかにする?

解析によって、次のような情報を整理します。

どんな機能があるか
どのモジュールが関係するか
どのようなデータを使うか
どんな処理順序になっているか

古いシステムで設計書が不足している場合や、保守のために既存プログラムを理解したい場合にも使われます。

データベースでの例

データベース分野では、既存DBの定義から設計情報を読み取ることがあります。

読み取る情報 設計上分かること
テーブル定義 エンティティ
カラム定義 属性
主キー 一意に識別する項目
外部キー テーブル間の関連
制約 データのルール
既存DB
→ 定義情報を解析
→ E-R図などを作る

これもリバースエンジニアリングの一例です。

「作り直すこと」ではない

リバースエンジニアリングの中心は、あくまで解析して理解することです。

解析・理解
→ リバースエンジニアリング

分析後に全体を改善・再構築する
→ リエンジニアリング

ここを分けて考えることが重要です。

このテーマは基本情報技術者試験のソフトウェア開発管理技術やデータベース設計と関係します。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。

科目Aでどう出る?

科目Aでは、似た開発・改善用語の説明から正しいものを選ぶ問題として出題されます。

次の判断基準を使うと切り分けやすくなります。

問題文の中心 用語
既存ソフトウェアを解析し、仕様や構造を明らかにする リバースエンジニアリング
設計情報から実装・ソースコードを作る フォワードエンジニアリング
外部仕様を変えず内部構造を改善する リファクタリング
既存システムを分析したうえで改善・再構築する リエンジニアリング

試験直前は、次の向きで覚えると便利です。

既存 → 仕様・設計
→ リバース

仕様・設計 → 実装
→ フォワード

「分析」という言葉だけでは決めない

リエンジニアリングでも、既存システムの分析を行うことがあります。

そのため、問題文の最後まで確認します。

分析して仕様・構造を明らかにする
→ リバースエンジニアリング

分析したうえで改善・再構築する
→ リエンジニアリング

どんな場面で使う?

リバースエンジニアリングは、既存システムの情報が不足しているときに役立ちます。

たとえば、次のような場面です。

  • 古いシステムの設計書が残っていない
  • 保守のために既存コードを理解したい
  • 他システムとの接続仕様を確認したい
  • 移行前に現行システムの構造を整理したい
  • 本稼働中のデータベースからE-R図を作り直したい

実務では、契約やライセンス、知的財産権などの条件も確認する必要があります。

よくある誤解・混同

リバースエンジニアリングとフォワードエンジニアリング

方向が逆です。

仕様・設計
↓
実装
→ フォワードエンジニアリング
既存ソフトウェア
↓
仕様・設計を明らかにする
→ リバースエンジニアリング

リバースエンジニアリングとリファクタリング

リファクタリングは、既存ソフトウェアの外部から見た振る舞いを変えず、内部構造を改善することです。

理解する
→ リバースエンジニアリング

内部構造を改善する
→ リファクタリング

リバースエンジニアリングとリエンジニアリング

リエンジニアリングでは、既存システムを分析した後、必要に応じて新しい形へ改善・再構築します。

解析して明らかにするところまで
→ リバースエンジニアリング

解析+改善・再構築
→ リエンジニアリング

コンカレントエンジニアリングとの違い

コンカレントエンジニアリングは、設計・製造・テストなど複数の工程を並行して進める考え方です。

既存物を解析する
→ リバース

複数工程を同時並行で進める
→ コンカレント

ソーシャルエンジニアリングとの違い

ソーシャルエンジニアリングはセキュリティ分野の用語で、人の心理や不注意を利用して情報を得る手法です。

技術的に既存システムを解析
→ リバースエンジニアリング

人の心理を突いて情報を得る
→ ソーシャルエンジニアリング

自動的にソースコードを作ることではない

設計情報からソースコードを生成する方向は、リバースではありません。

設計 → コード
→ フォワード方向

コード・実物 → 設計・仕様
→ リバース方向

まとめ(試験直前用)

  • リバースエンジニアリングは、既存ソフトウェアやシステムを解析して仕様・構造を明らかにする手法
  • 「既存から設計へ戻る」という方向で覚える
  • 設計から実装へ進むのはフォワードエンジニアリング
  • 外部仕様を変えず内部構造を改善するのはリファクタリング
  • 分析後にシステムを改善・再構築するのはリエンジニアリング
  • データベース定義からE-R図を復元するのもリバースエンジニアリングの例
  • 「分析した」だけで決めず、その後に何をするかまで確認する

既存のものから仕様・構造へ戻るなら、リバースエンジニアリング。

© 2024-2026 stemtazoo. All rights reserved.