ITパスポート 2018年 秋期 問39
問題文
自社開発して長年使用しているソフトウェアがあるが、ドキュメントが不十分で保守性が良くない。保守のためのドキュメントを作成するために、既存のソフトウェアのプログラムを解析した。この手法を何というか。
選択肢
ア:ウォータフォールモデル
イ:スパイラルモデル
ウ:プロトタイピング
エ:リバースエンジニアリング(正解)
🔒 解説は解答すると表示されます
自社ソフトの解析でドキュメントを作る手法は何か【ITパスポート 解説】
正解の理由
既存のソフトウェアのプログラムを解析して、仕様や設計を明らかにしてドキュメントを作成する手法は、一般に「リバースエンジニアリング(reverse engineering:逆解析)」と呼びます。選択肢の中では エ のリバースエンジニアリングが該当します。
理由は単純です。問題文は「既存のプログラムを解析した」と明記しています。リバースエンジニアリングは、動作や実装から元の設計や仕様を逆に導き出す作業だからです。これによってドキュメント不足を補い、保守しやすくします。
(用語注記)
- リバースエンジニアリング(reverse engineering:逆解析)… ある製品やソフトの内部構造・仕様を、既存の実装や動作から逆に調べて明らかにすること。
- デコンパイル(decompilation)… 実行可能なプログラムを元の高水準言語風のコードに変換する処理。
- 逆アセンブル(disassembly)… 機械語をアセンブリ言語に変換して人間が読める形にする処理。
解法ステップ
- 問題文のキーワードを拾う:「既存のソフトウェア」「プログラムを解析」「ドキュメントを作成」「保守性が良くない」。
- 「プログラムを解析して仕様を取り出す」行為を頭に描く。
- 各選択肢の意味を確認する(開発モデルか解析手法か)。
- 「解析して仕様や設計を明らかにする=リバースエンジニアリング」に該当するため、選択肢は エ と判断する。
選択肢別の誤答解説
- ア: ウォータフォールモデル(waterfall model:一方向に段階的に進む開発モデル)
- 開発プロセスの順序を示すモデルです。既存ソフトを解析してドキュメント化する手法ではありません。
- イ: スパイラルモデル(spiral model:リスク管理を中心に反復する開発モデル)
- リスクを管理しながら反復的に開発する方法です。解析行為自体を示す言葉ではありません。
- ウ: プロトタイピング(prototyping:試作品を作って検証する手法)
- 実際に簡易版(プロトタイプ)を作ってユーザーの意見を得る方法です。既存プログラムを解析して仕様を取り出す行為とは異なります。
- エ: リバースエンジニアリング(reverse engineering:既存の製品・ソフトを解析して設計や仕様を復元する)
- 既存プログラムの解析によってドキュメントや仕様を作る、そのままの定義なので正解です。
よくある誤解
- 「リバースエンジニアリングはただコードを見るだけ」
- 実際はコード解析だけでなく、動作観察、ログ解析、入出力の調査、アーキテクチャの復元など幅広い作業が含まれます。
- 「開発モデル(ウォータフォールやスパイラル)も解析方法だ」
- 開発モデルはソフト開発の進め方を示す概念で、既存ソフトの解析そのものを指しません。混同しやすい点です。
- 「リバースエンジニアリングは必ず違法」
- 法律や契約により制限される場合がありますが、保守目的で自社のソフトを解析することは通常の業務であり正当な場合が多いです。ライセンスや契約は確認しましょう。
補足コラム
リバースエンジニアリングの具体的な手法には次のようなものがあります。
- ソースコードがある場合:コードリーディング、コメントや命名規則の解析、設計図(クラス図やフローチャート)への変換。
- バイナリしかない場合:デコンパイル(decompile)、逆アセンブル(disassemble)、動的解析(実行時に動作を追う)。
- 動作観察:入出力データやログからプロトコルや仕様を推定するブラックボックス解析。
また、作成したドキュメントは「設計書」「API仕様書」「運用手順書」など保守に直結する形式にまとめると効果的です。ツールとしては、静的解析ツール、デコンパイラ、リバースエンジニアリング支援ツール(例:IDAPROやGhidraなど)がありますが、これらは使い方を誤ると法的・倫理的な問題を生む可能性があるため注意が必要です。
FAQ
Q1: リバースエンジニアリングとリファクタリングはどう違いますか?
A1: リバースエンジニアリングは「既存の実装から仕様や設計を再構築する行為」です。リファクタリングは「既存のコードの内部構造を改善して保守性を高める行為」で、設計を変えずにコードを書き換える作業です。目的と作業内容が異なります。
A1: リバースエンジニアリングは「既存の実装から仕様や設計を再構築する行為」です。リファクタリングは「既存のコードの内部構造を改善して保守性を高める行為」で、設計を変えずにコードを書き換える作業です。目的と作業内容が異なります。
Q2: 自社ソフトを解析してドキュメントを作るときに注意することは?
A2: 契約やライセンスに問題がないか確認すること、解析記録と著作権情報を残すこと、重要な箇所はテストで検証することが重要です。解析により既存の挙動を変えないよう注意します。
A2: 契約やライセンスに問題がないか確認すること、解析記録と著作権情報を残すこと、重要な箇所はテストで検証することが重要です。解析により既存の挙動を変えないよう注意します。
Q3: 解析の成果はどんなドキュメントにするのが良いですか?
A3: 保守向けなら「設計概要」「モジュール一覧」「データフロー図」「API仕様」「運用手順書」など、実作業に役立つ形式でまとめると良いです。
A3: 保守向けなら「設計概要」「モジュール一覧」「データフロー図」「API仕様」「運用手順書」など、実作業に役立つ形式でまとめると良いです。
関連キーワード: リバースエンジニアリング、ドキュメント化、保守性、デコンパイル、逆アセンブル、ソフトウェア解析、ブラックボックス解析、設計復元、運用手順書、保守ドキュメント

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

