ポイント
・ソースコードやRDBを解析し仕様をひも解くリバース・エンジニアリング
・クラス図やシーケンス図,E-R図の生成機能は実用レベルにきた
・適用範囲と仕組みを知り,複雑化したシステムを解きほぐそう

 システム障害やトラブルの対応にとまどう,システムの改修時に膨大な調査がかかるーー。こんな経験はないだろうか。これらは現行のシステムが“ブラックボックス化”しているのが大きな原因である。そのうえ,度重なるプログラム変更や機能追加などでシステムのブラックボックス化は進むばかり。「もはや仕様書をそのつど現行システムに合わせて修正するのは限界がある」(テクノロジックアート社長 長瀬嘉秀氏)という声は少なくない。

 そこで今,にわかに注目を集めているのが「リバース・エンジニアリング」だ。リバース・エンジニアリング(以下,リバース)とは,現行のシステム(ソースコードやデータベース)を解析し,その仕様を明らかにする技術。リバースのコンサルティングを数多く手掛けてきたウルシステムズの吉田悦万氏(シニアコンサルタント)は「肥大化したシステムの分割や,プログラム間の依存関係の見直し,リファクタリングの検討などの分野で効果が大きい」と説明する。複雑化したシステムの仕様をリバースによって導き出し,保守性や拡張性などの向上につなげるわけだ。

 図1は,本誌の読者モニターに対して「リバースの対象としたい開発言語」を聞いたものである。最も多かった開発言語はVisual Basicで,Java,C/C++と続いた。上位と思われたCOBOLについては意外に少ない。COBOL用のリバース・ツール「RESCUE」を提供するソフトウェアジェネレーションの本村昭二社長は「COBOLのシステムは比較的仕様書が残っているし,プログラムを見れば中身も理解しやすい」ことが理由と見る。

図1●リバース・エンジニアリングの対象としたい開発言語
図1●リバース・エンジニアリングの対象としたい開発言語
本誌が読者モニターを対象にWeb形式でのアンケート調査を実施。どんな開発言語のシステムをリバース・エンジニアリングしたいかを聞いたところ,最も多かったのは,Visual Basicだった。次いで,Java ,C/C++,COBOLと続いた(有効回答数73,複数回答)
[画像のクリックで拡大表示]

2種類のUMLモデルを生成

 以下では,Javaを対象としたリバースについて解説する。実は「Visual Basicなどのイベント・ドリブン型の言語は,画面のボタンにロジックが組み込まれているので,リバースできない場合が多い」(ボーランド CodeGear事業本部 マーケティングディレクター 藤井等氏)という事情がある。

 まずは,Javaのソースコードをどこまでリバースできるかを理解しておきたい(図2)。結論から言えば2種類のUMLモデル,機能を示す「クラス図」とプロセスを示す「シーケンス図」の生成が可能だ。

図2●ソースコードからリバース・エンジニアリングできる二つのUMLモデル(Javaの場合)
図2●ソースコードからリバース・エンジニアリングできる二つのUMLモデル(Javaの場合)
機能を示す「クラス図」とプロセスを示す「シーケンス図」の生成が可能。クラス図はソースコードの属性と操作,シーケンス図はオブジェクトの呼び出し部分を抽出してUMLモデルを生成する。ツールにNetBeans 5.5を使用した例
[画像のクリックで拡大表示]

 具体的には,クラス図ではソースコードからクラスの種類を解析し,各クラスの属性と操作(メソッド),関連(参照関係),汎化(継承関係)を“見える化”できる。一方のシーケンス図では,順を追ったオブジェクト間の呼び出しを見える化できる。

 ここでは,オープンソースの統合開発環境である「NetBeans 5.5」に,UMLモデリング用のプラグインを追加し実施した例を示した。有償/無償を問わず,ほとんどのモデリング・ツールでクラス図とシーケンス図の生成が可能である。中には「Borland Together for Eclipse」のように,MDA(Model Driven Architecture)技術を応用して属性や操作の「意味」を示した概念モデルを生成できる製品もある。だがこれを実現するには詳細モデルと概念モデルの属性や操作をマッピングするための定義ファイルを別途用意する必要があるので,通常は詳細モデルまでを生成可能な範囲だと考えたい。

>>後編