シカラボ

リバースエンジニアリングとは?仕様書がなくても設計を読み取る手法【ITパスポート】

シカラボ編集部
リバースエンジニアリングとは?仕様書がなくても設計を読み取る手法【ITパスポート】

引き継いだシステムに仕様書が付いてこなかった——動いてはいるのに、なぜそう動くのかを説明する資料がどこにもありません。ITパスポート試験の過去問にも、この行き止まりを題材にした問題が出ています。ここを、できあがったプログラムのほうから逆にたどって抜ける手法が、リバースエンジニアリングです。

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

リバースエンジニアリングとは、できあがったものを解析して、その仕様や設計の情報を取り出す手法です。過去問はこう説明しています。

既存の製品を分解し、解析することによって、その製品の構造を解明して技術を獲得する手法

(出典:ITパスポート試験 平成26年春期 問47)

簡単にいうと、開発の順番を逆向きにたどるということです。ふつうは設計を決めてから、プログラムや製品を作ります。リバースエンジニアリングは、すでにある物のほうを出発点にして、設計にさかのぼります。リバース(reverse)は「逆」という意味なので、名前がそのまま向きを表しています。

見落としやすいのは、引用した説明が「製品」と書いていて、「ソフトウェア」とは書いていないところです。ただし、平成21年春期〜令和7年の28回のITパスポート過去問では、この用語が主題になった4問のうち3問がソフトウェアの場面でした。まずはソフトウェアの話として押さえておきましょう。

もうひとつ、おもしろい偏りがあります。同じ28回でこの語が出てくる問題は10問ありました。いま挙げた主題の4問を除く6問では、誤答の選択肢として名前が並んでいるだけです。

開発期間の短縮や、製品の価値を高める手法を問う問題にも混ぜられています。名前を見かけたら、説明の中身まで読んでから決める語だといえます。

具体例でイメージをつかむ

たとえば、平成30年秋期の問39は、こういう場面を出しました。

自社開発して長年使用しているソフトウェアがあるが、ドキュメントが不十分で保守性が良くない。保守のためのドキュメントを作成するために、既存のソフトウェアのプログラムを解析した。

(出典:ITパスポート試験 平成30年秋期 問39)

この手法を何というか、という問いで、正解はエ「リバースエンジニアリング」でした。作った人はもう社内にいない、資料もそろっていない、それでもシステムは動き続けている——そんな状況を思い浮かべてみてください。頼りになるのは、目の前で動いているプログラムそのものです。

ふつうの開発は設計情報からプログラムを作るのに対し、リバースエンジニアリングはできあがったプログラムを解析して設計情報を読み取るという、矢印の向きの違いを示した図

図のとおり、矢印の向きが逆になるのがこの手法の特徴です。ふつうの開発では設計情報が先にあり、それを元にプログラムを作ります。リバースエンジニアリングでは、プログラムが先にあり、そこから構造や設計を読み取ります。読み取った内容を仕様書として書き起こす、という使われ方もします。

気をつけたいのは、過去問に書かれているのが解析して情報を取り出すところまでだという点です。取り出した情報を使って作り直す話までは書かれていません。ここは広げすぎないほうが安全です。

リファクタリングとの違い

同じく既存のプログラムを相手にする手法に、リファクタリングがあります。令和3年の問48では、この2つが同じ問題の選択肢に並びました。まぎらわしいので、一緒に押さえておきましょう。リファクタリングの説明も過去問にあります。

ソフトウェアが提供する機能仕様を変えずに、内部構造を改善すること

(出典:ITパスポート試験 令和5年 問49)

観点リバースエンジニアリングリファクタリング
過去問での作業プログラムを解析して、仕様や設計情報を取り出す機能仕様を変えずに、内部構造を改善する
作業のあとに得られるもの既存のものの構造・仕様・設計がわかる内部構造が改善されたプログラム
リバースエンジニアリングはプログラムを解析して仕様や設計情報を取り出すのに対し、リファクタリングは機能仕様を変えずに内部構造を改善するという違いを並べた図

覚え方は「読み取るのがリバース、機能を変えず内部を整えるのがリファクタリング」です。相手はどちらも既存のプログラムですが、過去問が書いている作業が違います。リバースは解析して情報を取り出すところ、リファクタリングは内部構造を改善するところです。

なお令和5年の問49には、誤答として「ソフトウェアの動作などを解析して、その仕様を明らかにすること」という説明も置かれていました。用語名は書かれていませんが、解析して仕様を明らかにするという向きは、ここまで見てきた説明と重なります。

試験ではこう出る

同じ28回のITパスポート過去問のうち、リバースエンジニアリングが主題になった問題は4問です。形は2つに分かれます。作業の内容を選ばせる形と、場面から手法の名前を選ばせる形です。まずは作業を選ぶ形から解いてみましょう。

腕試し問題

出典:ITパスポート試験 令和2年度 問51

リバースエンジニアリングで実施する作業として、最も適切なものはどれか。

解答と解説

解説(解答せずに開けます)

正解はエです。

「プログラムを解析することで、ソフトウェアの仕様を調査して設計情報を抽出する。」が、リバースエンジニアリングで実施する作業にあたります。

  • ❌ ア「短い期間の開発を繰り返す」→ これから作る側の進め方です
  • ❌ イ「試作品のソフトウェアを作成して、利用者による評価をフィードバックして開発する」→ 同じく、これから作る側の話です
  • ❌ ウ「上流から下流までを順番に実施する」→ こちらも開発の進め方です

誤答は3つとも、これから作るときの進め方の説明でした。ただ、すでにある物が相手の手法はほかにもあります。解析して情報を取り出す話かどうかで切ると、ほかの問題でも迷いにくくなります。

もう1問、場面から名前を選ぶ形も見ておきましょう。

腕試し問題

出典:ITパスポート試験 令和5年度 問39

運用中のソフトウェアの仕様書がないので、ソースコードを解析してプログラムの仕様書を作成した。この手法を何というか。

解答と解説

解説(解答せずに開けます)

正解はウです。仕様書がないのでソースコードを解析して仕様書を作った、という流れが、そのままリバースエンジニアリングの説明に重なります。エのリファクタリングは機能仕様を変えずに内部構造を改善する活動なので、仕様書を作る話とは結びつきません。アのコードレビューとイのデザインレビューは、この問題では誤答として置かれた語です。

まとめ

  • リバースエンジニアリングは、既存の製品やプログラムを解析して、仕様や設計情報を取り出す手法
  • 定義を引用した過去問は「既存の製品」と書いていて、「ソフトウェア」とは限定していない
  • ふつうの開発とは向きが逆。できあがった物のほうが出発点になる
  • ドキュメントや仕様書が足りないときに、保守用の資料を作る場面で問われる
  • リファクタリングは機能仕様を変えずに内部構造を改善する活動。読み取るのがリバース、機能を変えず内部を整えるのがリファクタリング
  • 平成21年春期〜令和7年の28回では誤答として名前が並ぶ問題のほうが多い。解析して情報を取り出す話かどうかを確かめる

名前が長いので身構えますが、やっていることは「できた物から設計を読み取る」の一言です。既存の製品やプログラムを解析して、構造や設計を明らかにするという組合せが出てきたら、この用語を思い出してみてください。

この記事のタグ

関連記事