SE基本情報に出るIT用語

リバースエンジニアリングとは?プログラムから仕様と設計を探ること

どうも!ひよこSE(@PiyoOct)です。

リバースエンジニアリングって何?

リバースエンジニアリングをひとことでわかりやすく言えば、「動いているプログラム(製品)から仕様と設計を探ること」です。

「リバース(reverse)」の文字通り、「逆」です。ここでいう「逆」は、「システム開発の手順」のこと。

本来のシステム開発の手順は下記の通り。

  1. 外部設計内部設計で、「どんなプログラムにするのか?」を決める
  2. 設計した通りに、ソースコードを書く
  3. 実際に動くプログラム(製品)が完成する

リバースエンジニアリングは、「逆」の手順をふむので

  1. 実際に動いているプログラムをもとに
  2. プログラムを逆コンパイルしてソースコードを出す
  3. ソースコードをもとに、外部設計内部設計をする

「ん?それダメなんじゃ?」と思った人はするどいです。まぁ、いろいろと事情はあれど、普通に使われている技術の1つだったりします。

スポンサーリンク

リバースエンジニアリングとは、プログラムから仕様と設計を探ること

リバースエンジニアリングとは、「動いているプログラム(製品)から仕様と設計を探ること」です。

システム開発の手順

リバースエンジニアリングを理解するにあたって、「SEの仕事内容は?わかりやすく4つに分類して文系大学生向けに現役SEが説明」で書いている、システム開発の手順を知っておくとスムーズです。

システム開発の工程
  • 要件定義(どんなシステムを作るか、決めること。「ドラクエを作るのか?FFを作るのか?」みたいな、「そもそも論」)
  • 基本設計(見た目の部分、ざっくりのストーリーを決める。)
  • 詳細設計(そのストーリーは、プログラムでどうやって実現するのかを書く)
  • プログラミング(ソースコードを書いて、プログラム(製品)にする
  • 単体テスト(1つのプログラムを単体で動かすんだな~くらいでOK)
  • 結合テスト(複数のプログラムを合体させるテストがあるんだな~でOK)
  • 総合テスト(使い物になるかを確認して仕上げるんだな~でOK)
  • 運用・保守(ドラクエを発売した後に、バグがあったら直さないかん)

さらに簡単に書くと、こんな感じ。

  1. 「ドラクエを作りたい」というのを決めて(要件定義)
  2. プログラムで「どう実現するのか?」を決める(基本設計・詳細設計)
  3. ソースコードを書いてプログラム(製品)にする
  4. テストして、世に製品として出す

リバースエンジニアリングは、逆の手順をふむ

リバースエンジニアリングは、reverseの英語の通り、逆の手順をふみます。

  • 世に製品として出されている「ドラクエ」をみて
  • ドラクエのプログラムを、ソースコードに戻す(「逆コンパイル」って言ったりする)
  • ソースコードを見て、「どう実現されているのか?」の設計を探る
  • 「ふむふむ。こうやって『ドラクエ』が作られてるんだな♪」ってなる

というのが、リバースエンジニアリング。

ひとことでまとめると、「動いているプログラム(製品)から仕様と設計を探ること」となります。

スポンサーリンク

リバースエンジニアリングの問題点は、著作権

「ふむふむ。こうやって『ドラクエ』が作られてるんだな♪」って、それ、マズいんじゃないの?

と思った人は、なかなかするどいです。

全くもってその通りであって、早い話が「パクリ」や、「改造」ができてしまいます。

リバースエンジニアリングのパクリや改造は、当然ダメ

ひよこSEは、法律の専門家ではないので、断言はできないけど(大人の言い訳)。下記のように考えています。

  • リバースエンジニアリング(プログラムを解析すること)自体は違法でない
  • ただ、改造・パクリをして自分のものにしたり、それでお金儲けするのは違法

※参考URL:リバースエンジニアリングは違法?法律上の注意点をわかりやすく解説

ドラクエには、商標権(ロゴ)・著作権(自分が作ったからマネするな)・特許権(その技術使うならカネよこせ)というのがあるので。

どこかの個人なり会社が、ドラクエのプログラムを改造して、あたかも「自社の製品」として販売するのは、当然ながら違法です。

例外は、オプションやカスタマイズを認めている場合

「改造」や「パクリ」は違法と書いたのだけど。これまた、ちょいと難しいのです。

例えば、X社が販売する製品Aというのがあったとして

X社の製品Aを買いたいです。ただ、●●の機能もあると、もっと使いやすいです。

オプション代は、当然払います!

みたいことを言ってくれる会社があったら。X社はよろこんで、オプションをつけます。

ただ、X社だけで、「製品Aのカスタマイズをやりきれないなぁ~。他社に依頼したい」となった場合。

「オプションつけるためにプログラムを変えていいよ」といって、システム開発会社S社に、カスタマイズを外注することもあるわけで。

「X社が認めたカスタマイズは、リバースエンジニアリングをしたうえで他社がやる」というのは、割と普通にあります。

リバースエンジニアリングでプログラムを変える場合は、何でも違法というわけでもなく、販売元が認めている範囲で「カスタマイズ」、つまりは問題なしになると思ってください。

基本情報にはここまで出ないかもだけど、知っておいて損はないです!

「リバースエンジニアリング」と「リエンジニアリング」の混同に注意

一つおせっかいですが、「リバースエンジニアリング」と「リエンジニアリング」の混同に注意してください。

もう、やめてくれよ・・・

混ざりそうな問題が、平成24年春期の基本情報に出ているので(*´ω`)。

  • 【リバースエンジニアリング】プログラムから仕様を探し出す
  • リエンジニアリング】そもそものプログラムを作り直す
  • リファクタリング】動作を変えずにソースコードをきれいにする作業

「リエンジニアリング」の「リ」は、「Re:ゼロから始める異世界生活」の「リ」ですね~

「リバース」=「逆」、「リ(=Re)」=「もう一回」と覚えておけばよし。

まとめ

リバースエンジニアリングときたら「動いているプログラム(製品)から仕様と設計を探ること」です。

「リバース(reverse)」の文字通り、「システム開発の手順の逆」をやって、「どんなプログラムなのか?」を探りに行きます。

パクリはダメだけど、製品のカスタマイズをしたいときに、プログラムから仕様を探るための技術だと思ってくださいまし(-_-;)。

スポンサーリンク

▼この記事がいいと思ったら、下の画像をクリックしてくれたら励みになります!

にほんブログ村 IT技術ブログ システムエンジニアへ

コメント

タイトルとURLをコピーしました