Skip to main content
QUICK REVIEW

[論文レビュー] A Survey of Reverse Engineering and Program Comprehension

Michael L. Nelson|ArXiv.org|Mar 24, 2005
Software Engineering Research参考文献 19被引用数 47
ひとこと要約

この論文は、ソフトウェア工学におけるリバースエンジニアリングとプログラム理解を調査し、特にレガシーシステムを対象として、既存のコードベースを理解するための技術に焦点を当てる。コード理解における課題を概説し、人間中心のツールと自動化されたツールを強調するとともに、ソフトウェアの意図を分析するうえでの主な障壁と解決策を特定する。特に、進化を遂げるWebおよびクライアント・サーバー・アーキテクチャの文脈において顕著である。

ABSTRACT

Reverse engineering has been a standard practice in the hardware community for some time. It has only been within the last ten years that reverse engineering, or "program comprehension", has grown into the current sub-discipline of software engineering. Traditional software engineering is primarily focused on the development and design of new software. However, most programmers work on software that other people have designed and developed. Up to 50% of a software maintainers time can be spent determining the intent of source code. The growing demand to reevaluate and reimplement legacy software systems, brought on by the proliferation of clientserver and World Wide Web technologies, has underscored the need for reverse engineering tools and techniques. This paper introduces the terminology of reverse engineering and gives some of the obstacles that make reverse engineering difficult. Although reverse engineering remains heavily dependent on the human component, a number of automated tools are presented that aid the reverse engineer.

研究の動機と目的

  • クライアント・サーバーおよびWebベースのアーキテクチャの台頭に伴い、レガシーソフトウェアシステムの理解と保守のニーズが高まっていることに対応する。
  • 特に開発者が既存のコードを解読するために費やす時間が最大50%に達することから、プログラム理解における核心的な課題を特定する。
  • ソフトウェアの構造と動作を理解するのを支援する、既存のリバースエンジニアリング技術およびツールをサーベイする。
  • リバースエンジニアリングタスクにおける開発者の認知的負荷を軽減する自動化ツールの役割を強調する。
  • リバースエンジニアリングをソフトウェア工学における独立したサブディシプリントとして確立するための用語と概念的フレームワークを構築する。

提案手法

  • 1990年代半ばから2005年までのリバースエンジニアリングおよびプログラム理解分野における既存の文献およびツールをサーベイする。
  • アーキテクチャ回復、制御フロー解析、データフロー解析、および依存関係マイニングの焦点に基づいて、リバースエンジニアリング手法を分類する。
  • 静的および動的解析がソースコードから意味のある抽象化を抽出する役割を分析する。
  • 可視化ツールの有効性が、複雑なソフトウェアシステムの理解をどのように向上させるかを評価する。
  • 自動化の限界と、ソフトウェアの意図を解釈するうえで依然として不可欠な人間の専門知識の必要性を検討する。
  • 実世界のソフトウェア保守における事例および例を提示し、実務的な課題と解決策を説明する。

実験結果

リサーチクエスチョン

  • RQ1オリジナルの設計文書が欠落している場合、レガシーソフトウェアシステムを理解するうえでの主な課題は何ですか?
  • RQ2自動化ツールはリバースエンジニアリングをどのように支援するのか。また、ソフトウェアの意味論を捉えるうえでの限界は何か?
  • RQ3リバースエンジニアリングは、ソフトウェア保守におけるプログラム理解に費やす時間をどの程度短縮できるか?
  • RQ4可視化および抽象化技術は、複雑なコードベースに対する開発者の理解をどのように向上させるか?
  • RQ5Webおよびクライアント・サーバー技術の進化は、ソフトウェア工学におけるリバースエンジニアリングの必要性にどのように影響したか?

主な発見

  • ソフトウェア保守担当者の50%までが、既存のソースコードの意図を理解するために費やす時間であり、ソフトウェア保守における主要なボトルneckを示している。
  • 過去10年間で、レガシーシステムの近代化の必要性に駆られて、リバースエンジニアリングはソフトウェア工学における認識されたサブディシプリントへと進化した。
  • 自動化ツールは構造的解析(例:依存関係グラフ、コールグラフ)を支援するが、しばしば高レベルの設計意図や意味論的意味を捉えられない。
  • 可視化技術は、静的および動的解析と組み合わせることで、複雑なシステムの理解を顕著に向上させる。
  • 人間の要素は、曖昧または不十分にドキュメント化されたコードを解釈するうえで、依然として不可欠である。
  • Webおよびクライアント・サーバー系の普及は、リバースエンジニアリングの需要を高め、ソフトウェアの進化および移行において不可欠な実践となった。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。