マナビング基本情報技術者

リバースエンジニアリングは何を明らかにするか

基本情報技術者試験 平成29年度秋期 午前 問50 / ソフトウェア開発管理技術 › 開発プロセス・手法

過去問にチャレンジ

平成29年度秋期 午前 問50

ソフトウェアのリバースエンジニアリングの説明はどれか。

  1. ア

    開発支援ツールなどを用いて,設計情報からソースコードを自動生成する。

  2. イ

    外部から見たときの振る舞いを変えずに,ソフトウェアの内部構造を変える。

  3. ウ

    既存のソフトウェアを解析し,その仕様や構造を明らかにする。

  4. エ

    既存のソフトウェアを分析し理解した上で,ソフトウェア全体を新しく構築し直す。

会話形式の解説

講師講師
作業の出発点と成果に注目しましょう。何を調べ、何を明らかにする説明でしょうか。
受験者受験者
設計情報からコードを作る説明は、既存のソフトウェアを調べていないので違いそうです。
講師講師
その通りです。設計情報を出発点とするコード生成です。
受験者受験者
外から見た動きを変えずに内部構造を変える説明は、構造を扱うので迷います。
講師講師
そこでは構造を明らかにするのではなく、変更しています。この作業はリファクタリングです。
受験者受験者
既存のソフトウェアを分析してから全体を作り直す説明も、分析する点は同じですね。
講師講師
はい。ただし、その説明は再構築まで行うリエンジニアリングです。求める成果が何かを確かめましょう。
受験者受験者
求める成果は、作り直したソフトウェアではなく、既存のソフトウェアの仕様や構造を明らかにすることです。
講師講師
その判断で正解です。既存のソフトウェアを解析し、仕様や構造を明らかにする説明がリバースエンジニアリングに当たります。
受験者受験者
「分析する」という言葉だけで決めず、解析の後に何をするかまで読めば区別できます。
講師講師
そうです。内部を変更するならリファクタリング、全体を新しく構築し直すならリエンジニアリングです。成果の違いを押さえましょう。

まとめ

リバースエンジニアリングは、既存のソフトウェアを解析して仕様や構造を明らかにする作業です。設計情報からのコード生成は、出発点が異なります。外から見た振る舞いを保って内部構造を変更する作業はリファクタリングです。分析した上で全体を新しく構築し直す作業はリエンジニアリングです。

解答・解説

正解はウです

この問題のテーマ

既存のソフトウェアを調べるリバースエンジニアリングを、コード生成や改修などの作業と区別する問題です。

解き方の考え方

作業の出発点と目的に注目します。既存のソフトウェアを解析して仕様や構造を明らかにする説明を選びます。内部構造の変更や、分析後の再構築まで含む説明とは区別します。

選択肢ごとの解説

  1. ×ア  開発支援ツールなどを用いて,設計情報からソースコードを自動生成する。
    アのソースコード自動生成は、設計情報を出発点として実装を作る作業です。既存のソフトウェアを解析して仕様や構造を明らかにする作業ではありません。
  2. ×イ  外部から見たときの振る舞いを変えずに,ソフトウェアの内部構造を変える。
    イの説明では、外部から見た振る舞いを保ったまま内部構造を変更します。これはリファクタリングであり、既存のソフトウェアの仕様や構造を調べることを目的とする説明ではありません。
  3. ○ウ  既存のソフトウェアを解析し,その仕様や構造を明らかにする。
    ウは、既存のソフトウェアを解析の対象としています。解析によって仕様や構造を明らかにするので、リバースエンジニアリングの説明に当たります。
  4. ×エ  既存のソフトウェアを分析し理解した上で,ソフトウェア全体を新しく構築し直す。
    エは既存のソフトウェアを分析するだけでなく、その理解を使って全体を新しく構築し直します。再構築まで行う点で、解析によって仕様や構造を明らかにするリバースエンジニアリングとは異なり、リエンジニアリングの説明です。

POINT

  • 作業の名称は、何を調べ、何を成果とするかで見分けます。
  • 外部から見た振る舞いを保って内部を改める作業は、リファクタリングです。
  • 既存システムの情報を新たな構築に用いる作業は、リエンジニアリングです。

※出典:平成29年度秋期 基本情報技術者試験 午前 問50