(57)【要約】【課題】  設計された構造とのずれや不適切な要素を指摘して，改変されるソフトウェアの保守作業を支援する。【解決手段】  ソース構造取得部１２は，アノテーション付きのソースコード５を解析し，構成要素と関連要素とをオブジェクト化し，ソースコード５の構造を表すモデルを生成してソースコードオブジェクト記憶部１５へ格納する。アーキテクチャ構造取得部１０は，アーキテクチャ情報３をオブジェクト化したモデルを生成してアーキテクチャオブジェクト記憶部１３へ格納する。ギャップ分析部１４は，前記二つのモデルを比較し，対応していないオブジェクトをギャップ情報７として出力する。パターン照合部１８は，ソースコードオブジェクト記憶部１５のモデルを不良パターン情報記憶部１６の不良パターン情報と比較し，該当するオブジェクトを不良性検出情報９として出力する。【選択図】  図１
2007265089.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得する処理と，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連を示す関連要素とを抽出する処理と，
前記構成要素および前記関連要素をもとに，前記ソフトウェアの構造を，所定のモデリング表現にもとづいて表すソースコード構造モデルを生成し，ソースコード構造モデル記憶部に格納する処理と，
前記ソフトウェアの構造を定義するアーキテクチャ情報を取得する処理と，
前記アーキテクチャ情報をもとに，前記ソフトウェアの構造を，前記所定のモデリング表現にもとづいて表すアーキテクチャモデルを生成し，アーキテクチャモデル記憶部に格納する処理と，
前記ソースコード構造モデルの構成要素または関連要素と前記アーキテクチャモデルの構成要素または関連要素とを比較し，前記ソースコード構造モデルおよび前記アーキテクチャモデルにおいて構成要素同士もしくは関連要素同士が対応していない場合に，当該対応していない構成要素または関連要素をギャップ情報として検出する処理とを，
コンピュータに実行させるためのソフトウェア保守支援プログラム。
【請求項２】
前記ソースコード構造モデルと前記アーキテクチャモデルとのそれぞれについて対応していない要素を検出する処理において，前記ギャップ情報として検出された構成要素または関連要素に関する情報をもとにギャップ情報を生成する処理を，
前記コンピュータに実行させるための
請求項１に記載のソフトウェア保守支援プログラム。
【請求項３】
ソフトウェアの構造を表す構成要素と当該構成要素間の関連を示す関連要素とを用いて，ソフトウェアを構成する要素として不適切なものを表す不良パターン情報を取得する処理と，
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得する処理と，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連を示す関連要素とを抽出する処理と，
前記構成要素および前記関連要素をもとに，前記ソースコードが表すソフトウェアの構造を，所定のモデリング表現にもとづいて表すソースコード構造モデルを生成し，ソースコード構造モデル記憶部に格納する処理と，
前記ソースコード構造モデルの構成要素または関連要素が，前記不良パターン情報に該当するか否かを判定し，当該不良パターン情報に該当する構成要素または関連要素を検出する処理とを，
コンピュータに実行させるためのソフトウェア保守支援プログラム。
【請求項４】
前記不良パターン情報に該当する構成要素または関連要素を検出する処理において，前記不良パターン情報に該当するものとして検出された構成要素または関連要素に関する情報をもとに不良性検出情報を生成する処理を，
前記コンピュータに実行させるための
請求項３に記載のソフトウェア保守支援プログラム。
【請求項５】
コンピュータが実行する処理方法であって，
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得し，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連を示す関連要素とを抽出し，
前記構成要素および前記関連要素をもとに，前記ソフトウェアの構造を，所定のモデリング表現にもとづいて表すソースコード構造モデルを生成し，ソースコード構造モデル記憶部に格納し，
前記ソフトウェアの構造を定義するアーキテクチャ情報を取得し，
前記アーキテクチャ情報をもとに，前記ソフトウェアの構造を，前記所定のモデリング表現にもとづいて表すアーキテクチャモデルを生成し，アーキテクチャモデル記憶部に格納し，
前記ソースコード構造モデルの構成要素または関連要素と前記アーキテクチャモデルの構成要素または関連要素とを比較し，前記ソースコード構造モデルおよび前記アーキテクチャモデルにおいて構成要素同士もしくは関連要素同士が対応していない場合に，当該対応していない構成要素または関連要素をギャップ情報として検出する
ソフトウェア保守支援処理方法。
【請求項６】
コンピュータが実行する処理方法であって，
ソフトウェアの構造を表す構成要素と当該構成要素間の関連を示す関連要素とを用いて，ソフトウェアを構成する要素として不適切なものを表す不良パターン情報を取得し，
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得し，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連要素とを抽出し，
前記構成要素および前記関連要素をもとに，前記ソースコードが表すソフトウェアの構造を，所定のモデリング表現にもとづいてソースコード構造モデルを生成し，ソースコード構造モデル記憶部に格納し，
前記ソースコード構造モデルの構成要素または関連要素が，前記不良パターン情報に該当するか否かを判定し，当該不良パターン情報に該当する構成要素または関連要素を検出する
ソフトウェア保守支援処理方法。
【請求項７】
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得する処理手段と，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連を示す関連要素とを抽出する処理手段と，
前記構成要素および前記関連要素をもとに，前記ソフトウェアの構造を，所定のモデリング表現にもとづいて表すソースコード構造モデルを生成する処理手段と，
前記ソースコード構造モデルを格納するソースコード構造モデル記憶手段と，
前記ソフトウェアの構造を定義するアーキテクチャ情報を取得する処理手段と，
前記アーキテクチャ情報をもとに，前記ソフトウェアの構造を，前記所定のモデリング表現にもとづいて表すアーキテクチャモデルを生成する処理手段と，
前記アーキテクチャモデルを格納するアーキテクチャモデル記憶手段と，
前記ソースコード構造モデルの構成要素または関連要素と前記アーキテクチャモデルの構成要素または関連要素とを比較し，前記ソースコード構造モデルおよび前記アーキテクチャモデルにおいて構成要素同士もしくは関連要素同士が対応していない場合に，当該対応していない構成要素または関連要素をギャップ情報として検出する処理手段とを備える
ソフトウェア保守支援装置。
【請求項８】
ソフトウェアの構造を表す構成要素と当該構成要素間の関連を示す関連要素とを用いて，ソフトウェアを構成する要素として不適切なものを表す不良パターン情報を格納する記憶手段と，
ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソフトウェアのソースコードを取得する処理手段と，
前記ソースコードのアノテーションをもとに，前記ソフトウェアを構成する構成要素および当該構成要素間の関連を示す関連要素とを抽出する処理手段と，
前記構成要素および前記関連要素をもとに，前記ソースコードが表すソフトウェアの構造を，所定のモデリング表現にもとづいて表すソースコード構造モデルを生成する処理手段と，
前記ソースコード構造モデルを格納するソースコード構造モデル記憶手段と，
前記ソースコード構造モデルの構成要素または関連要素が，前記不良パターン情報に該当するか否かを判定し，当該不良パターン情報に該当する構成要素または関連要素を検出する処理手段とを備える
ソフトウェア保守支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ソースコードが改変されていくソフトウェアの保守を支援するためのソフトウェア保守支援プログラムおよび処理方法に関するものである。さらに詳しくは，ソフトウェアの仕様設計資料のアーキテクチャ情報をもとに，保守作業において改変されていくソフトウェアが表す構造のずれを検出し，検出した情報を提供するデータ処理技術に関する。
【背景技術】
【０００２】
コンピュータシステムやソフトウェアは，長期にわたって利用され，その間に何度も改変が行われる。ソフトウェアの保守・改変作業の負担を増大させないために，ソフトウェアの改変時には，仕様設計書で定められたアーキテクチャに従って，ソフトウェアの機能の修正，拡張などを行っていく必要がある。
【０００３】
従来手法として，ソフトウェアの仕様作成または仕様変更時に，ソフトウェアの状態遷移モデルを用いて，ソフトウェアの関数の使用方法の矛盾性を検査し，ソフトウェアの仕様変更時の関数の誤りを検出する手法が知られている（例えば，特許文献１参照）。
【特許文献１】特開平５−３３４１２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
実際のソフトウェアの保守作業では，仕様設計書のアーキテクチャなどが参照されることなく，ソフトウェアのソースコードのみが変更・追加されるケースがしばしば生じる。また，ソースコードが先に改変された場合に，仕様設計書などの形態で保管するべきアーキテクチャ情報に，その変更を反映させる作業が後回しになってしまうケースも多い。また，ソースコードの変更に対応させたアーキテクチャ情報の改訂作業が全く行われないケースもある。この結果，アーキテクチャ情報で設計上定義されている構造と，実際のソースコードによって実現されているソフトウェアの構造との対応がとれなくなってしまうという問題がある。
【０００５】
しかし，従来では，実際のソフトウェアの構造がアーキテクチャ情報から変化しているか否かを検出する方法は確立していなかった。ソースコードの改変作業によって機能の追加・拡張が行われたソフトウェアの構造が，仕様設計当初のアーキテクチャからどの程度乖離しているかを知ることができなかった。
【０００６】
現実の保守作業では，ソースコードの改変作業が先行し，仕様設計書，仕様変更書などの別形態データで保管される資料の改訂作業が遅れ，アーキテクチャ情報の対応作業が後回しになるような状況が繰り返されている。そのため，設計当初のアーキテクチャに対して，変更が繰り返されたソフトウェアの構造のずれが常態化するという問題があった。
【０００７】
さらに，対応関係がとれなくなった状態のままで，さらにソースコードの改変作業が行われることによって，ソフトウェアの保守性をますます悪化させていくという問題があった。このような状況は，ソフトウェアが複雑化，肥大化する大きな原因ともなっていた。
【０００８】
また，ソースコードの改変作業において，ソフトウェアの構成として不適切なものが含まれてしまうことがあった。
【０００９】
本発明の目的は，ソースコードの変更作業を伴うソフトウェアの保守作業支援のために，ソフトウェアのソースコードから特定される構造と，仕様設計資料であるアーキテクチャ情報で定義されている構造との間で対応関係がとれない箇所を検出するデータ処理技術を提供することである。また，ソフトウェアの中から，回避するべき不適切な要素を検出するデータ処理技術である。
【課題を解決するための手段】
【００１０】
本発明は，ソフトウェアのソースコードが変更されるに従って，ソフトウェアの構造が，仕様設計書で定められているアーキテクチャと，どの程度のギャップがあるかということを検出することによって，ソフトウェアの保守の支援を図るものである。また，改変されたソフトウェアに，いわゆる，“Ｂａｄ  Ｐｒａｃｔｉｃｅ  Ｒｕｌｅｓ”といわれるような不適切と考えられる要素や構成が含まれていないかどうかを検出することによって，ソフトウェアの保守の支援を図るものである。
【００１１】
本発明は，ソフトウェアの保守作業を支援するために，コンピュータに以下の処理を実行させるためのプログラムである。
【００１２】
本発明が実施されるコンピュータは，処理対象とするソフトウェアを構成する要素を示す所定のアノテーション（注釈）が付加されたソースコードを取得し，ソースコードから構成要素および構成要素同士の関連を示す関連要素とを抽出する。そして，抽出された構成要素および関連要素をもとに，所定のモデリング表現にもとづいて前記ソースコードの構造を示すソースコード構造モデルを生成して保持する。アノテーションは，ソースコード内の記述であって，プログラムの動作に影響を与えない部分である。
【００１３】
さらに，前記ソフトウェアの仕様設計として，ソフトウェアの構造を定義するアーキテクチャ情報を取得し，取得されたアーキテクチャ情報をもとに，所定のモデリング表現にもとづいてアーキテクチャ情報に定義されている構造を示すアーキテクチャモデルを生成して保持する。
【００１４】
そして，ソースコード構造モデルとアーキテクチャモデルとを構成する要素（構成要素または関連要素）とを比較し，両者のモデルで対応していない要素を検出する。また，検出された要素に関するギャップ情報を出力する。
【００１５】
ここで，モデリング表現として，例えば，ＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）に準拠した表現を用いることができる。
【００１６】
これによって，ユーザは，ソフトウェアのソースコードの構造が，仕様設計書で定められている構造（アーキテクチャ情報）とずれが生じているか否かを知ることができる。
【００１７】
さらに，本発明が実施されるコンピュータは，ソフトウェアのソースコードとして不適切な構成要素または関連要素を示す不良パターン情報を取得する。また，ソフトウェアを構成する要素を示す所定のアノテーションが付加されたソースコードを取得し，ソースコードから構成要素および前記構成要素同士の関連を示す関連要素を抽出する。そして，抽出された構成要素および関連要素をもとに，所定のモデリング表現にもとづいて前記ソースコードの構造を示すソースコード構造モデルを生成して保持する。
【００１８】
そして，ソースコード構造モデルと不良パターン情報とを比較して，ソースコード構造モデルの構成要素または関連要素が，不良パターン情報の要素に該当するか否かを判定し，該当する構成要素または関連要素を検出する。また，該当する要素に関する情報を不良性検出情報として出力する。
【００１９】
不良パターン情報は，ソフトウェアの構成として回避されるべき不適切な箇所を，構成要素および関連要素によって表す不良パターンに関する情報である。
【００２０】
これによって，ユーザは，ソフトウェアのソースコードに不適切な構成が含まれているか否かを知ることができる。
【００２１】
また，本発明は，上記プログラムによって実現される処理を，コンピュータが実行するための処理方法である。または，本発明は，上記プログラムによって実現される処理を実行する処理手段によって構成される処理装置である。
【発明の効果】
【００２２】
本発明によれば，ソフトウェアのアーキテクチャ情報から抽出した構造と，ソースコードから抽出した構造とを比較して，双方の構造のギャップを検出することができる。
【００２３】
そのため，設計当初は同期しているにもかかわらず，ソースコードの改変作業に従って，ソフトウェアの実際の構造が，本来の仕様設計書で定められている構造と乖離してしまうという問題を解決することができる。例えば，ユーザは，ギャップ情報をソースコードの改変を通じて変化したソフトウェアの構造が，当初のアーキテクチャとの間にずれが生じているかどうかを確認することができる。また，ソフトウェアの必要な改変によって，アーキテクチャ自体の変更が必要となっているか否かを確認することができる。
【００２４】
また，本発明によれば，ソフトウェアの構造に，不適切な要素や構成を表す不良パターンが含まれているか否かを検出することができる。そのため，ソースコードの変更や追加などの保守作業において，不適切なコーディングが紛れ込むことを防止したり，既に含まれている不適切な箇所を訂正したりすることができる。
【００２５】
よって，繰り返し改変されるソフトウェアにおいて，その構造とアーキテクチャとの対応，および適切な構成の維持が可能となり，保守作業の負担の増大や，ソフトウェア，保守資料などの肥大化を回避することが期待される。
【発明を実施するための最良の形態】
【００２６】
図１は，本発明の実施の形態における構成例を示す図である。
【００２７】
ソフトウェア保守支援システム１は，繰り返し改変されるソフトウェアの保守作業を支援するための情報を提供するシステムであって，アーキテクチャ構造取得部１０，ソース構造取得部１２，アーキテクチャオブジェクト記憶部１３，ギャップ分析部１４，ソースコードオブジェクト記憶部１５，不良パターン情報記憶部１６，およびパターン照合部１８を備える。
【００２８】
アーキテクチャ構造取得部１０は，支援対象のソフトウェアの構造に関するアーキテクチャ情報３から，所定のモデリング表現にもとづく構造モデル（アーキテクチャ）を取得する処理手段である。アーキテクチャ構造取得部１０は，アーキテクチャ解析部１０１，オブジェクト化部１０３を備える。
【００２９】
アーキテクチャ情報３は，ソフトウェアの仕様設計書などのドキュメントデータに含まれる，ソフトウェアの構造を表す情報である。アーキテクチャ情報３は，ドキュメントデータから，既知のテキスト解析処理やデータ抽出処理によって抽出されてもよい。
【００３０】
アーキテクチャ解析部１０１は，アーキテクチャ情報３を取得し，取得したアーキテクチャ情報３を解析して，ソフトウェアの構成要素と構成要素同士の関連とを抽出する処理手段である。
【００３１】
オブジェクト化部１０３は，ソフトウェアの構成要素および構成要素同士の関連をもとに，所定のモデリング表現によるアーキテクチャモデル２０を生成し，アーキテクチャオブジェクト記憶部１３へ一時的に保持する処理手段である。
【００３２】
本形態では，オブジェクト化処理のモデリング表現として，ＵＭＬに準拠する表現を使用する。図２に示すように，アーキテクチャモデル２０は，ＵＭＬのクラス図に相当する図で表すことができる。
【００３３】
図２において，ＸおよびＡは，構成要素であり，クラスとして表される。ＸからＡへの矢印は，クラスＸからクラスＡへの関連要素であり，アソシエーションとして表される。構成要素や関連要素の存在数は，アソシエーションに付記されるカーディナリティ（多重度）によって表される。図２の表示例では，任意の１または複数の構成要素「Ｘ」と１つの構成要素「Ａ」が存在し，複数の各構成要素「Ｘ」からの関連要素は，必ず１つの構成要素「Ａ」をリンク先とするものが複数存在することを表す。
【００３４】
ソース構造取得部１２は，支援対象ソフトウェアのソースコードから，所定のモデリング表記にもとづく構造モデルを取得する処理手段である。ソース構造取得部１２は，アノテーション解析部１２１，オブジェクト化部１２３を備える。
【００３５】
アノテーション解析部１２１は，ソフトウェアのソースコード５に付与された所定のアノテーションを解析して，ソフトウェアを構成する構成要素（以下，「ノードオブジェクト」ともいう）と構成要素同士の関連を示す関連要素（以下，「リンクオブジェクト」ともいう）とを抽出する処理手段である。
【００３６】
ソースコードに付与されるアノテーションとは，プログラムの動作に影響を与えずに，クラスやメソッド，フィールドなどのプログラム要素に対してプログラム的な意味づけを行うオブジェクトである。アノテーションは，例えば，Ｊａｖａ（米国Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Inc.の登録商標）において，“＠”で開始される宣言として表現される。
【００３７】
アノテーション解析部１２１は，ソースコード５から所定のアノテーションを検出し，アノテーションの宣言型から，その要素の種類（構成要素または関連要素）を特定し，クラス名，フィールド名，メソッドなどの要素を抽出する。
【００３８】
オブジェクト化部１２３は，抽出された構成要素および関連要素をもとに，オブジェクト化部１０３と同一のモデリング表現（ＵＭＬ）を用いて，ソフトウェアの構造を示すソースコード構造モデル２２を生成し，ソースコードオブジェクト記憶部１５へ一時的に格納する処理手段である。
【００３９】
ギャップ分析部１４は，ソースコード構造モデル２２とアーキテクチャモデル２０とを比較し，双方の構造において対応していない構成要素または関連要素を検出し，検出結果をギャップ情報７として出力する処理手段である。
【００４０】
不良パターン情報記憶部１６は，ソフトウェアの構造として回避されるべき不適切な構造を表す不良パターン情報２４を記憶する記憶手段である。
【００４１】
不良パターン情報２４は，いわゆる“Ｂａｄ  Ｐｒａｃｔｉｃｅ  Ｒｕｌｅｓ”などと呼ばれている既知のルールを，前述のモデリング表現を用いて表したものである。不良パターン情報２４は，ユーザなどによって予め用意されるものである。
【００４２】
パターン照合部１８は，不良パターン情報記憶部１６を参照して，ソースコード構造モデル２２に，不良パターン情報２４に合致する構造があるか否かを照合し，照合結果を不良性検出情報９として出力する処理手段である。
【００４３】
図３および図４を用いて，本形態における，ソフトウェアの構造とアーキテクチャとのギャップを分析する処理について説明する。
【００４４】
アノテーション解析部１２１は，図３（Ａ）に示す処理対象となるソースコード５から，“＠”で開始される所定のアノテーション（注釈）を検索し，検索したアノテーションから，要素の種類を特定し，クラス名，フィールド名，メッセージ名，リンク先などの成分情報（値）を抽出する。
【００４５】
ここで，所定のアノテーションとして，“＠ａｒｃｈｎｏｄｅ”，“＠ａｒｃｈｌｉｎｋ”が設定されているとする。“＠ａｒｃｈｎｏｄｅ”は，アーキテクチャを構成する構成要素（ノード）を表し，“＠ａｒｃｈｌｉｎｋ”は，アーキテクチャを構成する各構成要素間の関連を示す関連要素（リンク）を表す。
【００４６】
アノテーション解析部１２１は，抽出したデータを，配列データとしてオブジェクト化部１２３の内部記憶領域へ格納する。
【００４７】
具体的には，図３（Ａ）に示すソースコード５のアノテーションの“＠ａｒｃｈｎｏｄｅ”を検出し，要素の種別（ノード）を特定し，さらに要素の成分値であるクラス名（ＲｅｃｏｒｄＳｅｔ），フィールド名（Ｆｏｏ）を抽出する。また，“＠ａｒｃｈｌｉｎｋ”を検出し，要素の種別（リンク）を特定し，成分情報としてリンク先（Ｂａｒ）を抽出する。
【００４８】
オブジェクト化部１２３は，ＵＭＬのモデリング表現に従って，内部記憶領域に格納されたこれらの要素を内容とする配列データをもとに，ソースコード５の構造をオブジェクト化したソースコード構造モデル２２を生成し，ソースコードオブジェクト記憶部１５に格納する。
【００４９】
アーキテクチャ解析部１０１は，アーキテクチャ情報３を解析して，アーキテクチャを表す構成要素と関連要素とを抽出する。
【００５０】
さらに，オブジェクト化部１０３は，ＵＭＬのモデリング表現に従って，抽出された構成要素と関連要素とをもとに，アーキテクチャで定義されている構造をオブジェクト化したアーキテクチャモデル２０を生成し，アーキテクチャオブジェクト記憶部１３に格納する。
【００５１】
ギャップ分析部１４は，アーキテクチャオブジェクト記憶部１３のアーキテクチャモデル２０とソースコードオブジェクト記憶部１５のソースコード構造モデル２２とを取り出して比較し，両者それぞれに対応していない要素があるか否かを検出し，対応していない要素をギャップ情報７として出力する。
【００５２】
図３（Ｂ）に示すようなアーキテクチャモデル２０とソースコード構造モデル２２とがそれぞれ生成されていたとする。ギャップ分析部１４は，双方のモデルの構成要素同士または関連要素同士を比較する。ここで，双方の要素に対応関係があってギャップは検出されないので，ギャップ情報７は出力されない。もしくは，ギャップなしという旨のギャップ情報７が出力される。
【００５３】
その後，ソフトウェアの改版を伴う保守作業が行われて，図４（Ａ）に示すように，ソースコード５が改変されて，新たなコードの部分５ａが追加されているとする。
【００５４】
アノテーション解析部１２１は，図３（Ａ）のソースコード５に対する処理と同様に，図４（Ａ）のソースコード５の所定のアノテーション（注釈）“＠ａｒｃｈｎｏｄｅ”，“＠ａｒｃｈｌｉｎｋ”を検出し，クラス名，オブジェクト名，リンク先などの成分情報を抽出する。ここでは，新たな構成要素（ノード）であるクラス（クラス名＝Ａｃｃｅｓｓｏｒ）を検出し，この構成要素の成分情報を抽出する。
【００５５】
オブジェクト化部１２３は，上述の処理と同様に，記憶領域の配列データをもとに，図４（Ｂ）に示すソースコード構造モデル２２を生成してソースコードオブジェクト記憶部１５に格納する。
【００５６】
ここで，アーキテクチャ情報３に変更がなければ，図４（Ｂ）にも示すように，図３（Ｂ）と同様のアーキテクチャモデル２０がアーキテクチャオブジェクト記憶部１３に格納されることになる。
【００５７】
ギャップ分析部１４は，アーキテクチャオブジェクト記憶部１３のアーキテクチャモデル２０とソースコードオブジェクト記憶部１５のソースコード構造モデル２２とを取り出して比較し，両者それぞれに対応していない要素があるか否かを検出し，対応していない要素をギャップ情報７として出力する。ここで，図４（Ｂ）に示すように，ソースコード構造モデル２２には，新たな構成要素（ノード）である「Ａｃｃｅｓｓｏｒ」と，新たな構成要素への関連要素（リンク）である「ＲｅｃｏｒｄＳｅｔからＡｃｃｅｓｓｏｒへのリンク」とが含まれている。そこで，アーキテクチャモデル２０と対応していない，これらの新しい構成要素と関連要素とが検出され，ギャップ情報７として出力される。
【００５８】
このようにして，ソフトウェアの保守作業でソースコード５の変更が行われた場合でも，変更されたソフトウェアの構造が仕様設計で定められたアーキテクチャから乖離しているかどうかを，出力されたギャップ情報７によって知ることができる。
【００５９】
次に，図５を用いて，本形態におけるソースコードを不良パターン情報２４と照合する処理を説明する。
【００６０】
不良パターン情報記憶部１６には，所定の不良パターンがＵＭＬのモデリング表現にもとづいて記述されている不良パターン情報２４が予め格納されているとする。
【００６１】
パターン照合部１８は，不良パターン情報２４の各パターン情報とソースコード構造モデル２２とを比較し，ソースコード構造モデル２２中に不良パターンに該当する箇所があれば，その箇所を検出し，不良性検出情報９として出力する。
【００６２】
例えば，図５（Ａ）に示すソースコード５から，上記の処理を経て，図５（Ｂ）のソースコード構造モデル２２が生成されているとする。また，図５（Ｂ）に示すように，不良パターン情報２４に，「ＭｏｄｕｌｅからＡｃｃｅｓｓｏｒへのａｒｃｈｌｉｎｋがＳＩＺＥ以上であればエラーとする」という不良パターンが定義されているとする。
【００６３】
パターン照合部１８は，ソースコード構造モデル２２で，「ＭｏｄｕｌｅからＡｃｃｅｓｓｏｒへのリンク」である関連要素を抽出し，その数をＳＩＺＥと比較する。ＳＩＺＥ＝２であって，“Ｍｏｄｕｌｅ  ｘ  →Ａｃｃｅｓｓｏｒ”，“Ｍｏｄｕｌｅ  ｙ  →Ａｃｃｅｓｓｏｒ”，“Ｍｏｄｕｌｅ  ｚ  →Ａｃｃｅｓｓｏｒ”の３つの関連要素が抽出されていれば，関連要素数の超過が不良パターン情報２４の不良パターンに該当する。パターン照合部１８は，これらの関連要素を不良性検出情報９として出力する。
【００６４】
これによって，ソフトウェア保守作業でソースコードの改変が行われて，不良パターンに該当する構成がソースコード５に含まれるようになっていても，不良性検出情報９によって検出することができる。
【００６５】
図６〜図１０に，本発明の処理フローを示す。
【００６６】
図６は，本発明のメイン処理の処理フロー図，図７は，アノテーション解析処理の処理フロー図，図８は，オブジェクト化処理の処理フロー図，図９は，アーキテクチャ情報とのギャップ分析処理のためのマッチング処理の処理フロー図，および図１０は，不良パターン情報２４とのパターン照合処理のためのマッチング処理の処理フロー図である。
【００６７】
図６の処理フローにおいて，ユーザによって，処理対象として読み込むソフトウェアの一または複数のソースコード５が指定されると（ステップＳ１），アノテーション解析部１２１は，指定されたソースコード５を読み込み（ステップＳ２），アノテーション解析処理を行う（ステップＳ３）。
【００６８】
図７に，ステップＳ３のアノテーション解析処理の処理フローを示す。アノテーション解析部１２１は，読み込まれたソースコード５の各ソースについて，以下のステップＳ３２〜ステップＳ３５の各処理を行う（ステップＳ３１）。
【００６９】
まず，アノテーション解析部１２１は，読み込まれたソースコード５から，所定の表記法，例えば，「／＊」と「＊／」で囲まれた文字列であるコメントを切り出して，読み込む（ステップＳ３２）。読み込んだコメント内に，“＠”で開始されたアノテーション（注釈）があるか否かを判定する（ステップＳ３３）。“＠”で開始されたアノテーションがあれば（ステップＳ３３のＹＥＳ），そのアノテーションを解析し（ステップＳ３４），解析処理によって抽出した要素の成分情報（例えば，クラス名，フィールド名，メッセージ名，リンク先など）をオブジェクト化処理用の記憶領域に格納する（ステップＳ３５）。
【００７０】
図１１に，ソースコード５から抽出されたコメント部分の例を示す。
【００７１】
アノテーション解析部１２１は，これらの抽出されたコメントから，“＠”で開始されているアノテーション（注釈）を検出して所定の要素を抽出する。
【００７２】
アノテーション解析部１２１は，“＠ａｒｃｈｎｏｄｅ”から，構成要素を示すノードオブジェクトであると特定し，クラス名「ＰＣＶｉｅｗ」などの成分情報を抽出する。また，“＠ａｒｃｈｌｉｎｋ”から，関連要素を示すリンクオブジェクトであると特定し，リンク先「Ｃｏｎｔｒｏｌｌｅｒ」などの成分情報を抽出する。
【００７３】
そして，ステップＳ３１の処理へ戻り，次のソースを読み込んで，ステップＳ３２〜ステップＳ３５の処理を行う。全てのソースに対して上記の処理が行われていれば，処理を戻す。
【００７４】
続いて，オブジェクト化部１２３は，オブジェクト化処理を行う（図６のステップＳ４）。図８に，ステップＳ４のオブジェクト化処理の処理フローを示す。
【００７５】
オブジェクト化部１２３は，オブジェクト化処理用の記憶領域を取り出し（ステップＳ４１），取り出した配列の各項目に対して，以下の，ステップＳ４３〜ステップＳ４６の処理を行う（ステップＳ４２）。
【００７６】
まず，取り出した項目がノード用か否かを判定し（ステップＳ４３），項目がノード用であれば（ステップＳ４３のＹＥＳ），項目に格納されているクラス名，フィールド名などの成分情報をもとにノードオブジェクトを作成する（ステップＳ４４）。一方，項目がノード用でなければ（ステップＳ４３のＮＯ），項目に格納されているリンク先などの成分情報をもとにリンクオブジェクトを作成する（ステップＳ４５）。作成されたオブジェクト（リンクオブジェクトおよびノードオブジェクト）は，ソースコード構造モデル２２として，ソースコードオブジェクト記憶部１５に格納される（ステップＳ４６）。
【００７７】
図１２に，オブジェクト化部１２３によって生成されたノードオブジェクトとリンクオブジェクトとによって表されたソースコード構造モデル２２を示す。図１２において，矩形はノードオブジェクトを，矢印はリンクオブジェクトを表す。
【００７８】
そして，ステップＳ４２の処理へ戻り，次の項目を取り出して，ステップＳ４３〜ステップＳ４６の処理を行う。全ての項目について処理が行われていたら，処理を戻す。
【００７９】
次に，ギャップ分析部１４は，オブジェクト化処理によって生成された各オブジェクトに対して，ステップＳ６のマッチング処理を繰り返す（図６のステップＳ５）。
【００８０】
図９に，ステップＳ６のマッチング処理として，アーキテクチャ情報３とのギャップ分析を行う場合の処理フローを示す。
【００８１】
まず，アーキテクチャ解析部１０１は，ソフトウェアのアーキテクチャ情報３を読み込む（ステップＳ６１）。ここでは，図１３に示すように，アーキテクチャ情報３は，仕様設計資料のうち，ソフトウェアの構造をオブジェクト化した情報であるとする。この情報は，アーキテクチャモデル２０として，アーキテクチャオブジェクト記憶部１３に格納される。
【００８２】
なお，アーキテクチャ情報３が，オブジェクト化された設計情報でない場合には，アーキテクチャ解析部１０１によって，読み込まれたアーキテクチャ情報３が解析され，設計情報から構成要素および構成要素同士の関係を示す情報が抽出される。さらに，オブジェクト化部１０３によって，抽出された情報からオブジェクトが生成される。
【００８３】
ギャップ分析部１４は，アーキテクチャオブジェクト記憶部１３のアーキテクチャモデル２０の各オブジェクト要素に対して，ステップＳ６３〜ステップＳ６５の各処理を行う（ステップＳ６２）。
【００８４】
ギャップ分析部１４は，ソースコード構造モデル２２のオブジェクト（ノードオブジェクトまたはリンクオブジェクト）が，アーキテクチャモデル２０の各オブジェクトに適合しているか否かのマッチングを行い（ステップＳ６３）。マッチングの結果，ソースコード構造モデル２２のオブジェクトが，アーキテクチャモデル２０のいずれのオブジェクトとも適合していない場合に（ステップＳ６４のＮＯ），そのオブジェクトに関する情報からギャップ情報７を生成する（ステップＳ６５）。一方，マッチングの結果，ソースコード構造モデル２２のオブジェクトが，アーキテクチャモデル２０のいずれかのオブジェクトと適合している場合に（ステップＳ６４のＹＥＳ），ギャップ情報７を生成しない。
【００８５】
例えば，図１２のソースコード構造モデル２２のノードオブジェクトは，図１３のアーキテクチャモデル２０のノードオブジェクトと適合している。しかし，ソースコード構造モデル２２のサブクラス「Ｂｕｓｉｎｅｓｓ２」からクラス「Ｄｅｔａｂａｓｅ」へのリンクオブジェクトは，アーキテクチャモデル２０のリンクオブジェクトには存在せず，適合していないことになる。したがって，ギャップ分析部１４は，このリンクオブジェクトについて，非適合として検出し，リンクオブジェクトに関する情報をもとにギャップ情報７を生成する。
【００８６】
そして，ステップＳ６２の処理へ戻り，次のソースコード構造モデル２２のオブジェクトを読み込み，ステップＳ６３〜ステップＳ６５の処理を行う。全てのオブジェクトについて処理が行われていれば，生成したギャップ情報７を出力して（ステップＳ６６），処理を戻す。
【００８７】
また，ステップＳ６のマッチング処理として，不良パターン情報２４とのパターン照合処理の処理フローが実行される。図１０に，ステップＳ６のマッチング処理として，不良パターン情報２４とのパターン照合処理の処理フローを示す。
【００８８】
パターン照合部１８は，不良パターン情報記憶部１６から，不良パターン情報２４を読み込む（ステップＳ６１１）。ここでは，不良パターン情報２４は，ソフトウェアとして不適切な構成をオブジェクト化して表したルールの集合であるとする。
【００８９】
不良パターン情報２４の各ルールを表すオブジェクトに対して，以下のステップＳ６１３〜ステップＳ６１５の処理を行う（ステップＳ６１２）。
【００９０】
パターン照合部１８は，ソースコード構造モデル２２のノードオブジェクトまたはリンクオブジェクトが，取り出したルールのオブジェクトに該当するか否かのマッチングを行う（ステップＳ６１３）。マッチングの結果，ソースコード構造モデル２２のオブジェクトが，取り出したルールのオブジェクトに該当する場合に（ステップＳ６１４のＹＥＳ），該当するソースコード構造モデル２２のオブジェクトの情報をもとに不良性検出情報９を生成する（ステップＳ６１５）。マッチングの結果，ソースコード構造モデル２２のオブジェクトが，取り出したルールのオブジェクトのいずれにも該当していない場合に（ステップＳ６１４のＮＯ），不良性検出情報９を生成しない。
【００９１】
そして，ステップＳ６１２の処理へ戻り，次のルールについて，ステップＳ６１３〜ステップＳ６１５の処理を行う。不良パターン情報２４の全てのルールのオブジェクトについて処理が行われていたら，不良性検出情報９を出力して（ステップＳ６１６），処理を戻す。
【００９２】
以上，本発明をその実施の形態により説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【００９３】
また，本発明を実現するプログラムは，コンピュータが読み取り可能な，可搬媒体メモリ，半導体メモリ，ハードディスクなどの適当な記録媒体に格納することができ，これらの記録媒体に記録して提供され，または，通信インタフェースを介して種々の通信網を利用した送受信により提供されるものである。
【図面の簡単な説明】
【００９４】
【図１】本発明の実施の形態における構成例を示す図である。
【図２】アーキテクチャモデルの表現例を示す図である。
【図３】ソフトウェアの構造とアーキテクチャとのギャップを分析する処理を説明するための図である。
【図４】ソフトウェアの構造とアーキテクチャとのギャップを分析する処理を説明するための図である。
【図５】ソースコードを不良パターン情報と照合する処理を説明するための図である。
【図６】本発明のメイン処理の処理フロー図である。
【図７】本発明のアノテーション解析処理の処理フロー図である。
【図８】本発明のオブジェクト化処理の処理フロー図である。
【図９】本発明のアーキテクチャ情報とのギャップ分析処理のためのマッチング処理の処理フロー図である。
【図１０】不良パターン情報とのパターン照合処理のためのマッチング処理の処理フロー図である。
【図１１】ソースコードから抽出されたコメント部分の例を示す図である。
【図１２】ノードオブジェクトとリンクオブジェクトとによって表されたソースコード構造モデルの例を示す図である。
【図１３】アーキテクチャモデルの例を示す図である。
【符号の説明】
【００９５】
１  ソフトウェア保守支援システム
１０  アーキテクチャ構造取得部
１０１  アーキテクチャ解析部
１０３  オブジェクト化部
１２  ソース構造取得部
１２１  アノテーション解析部
１２３  オブジェクト化部
１３  アーキテクチャオブジェクト記憶部
１４  ギャップ分析部
１５  ソースコードオブジェクト記憶部
１６  不良パターン情報記憶部
１８  パターン照合部
３  アーキテクチャ情報
５  ソースコード（アノテーション付）
７  ギャップ情報
９  不良性検出情報
２０  アーキテクチャモデル
２２  ソースコード構造モデル
２４  不良パターン情報
【図１】
2007265089.tif 000003
【図２】
2007265089.tif 000004
【図３】
2007265089.tif 000005
【図４】
2007265089.tif 000006
【図５】
2007265089.tif 000007
【図６】
2007265089.tif 000008
【図７】
2007265089.tif 000009
【図８】
2007265089.tif 000010
【図９】
2007265089.tif 000011
【図１０】
2007265089.tif 000012
【図１１】
2007265089.tif 000013
【図１２】
2007265089.tif 000014
【図１３】
2007265089.tif 000015