ソフトウェア開発手法の一つとして、「リバースエンジニアリング」という言葉が出てきます。このリバースエンジニアリングを調べていると、「フォワードエンジニアリング」や「リエンジニアリング」って言葉が出てきます。更に学習していくと「コンカレントエンジニアリング」や「ドメインエンジニアリング」って言葉まで出てきます。
「〇〇エンジニアリング」多過ぎでしょ!って思いますが、それぞれの言葉には関係があったり、なかったりするので、今回はITにおける色んなエンジニアリングに関して解説します!
そもそもエンジニアリングとは?
先ずは「エンジニアリング」という言葉から抑えましょう。
エンジニアリング(engineering)とは「工学」や「技術」という意味ですね。
テクノロジー(technology)を「技術」と訳すときもありますから、エンジニアリングとしては「工学」のイメージが強いかもしれないですね。
ただ、今回出てくる各種エンジニアリングは「ソフトウェア開発の手法」としてイメージして頂ければと思います。
有名なエンジニアリング
では、続いて各種エンジニアリングの説明に入ります!
リバースエンジニアリングとは?
「既存ソフトウェアのオブジェクトコードやソースコードを解析して、仕様やアルゴリズムを調べ、必要ならドキュメント化する」ことです。
プログラムの仕様書や設計書が無い!って時にリバースエンジニアリングを行って、作り直す、という時に使われたりしますが、本来はソースコードに比べてより高いレベルの抽象化を考慮して、プログラムを表現し直すために行われたりしますので、すごくポジティブな行為とも言えますね。
フォワードエンジニアリングとは?
「リバースエンジニアリングで得た既存ソフトウェアの仕様を生かして、新たなソフトウェアを開発する」ことです。
つまり、リバースエンジニアリングの後に続く工程になりますね。
既存ソフトウェアの単なる作り直しではなく、改善して更に高品質なソフトウェアを作ることがポイントですね。
そして、リバースエンジニアリングと比較して、フォワードエンジニアリングはより多くの時間を消費します。やはり、ソフトウェアを作り直すので、それなりの時間は必要ということですね。
リエンジニアリングとは?
フォワードエンジニアリングとリバースエンジニアリングに関係して、もう一つ「リエンジニアリング」という言葉があります。
リエンジニアリングは「企業における、既存の管理方法や業務プロセスを抜本的に見直し、変更すること」です。
ソフトウェアというよりは、業務の流れを変更することになります。
リエンジニアリングにより、ビジネスプロセスを再構築することで、業務スピードの向上、人件費などのコスト削減などを実現できますので、効果的な手法ではあります。
ただ、これを実行するには「古きを捨てて、新しきにつく」ことになり、企業内の関係各部署の業務に大きく影響がありますが、かなり体力を使うことになりますので、やはり企業内でもトップダウンで実行していくことがポイントだったりしますね。
リエンジニアリングはフォワードエンジニアリングの中の一つの要素(作業)にもなりますね。
ここまでの3つのエンジニアリングの関係を図にすると以下のような感じになりますね。
その他のエンジニアリング
コンカレントエンジニアリングとは?
こちらは開発工程に関する用語です。
システム開発における開発工程において、「設計、開発、生産などの工程をできるだけ並行して進める」ことです。
コンカレントエンジニアリングを行うと開発スケジュール全体を短縮できるようになりますが、その反面手戻り時のリカバリが大変になるというリスクがあります。
要件定義のどこから設計に入るか、設計のどこから製造に入るか、そのタイミングも重要になってきますね。
ドメインエンジニアリングとは?
システムを開発する際に、同じ分野のシステム、例えば銀行の勘定系システムなどにおいて、一から大規模なシステムを作るのは大変ですよね。
そんな時、「同じ分野の業務知識や再利用部品、ツールなどを体系的に整備して、再利用を促進することで、ソフトウェア開発の効率向上を図る活動や手法」のことをドメインエンジニアリングと呼びます。
ドメインとは「業務の分野や領域」のことですね。
利用できるものは利用して効率化を図ろうという活動になりますね。もちろん、各企業独自のアイデアや仕組みは再利用しないですね。
まとめ
今回はリバースエンジニアリングやフォワードエンジニアリングなど各種エンジニアリングの意味と違い、関係性を解説してきました。
フォワードエンジニアリングは対象システムの変更を伴い、リバースエンジニアリングはシステムを分析するだけですので、フォワードエンジニアリングは時間が掛かることがポイントですね。
コンカレントエンジニアリングなど、各種エンジニアリングをうまく使い分けて、高品質なシステムを作っていくことが重要なのですね。
それにしてもたくさんのエンジニアリングがあるので、意味を間違って使わないよう気を付けましょう。
以上です!
参考URL)