(57)【要約】      （修正有）【課題】情報システム中のプログラムのメインテナンス等に必要となる具体的な情報を提示する。【解決手段】本プログラム解析方法は、プログラムにおける処理の対象となる情報単位であるエンティティと、エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブル１３１に格納するステップと、関係テーブル１３１に格納されたデータを用いてイベントの重要度を算出し、記憶装置に格納するステップと、関係テーブル１３１に格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、記憶装置に格納された当該イベントの重要度を用いて特定のエンティティの影響度を算出し、記憶装置に格納するステップとを含む。【選択図】図１
2007241916.tif 000002
【特許請求の範囲】
【請求項１】
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて前記イベントの重要度を算出し、記憶装置に格納するイベント重要度算出ステップと、
前記関係テーブルに格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、前記記憶装置に格納された当該イベントの重要度を用いて前記特定のエンティティの影響度を算出し、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【請求項２】
前記関係登録ステップにおいて、前記エンティティに対する処理を行うプログラムの識別情報と、当該処理の種別とを、前記エンティティに関係付けて前記関係テーブルに格納し、
前記関係テーブルに格納されたデータを用いて、前記特定のエンティティに対して所定の種別の処理を行うプログラムの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記プログラムの数を用いて、前記特定のエンティティの利用度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記特定のエンティティの利用度及び前記特定のエンティティの影響度を用いて、前記特定のエンティティの総合重要度を算出し、前記記憶装置に格納するステップと、
をさらに含む請求項１記載のプログラム解析方法。
【請求項３】
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて前記エンティティの重要度を算出し、記憶装置に格納するエンティティ重要度算出ステップと、
前記関係テーブルに格納されたデータを用いて特定のイベントが影響を与える処理の対象となるエンティティを特定し、前記記憶装置に格納された当該エンティティの重要度を用いて前記特定のイベントの影響度を算出し、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【請求項４】
前記関係テーブルに格納されたデータを用いて、前記特定のイベントが影響を与える処理の対象となるエンティティの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数を用いて、前記特定のイベントの利用度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記特定のイベントの利用度及び前記特定のイベントの影響度とを用いて、前記特定のイベントの総合重要度を算出し、前記記憶装置に格納するステップと、
をさらに含む請求項３記載のプログラム解析方法。
【請求項５】
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて、第１のエンティティに対する処理及び第２のエンティティに対する処理の両方に影響を与えるイベントの数を計数し、記憶装置に格納するステップと、
前記記憶装置に格納された前記イベントの数を用いて、前記第１のエンティティと前記第２のエンティティとのエンティティ間の類似度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティ間の類似度が所定の値を上回る場合に、前記第１のエンティティ及び前記第２のエンティティが問題を有することを示すデータを、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【請求項６】
前記関係テーブルに格納されたデータを用いて、前記エンティティに対する処理に影響を与えるイベントの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記イベントの数が所定の値を上回るエンティティを特定し、当該エンティティが問題を有することを示すデータを、前記記憶装置に格納するステップと、
をさらに含む請求項５記載のプログラム解析方法。
【請求項７】
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて、第１のイベントが影響を与える処理の対象となり且つ第２のイベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数を用いて、前記第１のイベントと前記第２のイベントとのイベント間の類似度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記イベント間の類似度が所定の値を上回る場合に、前記第１のイベント及び前記第２のイベントが問題を有することを示すデータを、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【請求項８】
前記関係テーブルに格納されたデータを用いて、前記イベントが影響を与える処理の対象となるエンティティの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数が所定の値を上回るイベントを特定し、当該イベントが問題を有することを示すデータを、前記記憶装置に格納するステップと、
をさらに含む請求項７記載のプログラム解析方法。
【請求項９】
請求項１乃至８のうちいずれか１つ記載のプログラム解析方法をコンピュータに実行させるためのプログラム。
【請求項１０】
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録手段と、
前記関係テーブルに格納されたデータを用いて前記イベントの重要度を算出し、記憶装置に格納するイベント重要度算出手段と、
前記関係テーブルに格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、前記記憶装置に格納された当該イベントの重要度を用いて前記特定のエンティティの影響度を算出し、前記記憶装置に格納する影響度算出手段と、
を有するプログラム解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析技術に関し、より詳しくは、プログラムにおける処理の対象となる情報単位であるエンティティ（例えばデータベースのテーブル等）と、エンティティに対する処理に影響を与えるイベント（例えば、入出力の対象となる入力画面、ファイル、又はキー操作等）との関係を解析する技術に関する。
【背景技術】
【０００２】
業務システム等の情報システムの保守や再構築を効率的に行うためには、情報システム内のデータ処理構造を理解する必要がある。しかし、情報システムの規模が大きい場合や、業務変更等による修正が頻繁に行われる場合は、処理構造が複雑化し、情報システム全体を把握することが難しくなる。また、長期に渡って保守・運用されるために当初の開発者やシステム管理者が不在となる場合や、ドキュメント保守が不十分で、システム内容と同期していない場合も多く、情報システムの把握が更に困難になっている。そこで、ソースプログラム等を解析することにより、エンティティ及びイベントの依存関係若しくは影響範囲、又は制御フロー若しくはデータフローを抽出する技術が用いられてきた。
【０００３】
例えば特開２００１−９２６５１号公報には、プログラム内におけるデータ項目アクセス状況を調査する技術と、プログラムに含まれるプロセスとデータ項目との結合関係を、データ項目アクセス状況に基づき解析する技術とが開示されている。さらに、データ項目アクセス状況データ及び収集されたプロセスの情報を使用して、データ項目の振り分け態様又はプロセスの分割態様を提示する技術も開示されている。
【０００４】
また、例えば特開平７−１０４９９４号公報には、ソースプログラム中で定義されているデータ項目名、使用用途等を抽出する技術、ソースプログラム中において他プログラムや外部周辺装置などと外部インタフェースを有するデータ項目群に対する入力チェック処理または出力時の設定処理を行っているステートメントを業務仕様に係わるステートメントとして抽出し且つファイルアクセス関連処理を行っているステートメントをコンピュータ制御に係わるステートメントとして抽出する技術、並びにこれらの抽出したステートメントを、“業務仕様”と“制御”とに区分けして、例えばその行番号とその構文内で使用されているデータ項目が属するレコードと共にファイル出力し、又は上記抽出したステートメントに、上記レコード名と業務用語とを関係付けてリスト出力する技術が開示されている。しかし、これらの発明においては、解析結果に基づいて、特定のエンティティ若しくはイベントが重要であるか判断し、又は問題点を有するか否か判定するという観点は示されていない。
【０００５】
例えば特開２００５−１２２３７７号公報には、拡張マークアップ言語で記述されたコマンドデータを受信する手段と、コマンドデータを解析する解析手段と、解析手段によりコマンドデータからタグに制御コードが定義された要素が検出された場合に、要素のタグに定義された制御コードに予め対応付けられた処理を実行する制御手段とを備える制御装置が開示されている。この発明に従えば、標準的な言語で記述されたデータを送受信しつつ、スループットを向上させた制御装置を提供することができる。また、例えば特開２００２−３０４４０５号公報には、ロードされるＸＭＬ文書の種類毎に生成されるデータベース・コマンドを決定し、マルチスレッド及び分離プロセスを活用してＸＭＬを解析しデータベースを更新する技術が開示されている。この発明によれば、多くのＸＭＬデータ・ファイルを同時に処理してロードすることができ、所要システム・メモリを最小にして、システムの信頼性とメモリ管理を最大にして、ＸＭＬファイルの処理の開始からデータベースへのロードの終了までに必要な時間を短縮する。しかし、これらの発明において、ソースコードの解析結果は、制御コードの実行に用いられるものであって、エンティティとイベントとの関係をユーザに対して提示するために用いられるものではない。
【０００６】
例えば特開２００３−１５７２６２号公報には、検索対象とする特許文献に含まれる単語あるいは複合語を予め検索用語句として当該特許文献に関連づけて記憶する特許検索データベース部と、検索元特許文献を解析し、当該条件設定用特許文献に含まれる単語あるいは複合語を検索条件語句として抽出する語句抽出部と、検索用語句および検索条件語句を比較し、検索元特許文献に対して類似性の高い特許文献を検索元特許文献に関連性の高い特許文献として検索する検索部とを有する特許解析装置が開示されている。上記構成によれば、検索元特許文献に対して類似性の高い特許文献を検索元特許文献に関連性の高い特許文献として検索することができる。しかし、プログラムの解析技術において、このようにプログラム間の類似性又は関連性を判断するような技術は存在していなかった。
【０００７】
以上のように、従来技術においては、エンティティとイベントとの関係を示すのみであって、解析結果に基づいて、エンティティ若しくはイベントが重要であるか特定し、又はエンティティ若しくはイベントに問題があるか否か判定する技術は存在していなかった。
【特許文献１】特開２００１−９２６５１号公報
【特許文献２】特開平７−１０４９９４号公報
【特許文献３】特開２００５−１２２３７７号公報
【特許文献４】特開２００２−３０４４０５号公報
【特許文献５】特開２００３−１５７２６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従って、本発明の目的は、情報システム中のプログラムのメインテナンス等に必要となる具体的な情報を提示するための技術を提供することである。
【０００９】
また、本発明の他の目的は、情報システム中のプログラムにおけるエンティティとイベントとの関係をより具体的に提示するための新規な技術を提供することである。
【００１０】
本発明の他の目的は、プログラムにおけるエンティティとイベントとの関係を解析することにより、エンティティ又はイベントの重要度を特定するための技術を提供することである。
【００１１】
本発明のさらに他の目的は、プログラムにおけるエンティティとイベントとの関係の解析結果を用いて、エンティティ又はイベントが問題点を有しているか否か判定するための技術を提供することである。
【課題を解決するための手段】
【００１２】
本発明の第１の態様に係るプログラム解析方法（エンティティの影響度を算出する方法）は、プログラムにおける処理の対象となる情報単位であるエンティティ（例えばデータベースのテーブル等）と、エンティティに対する処理に影響を与えるイベント（例えば、入出力の対象となる入力画面、ファイル、又はキー操作等）とを関係付けて、関係テーブルに格納する関係登録ステップと、関係テーブルに格納されたデータを用いてイベントの重要度（例えば実施の形態におけるイベントの第１重要度）を算出し、記憶装置に格納するイベント重要度算出ステップと、関係テーブルに格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、記憶装置に格納された当該イベントの重要度を用いて特定のエンティティの影響度（例えば実施の形態におけるエンティティの第２重要度）を算出し、記憶装置に格納するステップとを含む。
【００１３】
情報システムにおいては、複数のプログラム、エンティティ及びイベントが密接に関連し、互いに影響を及ぼしあっている。このため、例えば情報システム中の特定のエンティティを更新する場合、イベントに対してどのような影響を与えるか、さらにそのイベントが影響を受けた結果、情報システム中の他の部分、例えばその他のエンティティに対してどのような影響を及ぼすか考慮する必要がある。本発明の第１の態様に係るプログラム解析方法によれば、特定のエンティティに対する処理に影響を与えるイベントが重要なものであるほど（例えばそのイベントが他のエンティティに及ぼす影響が大きいほど）、その特定のエンティティの影響度は大きくなる。従って、ユーザはエンティティの影響度を知ることにより、そのエンティティを更新することで、情報システム中のその他の部分にどれだけの影響を与えるか把握しやすくなる。
【００１４】
また、上で述べた関係登録ステップにおいて、エンティティに対する処理を行うプログラムの識別情報と、当該処理の種別とを、エンティティに関係付けて関係テーブルに格納してもよく、関係テーブルに格納されたデータを用いて、特定のエンティティに対して所定の種別の処理を行うプログラムの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたプログラムの数を用いて、特定のエンティティの利用度（例えば実施の形態におけるエンティティの第１重要度）を算出し、記憶装置に格納するステップと、記憶装置に格納された特定のエンティティの利用度及び特定のエンティティの影響度を用いて、特定のエンティティの総合重要度を算出し、記憶装置に格納するステップとをさらに含んでもよい。エンティティに対する処理を行うプログラムの数を計数することにより、エンティティが情報システムの中で影響を及ぼす範囲を特定できる。さらに、影響の強さを示すエンティティの影響度と、影響を及ぼす範囲を示すエンティティの利用度とを総合することにより、そのエンティティがどれだけ重要であるか特定することができる。
【００１５】
本発明の第２の態様に係るプログラム解析方法（イベントの影響度を算出する方法）は、プログラムにおける処理の対象となる情報単位であるエンティティと、エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、関係テーブルに格納されたデータを用いてエンティティの重要度（例えば実施の形態におけるエンティティの第１重要度）を算出し、記憶装置に格納するエンティティ重要度算出ステップと、関係テーブルに格納されたデータを用いて特定のイベントが影響を与える処理の対象となるエンティティを特定し、記憶装置に格納された当該エンティティの重要度を用いて特定のイベントの影響度（例えば実施の形態におけるイベントの第２重要度）を算出し、記憶装置に格納するステップとを含む。
【００１６】
本発明の第２の態様に係るイベントの影響度を算出する方法は、第１の態様に係るエンティティの影響度を算出する方法と同様の思想に基づくものである。第１の態様における場合と同様に、イベントであるファイルや入力画面等におけるデータが、エンティティに対してどのような影響を与えるか、さらにそのエンティティが情報システム中のその他の部分、例えばその他のイベントに対してどのような影響を及ぼすか考慮する必要がある。ユーザは本発明の第２の態様により算出されたイベントの影響度を知ることにより、そのイベントが情報システム中のその他の部分にどれだけの影響を与えるか把握しやすくなる。
【００１７】
また、関係テーブルに格納されたデータを用いて、特定のイベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたエンティティの数を用いて、特定のイベントの利用度（例えば実施の形態におけるイベントの第１重要度）を算出し、記憶装置に格納するステップと、記憶装置に格納された特定のイベントの利用度及び特定のイベントの影響度を用いて、特定のイベントの総合重要度を算出し、記憶装置に格納するステップとをさらに含んでもよい。本発明の第１の態様と同様に、イベントの利用度は、そのイベントが情報システムの中で影響を及ぼす範囲を示し、イベントの利用度と影響の強さを示すイベントの影響度とを総合することにより、そのイベントがどれだけ重要であるか特定することができる。
【００１８】
本発明の第３の態様に係るプログラム解析方法（エンティティが問題を有するか否か判定する方法）は、プログラムにおける処理の対象となる情報単位であるエンティティと、エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、関係テーブルに格納されたデータを用いて、第１のエンティティに対する処理及び第２のエンティティに対する処理の両方に影響を与えるイベントの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたイベントの数を用いて、第１のエンティティと第２のエンティティとのエンティティ間の類似度を算出し、記憶装置に格納するステップと、記憶装置に格納されたエンティティ間の類似度が所定の値を上回る場合に、第１のエンティティ及び第２のエンティティが問題を有することを示すデータを、記憶装置に格納するステップとを含む。
【００１９】
情報システムに対する修正が頻繁に行われた結果、相互に類似するエンティティ（例えば共通するデータ項目を多く含むテーブル）が複数作成される場合が考えられる。相互に類似するエンティティが存在すると、同じ内容のデータを複数のエンティティで保持することになるため、記憶装置の容量を浪費することになる。さらに、プログラムミス等によるデータの更新漏れが生じやすくなる。このようなエンティティには問題があり、エンティティを統合する等の措置をとることが好ましい。本発明の第３の態様に係るプログラム解析方法によれば、あるエンティティと他のエンティティとの両方に影響を及ぼすイベントの数に基づいて、エンティティ間の類似度を算出し、類似度に応じてエンティティの問題の有無を判定している。２つのエンティティの両方に影響を及ぼすイベントの数を用いているのは、例えば２つのエンティティが相互に類似する場合、２つのエンティティの両方に影響を及ぼすイベントが多いと考えられるためである。これにより、ユーザは問題があるエンティティを把握しやすくなる。
【００２０】
また、関係テーブルに格納されたデータを用いて、エンティティに対する処理に影響を与えるイベントの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたイベントの数が所定の値を上回るエンティティを特定し、当該エンティティが問題を有することを示すデータを記憶装置に格納するステップとをさらに含んでもよい。エンティティが影響を及ぼすイベントの数が多すぎると、情報システムの保守作業の際に問題が生じやすくなるため、エンティティの分割や正規化等の措置をとることが好ましい。エンティティが問題を有することを示すデータを提示することで、ユーザは対処が望まれるエンティティを把握しやすくなる。
【００２１】
本発明の第４の態様に係るプログラム解析方法（イベントが問題を有するか否か判定する方法）は、プログラムにおける処理の対象となる情報単位であるエンティティと、エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、関係テーブルに格納されたデータを用いて、第１のイベントが影響を与える処理の対象となり且つ第２のイベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたイベントの数を用いて、第１のイベントと第２のイベントとのイベント間の類似度を算出し、記憶装置に格納するステップと、記憶装置に格納されたイベント間の類似度が所定の値を上回る場合に、第１のイベント及び第２のイベントが問題を有することを示すデータを、記憶装置に格納するステップとを含む。
【００２２】
情報システムに対する修正が頻繁に行われた結果、相互に類似するイベント（例えば共通するデータ項目を多く含むファイル、又は類似する目的で利用される入力画面等）が複数作成される場合が考えられる。相互に類似するイベントが存在すると、システムが複雑化し、保守作業の際に問題が生じる可能性が高くなるため、相互に類似するイベントを統合する等の措置をとることが好ましい。本発明の第４の態様に係るプログラム解析方法によれば、あるイベントが影響を与える処理の対象となり且つ他のイベントが影響を与える処理の対象となるエンティティの数に基づいて、イベント間の類似度を算出し、類似度に応じてイベントの問題の有無を判定している。２つのイベントから影響を受けるエンティティの数を用いているのは、相互に類似するイベントは、共に同じエンティティに影響を与えることが多いと考えられるためである。これにより、ユーザは問題があるイベントを把握しやすくなる。
【００２３】
また、関係テーブルに格納されたデータを用いて、イベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納するステップと、記憶装置に格納されたエンティティの数が所定の値を上回るイベントを特定し、当該イベントが問題を有することを示すデータを、記憶装置に格納するステップとをさらに含んでもよい。イベントが影響を及ぼすエンティティの数が多すぎると、情報システムの保守作業の際に問題が生じやすくなるため、イベントを分割し、又はエンティティを統合するといった措置をとることが好ましい。イベントが問題を有することを示すデータを提示することで、ユーザは対処が望まれるイベントを把握しやすくなる。
【００２４】
本発明の第１乃至第４の態様のいずれかに係るプログラム解析方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークを介してディジタル信号にて頒布される場合もある。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【発明の効果】
【００２５】
本発明によれば、情報システム中のプログラムのメインテナンス等に必要となる具体的な情報を提示することができる。
【００２６】
本発明の他の側面によれば、情報システム中のプログラムにおけるエンティティとイベントとの関係をより具体的に提示することができる。
【００２７】
また、本発明の他の側面によれば、プログラムにおけるエンティティとイベントとの関係を解析することにより、エンティティ又はイベントの重要度を特定することができる。
【００２８】
さらに、本発明の他の側面によれば、プログラムにおけるエンティティとイベントとの関係の解析結果を用いて、エンティティ又はイベントが問題点を有しているか否か判定することができる。
【発明を実施するための最良の形態】
【００２９】
図１に本発明の実施の形態に係る解析装置のシステム概要を示す。なお、以下では解析装置１に全ての機能が実装されているスタンドアロン構成の例を示すが、例えばユーザ端末と解析装置１とからなるクライアント＝サーバ構成であってもよい。また、解析装置１が単一のコンピュータにより構成される場合の例を示すが、複数のコンピュータにより構成される場合もある。
【００３０】
図１に示したように、解析装置１は、指示受付部１０１と、ソースプログラム格納部１１１と、構文木解析部１１３と、構文木テーブル１１５と、イベント・エンティティ抽出部１２１と、イベント格納部１２３と、変数格納部１２５と、プログラムＩＤ格納部１２７と、関係テーブル１３１と、分析値算出部１３３と、エンティティ分析値テーブル１４１と、イベント分析値テーブル１４３と、重要度特定部１４５と、エンティティ類似度テーブル１５１と、イベント類似度テーブル１５３と、問題点特定部１５５と、出力情報生成部１６１と、出力情報格納部１６３と、出力部１７１とを有する。
【００３１】
指示受付部１０１は、ユーザから指示を受け付けて、構文木解析部１１３、重要度特定部１４５、及び問題点特定部１５５に対して命令を出力する。構文木解析部１１３は、指示受付部１０１からデータを受信すると、ソースプログラム格納部１１１を参照して処理を行い、処理結果を構文木テーブル１１５に格納する。イベント・エンティティ抽出部１２１は、中間的な処理結果を、イベント格納部１２３、変数格納部１２５及びプログラムＩＤ格納部１２７に格納しつつ、構文木テーブル１１５を処理して、最終的な処理結果を関係テーブル１３１に格納する。分析値算出部１３３は、関係テーブル１３１を参照して処理を行い、処理結果をエンティティ分析値テーブル１４１とイベント分析値テーブル１４３とに格納する。重要度特定部１４５は、エンティティ分析値テーブル１４１とイベント分析値テーブル１４３とを参照して処理を行い、処理結果をエンティティ分析値テーブル１４１とイベント分析値テーブル１４３とに格納する。問題点特定部１５５は、中間的な処理結果をエンティティ類似度テーブル１５１及びイベント類似度テーブル１５３に格納しつつ、エンティティ分析値テーブル１４１及びイベント分析値テーブル１４３を処理して、最終的な処理結果をエンティティ分析値テーブル１４１及びイベント分析値テーブル１４３に格納する。出力情報生成部１６１は、エンティティ分析値テーブル１４１と、イベント分析値テーブル１４３とを参照して処理を行い、処理結果を出力情報格納部１６３に格納する。出力部１７１は、出力情報格納部１６３に格納されたデータをユーザに対して出力する。
【００３２】
次に、図２乃至図２５を用いて本実施の形態における処理について説明する。ここでは、複数のソースプログラムを解析し、ソースプログラム中の処理の対象となるエンティティ及びエンティティに影響を及ぼすイベントの重要度を算出し、さらに問題があるエンティティ及びイベントを特定する処理の例を示す。なお、以下では例えば図３に示すようなＣＯＢＯＬ言語で作成されたソースプログラムを解析する例を示すが、その他のプログラム言語で作成されたソースプログラムを解析するようにしてもよい。
【００３３】
指示受付部１０１は、解析処理の実行指示を受け付けると、構文木解析部１１３に処理命令を出力する（ステップＳ１）。実行指示は、例えば解析装置１の入力装置を通じてユーザにより入力され、又はユーザの端末から例えば社内ＬＡＮ（Local Area Network）等のネットワークを経由して送信される。実行指示は、例えば解析対象とする１又は複数のソースプログラムの指定、又は把握したい情報の種別（例えば問題があるエンティティを特定するか、又はイベントの重要度を算出するか等）を含む。
【００３４】
構文木解析部１１３は、指定されたソースプログラムをソースプログラム格納部１１１から読み出す（ステップＳ３）。次に、読み出したソースプログラムを解析して構文木のデータを生成し、構文木テーブル１１５に格納する（ステップＳ５）。
【００３５】
図４に、図３に示すソースプログラムに基づいて作成された構文木の一例を示す。本実施の形態においては、構文木の一つのノードは、原則としてソースプログラムの一つのステートメントに対応する。例えば、図３のソースプログラム中において、行番号０１０１００のＭＯＶＥステートメント３０１は、図４に示す構文木のノード４０１に対応する。なお、図４に示す構文木は、構文木テーブル１１５において、例えば図５に示すようなデータとして保持される。
【００３６】
図３に示された「ＳＡＭＰＬＥ」というプログラムＩＤのソースプログラムを解析した結果、構文木テーブル１１５に格納される構文木のデータの一例を図５に示す。構文木テーブル１１５は、ノード番号の列１０１１と、親ノード番号の列１０１３と、プログラムＩＤの列１０１５と、行番号の列１０１７と、種別の列１０３１と、属性１の列１０５１と、値１の列１０５３と、属性２の列１０７１と、値２の列１０７３とを含む。構文木テーブルの１行は、構文木の１つのノードを表す。例えば、行１１１１は、図３のソースプログラム中の行番号０１０１００のＭＯＶＥステートメント３０１と、図４に示す構文木のノード４０１とに対応する。ノード番号の列１０１１には、構文木の各ノードについて一意に設定される番号が格納される。図５に示す例では、行１１０１に示されるように、「ＳＡＭＰＬＥ」というプログラムＩＤのノードがルートノードであり、他のノードは親ノード番号の列１０１３に登録された親ノードにリンクする。本実施の形態においては、プログラムＩＤは、図５に示されるように、ルートノードの行１１０１の属性１の列１０５１に登録されている。構文木テーブル１１５には、行１１５１に示されるように複数の属性及び値の組み合わせが登録される場合もあれば、行１１３１に示されるように属性及び値の組み合わせが一つも登録されない場合もある。構文木のデータは、周知のプログラム解析技術によって生成できるので、詳細な説明については省略する。
【００３７】
次に、イベント・エンティティ抽出部１２１は、構文木テーブル１１５を参照して、関係抽出処理を実施する（ステップＳ７）。関係抽出処理の詳細については、図６乃至図１２を用いて説明する。なお、関係抽出処理はプログラム毎に実行される。また、本実施の形態においては、「画面種別」という変数は、入力画面のイベントに関する変数であり、例えば「画面種別」変数に値が代入された場合、その値により指定されたイベントが生起されるものとする。
【００３８】
まず、イベント・エンティティ抽出部１２１は、構文木テーブル１１５からルートノードのデータを読み出し、プログラムＩＤをプログラムＩＤ格納部１２７に格納する（ステップＳ１００）。図７に、プログラムＩＤ格納部１２７に格納されるデータの一例を示す。プログラムＩＤ格納部１２７には、図７に示すように、プログラムＩＤが一時的にスタックされる。なお、プログラム中においてサブルーチンを呼び出す場合、当該サブルーチンのプログラムＩＤがさらにスタックされる。サブルーチンを呼び出す場合については、後の処理の説明において説明する。
【００３９】
次に、イベント・エンティティ抽出部１２１は、構文木テーブル１１５から次に実行されるノードのデータを読み出す（図６：ステップＳ１０１）。次に実行されるノードは、通常は構文木テーブル１１５の次の行に示されたノードであるが、例えばプログラム制御文において指定されたノードである場合もある。次に、読み出したノードのデータがイベント処理文（例えば入力画面、ファイル又はキー操作に関する処理についてのステートメント）に該当するか判断する（ステップＳ１０３）。イベント処理文に該当すると判断された場合は（ステップＳ１０３：Ｙｅｓルート）、読み出したノードのデータがイベント生起文（例えば入力画面の表示、又はファイルを開く処理等についてのステートメント）に該当するかさらに判断する（ステップＳ１０５）。一方、イベント処理文に該当しないと判断された場合は（ステップＳ１０３：Ｎｏルート）、処理は端子Ａを介して図９の処理フローに移行する。
【００４０】
イベント・エンティティ抽出部１２１は、読み出したノードのデータがイベント生起文に該当すると判断された場合（ステップＳ１０５：Ｙｅｓルート）、そのノードにおいて生起されたイベントを、イベント格納部１２３に登録する（ステップＳ１０７）。図８に、イベント格納部１２３に格納されるデータの一例を示す。イベント格納部１２３には、図８に示すような、イベントに関するデータを一時的に保持するためのテーブルが格納されており、当該テーブルは、イベント種別の列２０１１と、イベント名の列２０３１とを含む。イベント種別の列２０１１には、例えば画面表示、ファイル、又はキー操作等のイベントの種別が登録される。イベント名の列２０３１には、イベント生起文において対象とされたイベントが登録される。所定の条件（例えば変数の値等）に応じてイベントが異なる場合には、例えば変数格納部１２５に格納された変数に基づいて、条件に該当するイベントだけが登録される。イベント格納部１２３に登録されたイベントのデータは、そのイベントについてのイベント終了文が検出されるか、又はプログラムの終了が検出された場合に削除される。
【００４１】
図５に示す構文木のデータの例においては、行１１１１において「画面種別」という変数に値を設定している。このため、行１１１１は入力画面の表示に関するステートメントを示すものであり、イベント生起文に該当すると判断される。この場合、イベント格納部１２３には、図５の行１１１１に基づいて、図８の行２１０１に示されるようなデータが登録される。また、図５の行１１３３についても、「ファイル１」というファイルを読み出しているため、イベント生起文に該当すると判断され、イベント格納部１２３に、図８の行２１１１に示されるようなデータが登録される。
【００４２】
一方、読み出したノードのデータがイベント生起文に該当しないと判断された場合（ステップＳ１０５：Ｎｏルート）、イベント・エンティティ抽出部１２１は、読み出したノードのデータがイベント終了文（例えば入力画面の切り替え、又はファイルを閉じる処理等についてのステートメント）に該当するか判断する（ステップＳ１１１）。イベント終了文に該当しないと判断された場合は（ステップＳ１１１：Ｎｏルート）、処理は端子Ｂを介して図１１の処理フローに移行する。一方、イベント終了文に該当すると判断された場合は（ステップＳ１１１：Ｙｅｓルート）、イベント・エンティティ抽出部１２１は、イベント終了文において指定されたイベントに関するデータを、イベント格納部１２３から削除する（ステップＳ１１３）。その後、処理は端子Ｂを介して図１１の処理フローに移行する。
【００４３】
読み出したノードのデータがイベント処理文ではないと判断された場合、イベント・エンティティ抽出部１２１は、読み出したノードのデータがエンティティ処理文（例えばデータベースにアクセスするためのＳＱＬ（Structured Query Language）文を実行するステートメント等）に該当するか判断する（図９：ステップＳ１２１）。エンティティ処理文に該当しないと判断された場合は（ステップＳ１２１：Ｎｏルート）、処理は端子Ｂを介して図１１の処理フローに移行する。
【００４４】
一方、エンティティ処理文に該当すると判断された場合（ステップＳ１２１：Ｙｅｓルート）、イベント・エンティティ抽出部１２１は、そのエンティティ処理文において処理されるエンティティと、そのエンティティに対する処理の種別とを、関係テーブル１３１に登録する（ステップＳ１２３）。
【００４５】
例えば、イベント・エンティティ抽出部１２１が構文木テーブル１１５から行１１５１のデータを読み出した場合、行１１５１はＳＱＬを実行するためのステートメントを示すものであるため、エンティティ処理文に該当すると判断される。行１１５１が示すステートメントは、「ＴＡＢＬＥ−Ａ」というエンティティに対して、「ＵＰＤＡＴＥ」（更新）処理を行うためのものであるため、関係テーブル１３１には「ＴＡＢＬＥ−Ａ」というエンティティと、「ＵＰＤＡＴＥ」という処理の種別とが登録される。
【００４６】
次に、イベント・エンティティ抽出部１２１は、イベント格納部１２３に格納されたイベントを、登録されたエンティティに対応付けて、関係テーブル１３１に格納する（ステップＳ１２５）。本実施の形態においては、イベント格納部１２３には「登録１」という画面のイベントが登録されているため、「登録１」というイベントが「ＴＡＢＬＥ−Ａ」というエンティティに対応付けられて、関係テーブル１３１に登録される。
【００４７】
次に、プログラムＩＤ格納部１２７に格納されたプログラムＩＤを、登録されたエンティティに対応付けて、関係テーブル１３１に格納する（ステップＳ１２７）。プログラムＩＤ格納部１２７に複数のプログラムＩＤが格納されている場合、最初にスタックされた（スタックの最下段に格納された）プログラムＩＤをメインルーチンとして登録し、その他のプログラムＩＤをサブルーチンとして登録する。
【００４８】
図１０に、関係テーブル１３１に格納されるデータの一例を示す。関係テーブル１３１は、プログラムの部３０１１と、イベントの部３０３１と、エンティティの部３０５１とを含む。プログラムの部３０１１は、プログラムの列３０１３と、呼び出しサブルーチンの列３０１５とを含む。イベントの部３０３１は、読み込みファイルの列３０３３と、画面の列３０３５と、キー操作の列３０３７とを含む。エンティティの部３０５１は、対象テーブルの列３０５３と、行番号の列３０５５と、処理の列３０５７とを含む。本実施の形態の例においては、図１０の行３１１１に示されるように、プログラム「ＳＡＭＰＬＥ」において、「ＴＡＢＬＥ−Ａ」に対して「ＵＰＤＡＴＥ」処理が行われており、その処理に「登録１」というイベントが影響を及ぼしていることが登録されている。イベント格納部１２３に複数のイベントが登録されている場合は、全てのイベントがエンティティに対して影響を及ぼしていると考えられるため、例えば図１０の行３１３１に示されるように、登録された全てのイベントが関係テーブル１３１に登録される。また、行番号の列３０５５には、ソースプログラム中において、エンティティに対する処理を行うステートメントの行番号が格納される。
【００４９】
なお、行３１１１の例においては、サブルーチンのプログラムＩＤがプログラムＩＤ格納部１２７に登録されていないため、呼び出しサブルーチンの列３０１５にはデータが登録されない。また、関係テーブル１３１のエンティティの部３０５１においては、エンティティをテーブル単位で管理しているが、テーブルに含まれる列（ＩＴＥＭ）単位でエンティティを管理するようにしてもよい。
【００５０】
次に、イベント・エンティティ抽出部１２１は、構文木テーブル１１５から読み出したノードのデータが、エンティティ参照文に該当するか判断する（ステップＳ１３１）。エンティティ参照文は、例えばＳＱＬステートメントにおける「ＳＥＬＥＣＴ」ステートメント等、エンティティに対する処理の種別が「参照」に該当するものである。エンティティ参照文に該当する場合は（ステップＳ１３１：Ｙｅｓルート）、当該エンティティ参照文において参照されるエンティティを、イベントとしてイベント格納部１２３に登録する（ステップＳ１３３）。エンティティに対する処理であるにもかかわらずイベントとして扱うのは、当該エンティティ参照文において参照されたデータが、その後のエンティティに対する処理に影響を及ぼす可能性があるためである。その後、処理は端子Ｂを介して図１１の処理フローに移行する。一方、エンティティ参照文には該当しないと判断された場合は（ステップＳ１３１：Ｎｏルート）、処理は端子Ｂを介して図１１の処理フローに移行する。
【００５１】
ステップＳ１０１乃至Ｓ１３３において、構文木テーブル１１５から読み出したノードのデータがイベント処理文に該当するか、又はエンティティ処理文に該当するか判断した後に、イベント・エンティティ抽出部１２１は、読み出したノードのデータがプログラム制御文に該当するか判断する（図１１：ステップＳ１４１）。プログラム制御文に該当しないと判断された場合は（ステップＳ１４１：Ｎｏルート）、処理はステップＳ１８１に移行する。一方、プログラム制御文に該当すると判断された場合（ステップＳ１４１：Ｙｅｓルート）、イベント・エンティティ抽出部１２１は、読み出したノードのデータが条件判定文に該当するかさらに判断する（ステップＳ１４３）。条件判定文に該当しないと判断された場合（ステップＳ１４３：Ｎｏルート）、処理はステップＳ１５１に移行する。
【００５２】
一方、条件判定文（例えばＩＦステートメント等）に該当すると判断された場合（ステップＳ１４３：Ｙｅｓルート）、イベント・エンティティ抽出部１２１は、条件式を評価できるか判断する（ステップＳ１４５）。本実施の形態において、条件式を評価できるとは、例えば条件式の真偽により処理が分岐する場合において、条件式が真であるか偽であるか判定でき、その結果どの処理が実行されるか特定できるということである。例えば変数Ａの値による条件式があった場合に、変数Ａの値が既に定義され又は代入されていれば、変数Ａの値が一意に定まるため条件式を評価可能である。一方で、変数Ａの値が一意に定まらない場合、例えば他の評価不能な条件式に基づいて変数Ａの値が特定される場合は、条件式が評価不能である。例えば図５に示す構文木テーブル１１５において、行１１２１の条件判定文は、分岐条件が「画面種別」変数であり、且つ「画面種別」変数は行１１１１において既に定義されているため、条件式を評価できる。条件判定文の条件式を評価できる場合（ステップＳ１４５：Ｙｅｓルート）、処理はステップＳ１７１に移行する。一方、条件式を評価できない場合（ステップＳ１４５：Ｎｏルート）、次に実行される処理を特定できないため、関係テーブル１３１から、実行される可能性があるノードを順に読み出す（ステップＳ１４７）。その後、処理はステップＳ１７１に移行する。
【００５３】
読み出したノードのデータが条件判定文に該当しないと判断された場合（ステップＳ１４３：Ｎｏルート）、イベント・エンティティ抽出部１２１は、読み出したノードのデータがサブルーチンを呼び出す文（例えばＣＡＬＬステートメント等）に該当するか判断する（ステップＳ１５１）。該当すると判断された場合（ステップＳ１５１：Ｙｅｓルート）、その文において呼び出されるサブルーチンのプログラムＩＤを、プログラムＩＤ格納部１２７に登録する（ステップＳ１５３）。エンティティに対する処理が、プログラムから呼び出されたサブルーチンにより実行されることを、ユーザに提示できるようにするためである。本実施の形態においては、図７に示されるように、メインルーチンのプログラムＩＤであるＰｒｏｇｒａｍ−１の上に、サブルーチンのプログラムＩＤであるＰｒｏｇｒａｍ−２がスタックされる。その後、処理はステップＳ１７１に移行する。
【００５４】
一方、読み出したノードのデータがサブルーチンを呼び出す文に該当しないと判断された場合（ステップＳ１５１：Ｎｏルート）、イベント・エンティティ抽出部１２１は、サブルーチンから復帰する文（例えばＲＥＴＵＲＮステートメント又はＥＸＩＴステートメント等）に該当するか判断する（ステップＳ１６１）。該当すると判断された場合（ステップＳ１６１：Ｙｅｓルート）、そのサブルーチン名をプログラムＩＤ格納部１２７から削除する（ステップＳ１６３）。その後、処理はステップＳ１７１に移行する。一方、サブルーチンから復帰する文ではないと判断された場合（ステップＳ１６１：Ｎｏルート）、処理はステップＳ１７１に移行する。
【００５５】
プログラム制御文の種類を判断する処理の次に、イベント・エンティティ抽出部１２１は、制御文の内容により指定されたノードを、構文木テーブル１１５から読み出す（ステップＳ１７１）。例えば、図５に示す構文木テーブル１１５の行１１２１のプログラム制御文は、条件式を評価できる条件判定文に該当するため、行１１３１の「ＴＨＥＮ」ステートメント以下のノードを読み出し、行１１４１の「ＥＬＳＥ」ステートメント以下のノードは読み出さない。なお、プログラム制御文が繰り返し処理文（例えばＦＯＲステートメント又はＰＥＲＦＯＲＭステートメント等）に該当する場合は、指定された繰り返し回数にかかわらず、ステップＳ１７１において、最初の１回だけノードを読み出す。その後、処理は端子Ｃを介して図６のステップＳ１０３に戻り、ステップＳ１７１において読み出されたノードについての処理を繰り返す。
【００５６】
一方、読み出したノードのデータがプログラム制御文に該当しないと判断された場合（ステップＳ１４１：Ｎｏルート）、イベント・エンティティ抽出部１２１は、読み出したノードのデータが変数更新文（例えば変数の定義又は変数への値の代入等）に該当するか判断する（ステップＳ１８１）。変数更新文に該当すると判断された場合（ステップＳ１８１：Ｙｅｓルート）、更新された変数の変数名とその値を、変数格納部１２５に格納する（ステップＳ１８３）。その後、処理はステップＳ１８５に移行する。一方、変数更新文に該当しないと判断された場合（ステップＳ１８１：Ｎｏルート）、処理はステップＳ１８５に移行する。
【００５７】
図１２に、変数格納部１２５に格納されるデータの一例を示す。変数格納部１２５には、図１２に示すように、変数に関するデータを一時的に保持するためのテーブルが格納されており、当該テーブルは、変数名の列４０１１と、分岐条件の列４０３１と、値の列４０５１とを含む。例えば、図５に示す構文木のデータの例においては、行１１１１において「画面種別」という変数に値を設定しているため、行１１１１は変数更新文に該当すると判断される。この場合、図１２の行４１０１に示されるように、変数格納部１２５に、行１１１１において指定された変数名とその値が登録される。変数格納部１２５に格納された変数名とその値は、例えば分岐条件を評価する場合に用いられる。なお、一つの変数が条件分岐によって複数の値を取る可能性がある場合は、例えば行４１１１及び行４１２１に示されるように、それぞれの分岐条件ごとに値を保持する。
【００５８】
次に、イベント・エンティティ抽出部１２１は、構文木テーブル１１５の最後のノードを読み出したか判断する（ステップＳ１８５）。まだ次のノードが残っている場合（ステップＳ１８５：Ｎｏルート）、構文木テーブル１１５から次のノードのデータを読み出す（ステップＳ１８７）。その後、処理は端子Ｃを介して図６のステップＳ１０３に戻り、次のノードについての処理を繰り返す。一方、最後のノードである場合（ステップＳ１８５：Ｙｅｓルート）、プログラムＩＤ格納部１２７に格納されたプログラムＩＤ、イベント格納部１２３に格納されたイベントに関する情報、及び変数格納部１２５に格納された変数に関する情報を削除して（ステップＳ１９１）、処理を終了する。このように、以下の処理に用いる関係テーブル１３１が用意される。
【００５９】
図２の処理の説明に戻って、あるソースプログラムについての関係抽出処理が終了した後に、イベント・エンティティ抽出部１２１は、全てのソースプログラムについて関係抽出処理が終了したか否か判断する（ステップＳ９）。未処理のソースプログラムがまだあると判断された場合（ステップＳ９：Ｎｏルート）、ステップＳ３に戻って処理を繰り返す。一方、全てのソースプログラムについて処理が終わったと判断された場合（ステップＳ９：Ｙｅｓルート）、分析値算出部１３３は、第１分析処理を実施する（ステップＳ１１）。
【００６０】
第１分析処理について、図１３乃至図１５を用いて説明する。まず、分析値算出部１３３は、エンティティの第１分析値を特定するために、関係テーブル１３１を参照して、未処理のエンティティを特定し、そのエンティティに対して所定の種別の処理を行っているプログラムを抽出する（図１３：ステップＳ２０１）。
【００６１】
例えばステップＳ２０１においてＴａｂｌｅ−１が特定された場合、例えば以下のようなＳＱＬ文を実行すると、Ｔａｂｌｅ−１に対してＵＰＤＡＴＥ（更新）処理を行っているプログラムを抽出できる。  
ＳＥＬＥＣＴ  プログラム  ｆｒｏｍ  関係テーブル  
ＷＨＥＲＥ  対象テーブル＝‘Ｔａｂｌｅ−１’  
ＡＮＤ  処理＝‘ＵＰＤＡＴＥ’
ただし、処理の方法はこれに限られず、例えば関係テーブル１３１を上から一行づつ読み込んで判断するようにしてもよい。
【００６２】
本実施の形態においては、上に示したＳＱＬ文が実行された結果、図１０に示す関係テーブル１３１に格納されたレコードのうち、行３１３１に示されたＰｒｏｇｒａｍ−１、行３１５１に示されたＰｒｏｇｒａｍ−２、及び行３１７１に示されたＰｒｏｇｒａｍ−４が抽出される。次に分析値算出部１３３は、抽出されたプログラムのうち、サブルーチンを除外する（ステップＳ２０３）。上で説明したソースプログラムの関係抽出処理においては、Ｐｒｏｇｒａｍ−２を呼び出すＰｒｏｇｒａｍ−１及びＰｒｏｇｒａｍ−４とは別に、呼び出されるサブルーチンに該当するＰｒｏｇｒａｍ−２についても別途処理を実行するためである。本実施の形態においては、関係テーブル１３１の呼び出しサブルーチンの列３０１５に登録されたプログラムを、サブルーチンとして扱う。この結果、Ｐｒｏｇｒａｍ−２が除外され、Ｐｒｏｇｒａｍ−１とＰｒｏｇｒａｍ−４とが残る。
【００６３】
次に、分析値算出部１３３は、サブルーチンを除いたプログラムのプログラムＩＤを、所定の種別の処理を行っているプログラムを示すデータとして、エンティティ名と対応付けてエンティティ分析値テーブル１４１に格納する（ステップＳ２０５）。図１４に、エンティティ分析値テーブル１４１に格納されるデータの一例を示す。エンティティ分析値テーブル１４１は、エンティティ名の列５０１１と、更新するプログラムの列５０３１と、参照するプログラムの列５０３３と、第１分析値の列５０５１と、第２分析値の列５０５３と、影響を及ぼすイベントの列５０７１と、第１重要度の列５０９１と、第２重要度の列５０９３と、総合重要度の列５０９５と、問題点の列５０９７とを含む。ステップＳ２０５までの処理が完了すると、更新するプログラムの列５０３１及び参照するプログラムの列５０３３にデータが格納される。例えば、上で説明した処理により、Ｔａｂｌｅ−１の行５１１１において、更新するプログラムの列５０３１にＰｒｏｇｒａｍ−１とＰｒｏｇｒａｍ−４とが格納される。この他に、図示しないが、エンティティに対してデータを入力するプログラムの列及びデータを削除するプログラムの列も含まれる。また、あるエンティティに対して、一つのプログラムが複数回アクセスしている場合は、プログラムＩＤに加えて、そのプログラムが複数回アクセスしていることを示すデータをさらに格納してもよい。
【００６４】
次に、分析値算出部１３３は、更新するプログラムの列５０３１に格納されたプログラムＩＤを計数し、エンティティの第１分析値として、エンティティ分析値テーブル１４１の第１分析値の列５０５１に格納する（ステップＳ２０７）。例えば、Ｔａｂｌｅ−１の第１分析値は「２」となる。なお、エンティティの第１分析値はこれに限られるものではなく、例えば更新するプログラムの列５０３１に格納されたプログラムＩＤの数に、参照するプログラムの列５０３３に格納されたプログラムＩＤの数を加えてもよい。また、例えば予め各処理の種別毎にポイントを設定しておき、格納された種別毎のプログラムの数に、当該種別のポイントを乗じたものの合計を、当該エンティティの第１分析値としてもよい。
【００６５】
次に、分析値算出部１３３は、全てのエンティティの全ての処理種別について、プログラムの抽出が終了したか判断する（ステップＳ２０９）。終了していないと判断された場合（ステップＳ２０９：Ｎｏルート）、ステップＳ２０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ２０９：Ｙｅｓルート）、処理はステップＳ２１１に移行する。
【００６６】
エンティティの第１分析値を特定した後に、分析値算出部１３３は、イベントの第１分析値を特定するために、関係テーブル１３１を参照して、未処理のイベントを特定し、そのイベントが影響を及ぼすエンティティを、エンティティに対する処理の種別毎に抽出する（ステップＳ２１１）。本実施の形態においては、例えばＦｉｌｅ−３が特定された場合について説明する。未処理のイベントを特定し、そのイベントが影響を及ぼすエンティティを抽出する処理は、上で述べたプログラムを抽出する処理と同様の方法により実行できるため、詳細な説明については省略する。例えばステップＳ２１１においてＦｉｌｅ−３が特定された場合、Ｆｉｌｅ−３に影響を及ぼし且つＵＰＤＡＴＥ（更新）処理が行われるエンティティとして、図１０に示す関係テーブル１３１に格納されたレコードのうち、行３１７１に示されたＴａｂｌｅ−１と、行３１９１に示されたＴａｂｌｅ−３とが抽出される。
【００６７】
次に、分析値算出部１３３は、抽出されたエンティティのエンティティ名を、イベントが影響を及ぼし且つ指定された処理の種別が行われるエンティティを示すデータとして、イベント名と対応付けてイベント分析値テーブル１４３に格納する（ステップＳ２１３）。図１５に、イベント分析値テーブル１４３に格納されるデータの一例を示す。イベント分析値テーブル１４３は、イベント名の列６０１１と、更新対象エンティティの列６０３１と、参照対象エンティティの列６０３３と、第１分析値の列６０５１と、第１重要度の列６０７１と、第２重要度の列６０７３と、総合重要度の列６０７５と、問題点の列６０７７とを含む。ステップＳ２１３までの処理が完了すると、更新対象エンティティの列６０３１及び参照対象エンティティの列６０３３にデータが格納される。例えば、上で説明した処理により、Ｆｉｌｅ−３の行６１１５において、更新対象エンティティの列６０３１にＴａｂｌｅ−１とＴａｂｌｅ−３とが格納される。この他に、図示しないが、入力対象エンティティの列及び削除対象エンティティの列も含まれる。また、あるイベントが、あるエンティティに対する複数の処理において影響を及ぼしている場合は、そのことを示すデータをさらに格納してもよい。
【００６８】
次に、分析値算出部１３３は、更新対象エンティティの列６０３１に格納されたエンティティを計数し、イベントの第１分析値として、イベント分析値テーブル１４３の第１分析値の列６０５１に格納する（ステップＳ２１５）。例えば、Ｆｉｌｅ−１の第１分析値は「２」となる。なお、上で説明したエンティティの第１分析値と同様、イベントの第１分析値についても、これに限られるものではなく、他の方法により特定してもよい。
【００６９】
次に、分析値算出部１３３は、全てのイベントの全ての処理種別について、エンティティの抽出が終了したか判断する（ステップＳ２１７）。終了していないと判断された場合（ステップＳ２１７：Ｎｏルート）、ステップＳ２１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ２１７：Ｙｅｓルート）、第１分析処理を終了する。
【００７０】
図２の処理の説明に戻って、第１分析処理が終了した後に、重要度特定部１４５は、実行指示において重要度を算出することを指示されているか判断する（ステップＳ１３）。重要度を算出することを指示されていると判断された場合（ステップＳ１３：Ｙｅｓルート）、第１重要度特定処理を実施する（ステップＳ２１）。一方、指示されていないと判断された場合（ステップＳ９：Ｎｏルート）、処理はステップＳ３１に移行する。
【００７１】
第１重要度特定処理について、図１６を用いて説明する。まず、重要度特定部１４５は、エンティティ分析値テーブル１４１を参照して、未処理のエンティティを特定し、そのエンティティの第１分析値を抽出する（ステップＳ３０１）。次に、抽出された第１分析値が、所定の値以上であるか判断する（ステップＳ３０３）。本実施の形態においては、所定の値が「２」であり、第１分析値が所定の値以上であるエンティティについては第１重要度が「１」であることが登録されることとする。
【００７２】
第１分析値が所定の値以上であると判断された場合（ステップＳ３０３：Ｙｅｓルート）、重要度特定部１４５は、第１重要度をエンティティ分析値テーブル１４１に登録する（ステップＳ３０５）。本実施の形態においては、例えばステップＳ３０１においてＴａｂｌｅ−１が特定された場合、図１４に示されるように、Ｔａｂｌｅ−１の第１分析値が「２」であるため、Ｔａｂｌｅ−１の第１重要度の列５０９１に、重要度「１」が登録される。その後、処理はステップＳ３０７に移行する。一方、第１分析値が所定の値未満であると判断された場合（ステップＳ３０３：Ｎｏルート）、処理はステップＳ３０７に移行する。なお、所定の値以上であるか否かに応じて重要度を決めるのではなく、第１分析値に比例して重要度を決定するようにしてもよい。
【００７３】
次に、重要度特定部１４５は、全てのエンティティに対して第１重要度を特定する処理を終了したか判断する（ステップＳ３０７）。終了していないと判断された場合（ステップＳ３０７：Ｎｏルート）、ステップＳ３０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ３０７：Ｙｅｓルート）、処理はステップＳ３１１に移行する。
【００７４】
エンティティの第１重要度を特定した後に、重要度特定部１４５は、イベントの第１重要度を特定する。まず、イベント分析値テーブル１４３を参照して、未処理のイベントを特定し、そのイベントの第１分析値を抽出する（ステップＳ３１１）。次に、抽出された第１分析値が、所定の値以上であるか判断する（ステップＳ３１３）。本実施の形態においては、所定の値が「２」であり、第１分析値が所定の値以上であるイベントについては第１重要度が「１」であることが登録されることとする。
【００７５】
第１分析値が所定の値以上であると判断された場合（ステップＳ３１３：Ｙｅｓルート）、重要度特定部１４５は、第１重要度をイベント分析値テーブル１４３に登録する（ステップＳ３１５）。例えば、ステップＳ３１１においてＦｉｌｅ−３が特定された場合、本実施の形態においては、図１５に示されるように、Ｆｉｌｅ−３の第１分析値が「２」であるため、Ｆｉｌｅ−３の第１重要度の列６０７１に、重要度「１」が登録される。その後、処理はステップＳ３１７に移行する。一方、第１分析値が所定の値未満であると判断された場合（ステップＳ３１３：Ｎｏルート）、処理はステップＳ３１７に移行する。なお、エンティティの第１重要度と同様に、所定の値以上であるか否かに応じて重要度を決めるのではなく、第１分析値に比例して重要度を決定するようにしてもよい。
【００７６】
次に、重要度特定部１４５は、全てのイベントに対して第１重要度を特定する処理を終了したか判断する（ステップＳ３１７）。終了していないと判断された場合（ステップＳ３１７：Ｎｏルート）、ステップＳ３１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ３１７：Ｙｅｓルート）、第１重要度特定処理を終了する。
【００７７】
図２の処理の説明に戻って、第１重要度特定処理が終了した後に、重要度特定部１４５は、第２重要度特定処理を実施する（ステップＳ２３）。
【００７８】
第２重要度特定処理について、図１７を用いて説明する。まず、重要度特定部１４５はエンティティの第２重要度を特定するために、イベント分析値テーブル１４３を参照して、未処理のエンティティを特定し、そのエンティティに影響を及ぼすイベントを抽出し、エンティティ分析値テーブル１４１に格納する（ステップＳ４０１）。図１５において、例えばＴａｂｌｅ−１が特定された場合、Ｔａｂｌｅ−１に影響を及ぼすイベントは、Ｆｉｌｅ−１、Ｆｉｌｅ−２、Ｆｉｌｅ−３、Ｇａｍｅｎ−１及びＧａｍｅｎ−２である。これらのイベント名は、図１４に示すエンティティ分析値テーブル１４１において、影響を及ぼすイベントの列５０７１に登録される。なお、本実施の形態においては、全ての種別を対象としているが、特定の処理種別に限定して、影響を及ぼすイベントを抽出するようにしてもよい。この場合は、エンティティ分析値テーブル１４１において、影響を及ぼすイベントのイベント名を、処理種別毎に保持するようにしてもよい。
【００７９】
次に、重要度特定部１４５は、抽出されたイベントに、第１重要度が登録されているか判断する（ステップＳ４０３）。第１重要度が登録されている場合（ステップＳ４０３：Ｙｅｓルート）、そのイベントが影響を及ぼすエンティティについて、第２重要度をエンティティ分析値テーブル１４１に登録する（ステップＳ４０５）。本実施の形態においては、イベントに第１重要度が登録されている場合、エンティティの第２重要度として「１」が登録されることとする。その後、処理はステップＳ４０７に移行する。一方、登録されていない場合（ステップＳ４０３：Ｎｏルート）、処理はステップＳ４０７に移行する。なお、イベントの第２重要度が既に特定されている場合は、第２重要度を用いてもよい。
【００８０】
図１４及び図１５の例においては、Ｔａｂｌｅ−１に影響を及ぼすイベントのうち、Ｆｉｌｅ−１及びＦｉｌｅ−３について、第１重要度が登録されているため、Ｔａｂｌｅ−１の第２重要度の列５０９３に、重要度「１」が登録される。なお、イベントの第１重要度の有無ではなく、第１重要度が登録されているイベントの数、又は当該イベントの第１重要度の合計を用いて、第２重要度を特定してもよい。例えばイベントの第１重要度の合計を用いる場合、上で説明した例においては、Ｆｉｌｅ−１及びＦｉｌｅ−３の第１重要度は共に「１」であるため、Ｔａｂｌｅ−１の第２重要度は「２」となる。
【００８１】
次に、重要度特定部１４５は、全てのエンティティに対して第２重要度を特定する処理を終了したか判断する（ステップＳ４０７）。終了していないと判断された場合（ステップＳ４０７：Ｎｏルート）、ステップＳ４０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ４０７：Ｙｅｓルート）、処理はステップＳ４１１に移行する。
【００８２】
エンティティの第２重要度を特定した後に、重要度特定部１４５はイベントの第２重要度を特定する。まず、イベント分析値テーブル１４３を参照して、未処理のイベントを特定し、そのイベントが影響を及ぼす対象となるエンティティを抽出する（ステップＳ４１１）。例えばＦｉｌｅ−３が特定された場合、図１５に示されるように、Ｆｉｌｅ−３が影響を及ぼす対象となるエンティティは、Ｔａｂｌｅ−１及びＴａｂｌｅ−３である。なお、本実施の形態においては、全ての種別を対象としているが、特定の処理種別に限定して、影響を及ぼす対象となるエンティティを抽出するようにしてもよい。
【００８３】
次に、重要度特定部１４５は、抽出されたエンティティに、第１重要度が登録されているか判断する（ステップＳ４１３）。第１重要度が登録されている場合（ステップＳ４１３：Ｙｅｓルート）、当該イベントの第２重要度をイベント分析値テーブル１４３に登録する（ステップＳ４１５）。本実施の形態においては、エンティティに第１重要度が登録されている場合、イベントの第２重要度として「１」が登録されることとする。その後、処理はステップＳ４１７に移行する。一方、登録されていない場合（ステップＳ４１３：Ｎｏルート）、処理はステップＳ４１７に移行する。
【００８４】
図１４及び図１５の例においては、Ｆｉｌｅ−３が影響を及ぼす対象となるエンティティであるＴａｂｌｅ−１及びＴａｂｌｅ−３は、共に第１重要度「１」が登録されているため、Ｆｉｌｅ−３の第２重要度の列６０７３に、重要度「１」が登録される。なお、イベントの第２重要度についても、エンティティの第２重要度と同様に、その他の方法により特定してもよい。
【００８５】
次に、重要度特定部１４５は、全てのイベントに対して第２重要度を特定する処理を終了したか判断する（ステップＳ４１７）。終了していないと判断された場合（ステップＳ４１７：Ｎｏルート）、ステップＳ４１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ４１７：Ｙｅｓルート）、第２重要度特定処理を終了する。
【００８６】
図２の処理の説明に戻って、重要度特定部１４５は、イベント及びエンティティのそれぞれについて、ステップＳ２１で特定された第１重要度と、ステップＳ２３で特定された第２重要度とを用いて、総合重要度を算出し、それぞれイベント分析値テーブル１４３及びエンティティ分析値テーブル１４１に格納する（ステップＳ２５）。総合重要度は、例えば単純に第１重要度と第２重要度とを加算して算出してもよく、それぞれに重み付けしたものを加算し、又は乗算して算出してもよい。本実施の形態においては、第１重要度に「０．７」を乗じたものに、第２重要度に「０．３」を乗じたものを加算している。従って、例えば図１５のＦｉｌｅ−３の行６１１５のように、第１重要度及び第２重要度が共に「１」であれば総合重要度は「１」である。同様に、Ｇａｍｅｎ−１の行６１５１のように第１重要度が「０」で第２重要度が「１」であれば総合重要度は「０．３」であり、逆にＧａｍｅｎ−３１の行６１９１のように第１重要度が「１」で第２重要度が「０」であれば総合重要度は「０．７」となる。
【００８７】
次に、問題点特定部１５５は、実行指示において問題があるエンティティ又はイベントを特定することを指示されているか判断する（ステップＳ３１）。特定することを指示されていると判断された場合（ステップＳ３１：Ｙｅｓルート）、第２分析処理を実施する（ステップＳ３３）。第２分析処理については図１８乃至図２０を用いて説明する。一方、指示されていないと判断された場合（ステップＳ３１：Ｎｏルート）、処理はステップＳ４１に移行する。
【００８８】
まず、問題点特定部１５５は、エンティティの第２分析値を特定するために、エンティティ分析値テーブル１４１を参照して、未処理のエンティティを特定し、そのエンティティに対して影響を及ぼすイベントを計数して格納する（図１８：ステップＳ５０１）。例えばＴａｂｌｅ−１が特定された場合、図１４に示されるように、Ｔａｂｌｅ−１の行５１１１において、影響を及ぼすイベントの列５０７１に５つのイベントが登録されているため、第２分析値の列５０５３に５が登録される。なお、第２重要度特定処理と同様に、特定の処理種別に限定して、影響を及ぼすイベントを計数するようにしてもよい。
【００８９】
次に、問題点特定部１５５は、全てのエンティティについて、イベントの計数が終了したか判断する（ステップＳ５０３）。終了していないと判断された場合（ステップＳ５０３：Ｎｏルート）、ステップＳ５０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ５０３：Ｙｅｓルート）、処理はステップＳ５１１に移行する。
【００９０】
次に、問題点特定部１５５は、１つのエンティティと他のエンティティとの類似度を算出するために、イベント分析値テーブル１４３を参照して、未処理の２つのエンティティを特定し、それらのエンティティの両方に影響を及ぼすイベントを抽出する（ステップＳ５１１）。本実施の形態においては、イベント分析値テーブル１４３における、更新対象エンティティの列６０３１及び参照対象エンティティの列６０３３の少なくともいずれか１つに、２つのエンティティが登録されているイベントを抽出する。なお、エンティティに対する処理の種別に着目して、例えば更新対象エンティティの列６０３１に２つのエンティティが登録されているイベントのみを抽出するようにしてもよい。
【００９１】
次に、問題点特定部１５５は、抽出されたイベントを計数し、当該イベントの数をエンティティ間の類似度として、エンティティ類似度テーブル１５１に格納する（ステップＳ５１３）。図１９に、エンティティ類似度テーブル１５１に格納されるデータの一例を示す。エンティティ類似度テーブル１５１は、エンティティ１の列７０１１と、エンティティ２の列７０３１と、類似度の列７０５１とを含む。例えば、ステップＳ５１１においてＴａｂｌｅ−１とＴａｂｌｅ−２とが特定された場合、図１５に示されるように、Ｆｉｌｅ−１及びＧａｍｅｎ−１が両方のエンティティに影響を及ぼしている。この場合、エンティティ類似度テーブル１５１の行７１０１において、類似度の列７０５１には「２」が格納される。一方、例えば、ステップＳ５１１においてＴａｂｌｅ−１とＴａｂｌｅ−３とが特定された場合、Ｔａｂｌｅ−１とＴａｂｌｅ−３の両方に対して影響を及ぼすイベントはＦｉｌｅ−３のみであるため、エンティティ類似度テーブル１５１の行７１１１に示されるように、類似度の列７０５１には「１」が格納される。
【００９２】
なお、本実施の形態においては、両方のエンティティに対して影響を及ぼすイベントの数を類似度として用いているが、例えば当該イベントに設定された重要度を用いて類似度を算出してもよい。また、エンティティ類似度テーブル１５１において、共通して影響を及ぼすイベントの数に加えて、当該イベントのイベント名をさらに保持するようにしてもよい。また、２つのエンティティの両方に影響を及ぼすイベントを抽出する際に、イベント分析値テーブル１４３ではなく、エンティティ分析値テーブル１４１を参照してもよい。
【００９３】
次に、問題点特定部１５５は、全てのエンティティ間の組み合わせについて類似度を算出する処理を終了したか判断する（ステップＳ５１５）。終了していないと判断された場合（ステップＳ５１５：Ｎｏルート）、ステップＳ５１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ５１５：Ｙｅｓルート）、処理はステップＳ５２１に移行する。
【００９４】
次に、問題点特定部１５５は、１つのイベントと他のイベントとの類似度を算出するために、エンティティ分析値テーブル１４１を参照して、未処理の２つのイベントを特定し、それらのイベントの両方が影響を及ぼす対象となるエンティティを抽出する（ステップＳ５２１）。本実施の形態においては、エンティティ分析値テーブル１４１における、影響を及ぼすイベントの列５０７１に、両方のイベントが登録されているエンティティを抽出する。なお、エンティティに対する処理の種別に着目して、２つのイベントが、例えばエンティティに対する更新処理に影響を及ぼしている場合にのみ、エンティティを抽出するようにしてもよい。
【００９５】
次に、問題点特定部１５５は、抽出されたエンティティを計数し、当該エンティティの数をイベント間の類似度として、イベント類似度テーブル１５３に格納する（ステップＳ５２３）。図２０に、イベント類似度テーブル１５３に格納されるデータの一例を示す。イベント類似度テーブル１５３は、イベント１の列８０１１と、イベント２の列８０３１と、類似度の列８０５１とを含む。例えば、ステップＳ５２１においてＧａｍｅｎ−１とＧａｍｅｎ−２とが特定された場合、図１４のＴａｂｌｅ−１の行５１１１に示されるように、影響を及ぼすイベントの列５０７１に両方のイベントが登録されている。この場合、２つのイベントの両方が影響を及ぼす対象となるエンティティはＴａｂｌｅ−１のみであり、イベント類似度テーブル１５３の行８１０１において、類似度の列８０５１には「１」が格納される。なお、２つのイベントの両方が影響を及ぼす対象となるエンティティを抽出する際に、エンティティ分析値テーブル１４１ではなく、イベント分析値テーブル１４３を参照してもよい。例えば、イベント分析値テーブル１４３のＧａｍｅｎ−３の行６１７１とＧａｍｅｎ−３１の行６１９１とを参照すると、Ｔａｂｌｅ−２、Ｔａｂｌｅ−７、Ｔａｂｌｅ−１７、及びＴａｂｌｅ−２５が、２つのイベントに共通するエンティティとして登録されている。従って、例えばステップＳ５２１においてＧａｍｅｎ−３とＧａｍｅｎ−３１とが特定された場合、イベント類似度テーブル１５３の行８１３１に示されるように、類似度の列８０５１には「４」が格納される。
【００９６】
なお、本実施の形態においては、２つのイベントの両方が影響を及ぼす対象となるエンティティの数を類似度として用いているが、例えば当該エンティティに設定された重要度を用いて類似度を算出してもよい。また、イベント分析値テーブル１４３において、エンティティの数に加えて、エンティティ名をさらに保持するようにしてもよい。
【００９７】
次に、問題点特定部１５５は、全てのイベント間の組み合わせについて類似度を算出する処理を終了したか判断する（ステップＳ５２５）。終了していないと判断された場合（ステップＳ５２５：Ｎｏルート）、ステップＳ５２１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ５２５：Ｙｅｓルート）、第２分析処理を終了する。
【００９８】
図２の処理の説明に戻って、第２分析処理が終了した後に、問題点特定部１５５は、問題点特定処理を実施する（ステップＳ３５）。問題点特定処理について、図２１及び図２２を用いて説明する。
【００９９】
まず、問題点特定部１５５は、エンティティ分析値テーブル１４１を参照して、エンティティの第１分析値を抽出する（図２１：ステップＳ６０１）。次に、抽出された第１分析値が、所定の値以上であるか判断する（ステップＳ６０３）。本実施の形態においては、所定の値が「５」であり、第１分析値が所定の値以上であるエンティティについて問題点を示す情報が登録されることとする。
【０１００】
第１分析値が所定の値以上であると判断された場合（ステップＳ６０３：Ｙｅｓルート）、問題点特定部１５５は、エンティティ分析値テーブル１４１に、当該エンティティが問題を有することを示す情報を登録する（ステップＳ６０５）。その後、処理はステップＳ６０７に移行する。本実施の形態においては、図１４の行５１３１に示されるように、Ｔａｂｌｅ−１０の第１分析値が「５」であるため、Ｔａｂｌｅ−１０が「プログラム数超過」という問題を有することが登録される。一方、第１分析値が所定の値未満であると判断された場合（ステップＳ６０３：Ｎｏルート）、処理はステップＳ６０７に移行する。図１４において、行５１３１以外には第１分析値が「５」以上であるエンティティが登録されていないため、図１４のその他の行には問題点を示す情報が登録されない。なお、問題点を示す情報の代わりに、数値化された問題度を登録してもよく、所定の値以上であるか否かに応じて問題点の有無を特定する代わりに、第１分析値に比例して問題度を決定するようにしてもよい。
【０１０１】
次に、問題点特定部１５５は、全てのエンティティに対して処理を終了したか判断する（ステップＳ６０７）。終了していないと判断された場合（ステップＳ６０７：Ｎｏルート）、ステップＳ６０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ６０７：Ｙｅｓルート）、処理はステップＳ６１１に移行する。
【０１０２】
次に、問題点特定部１５５は、イベント分析値テーブル１４３を参照して、イベントの第１分析値を抽出する（ステップＳ６１１）。次に、抽出された第１分析値が、所定の値以上であるか判断する（ステップＳ６１３）。本実施の形態においては、所定の値が「６」であり、第１分析値が所定の値以上であるイベントについて問題点を示す情報が登録されることとする。
【０１０３】
第１分析値が所定の値以上であると判断された場合（ステップＳ６１３：Ｙｅｓルート）、問題点特定部１５５は、イベント分析値テーブル１４３において、問題点の列６０７７に、エンティティが問題を有することを示すデータを登録する（ステップＳ６１５）。その後、処理はステップＳ６１７に移行する。本実施の形態においては、図１５の行６１３１に示されるように、Ｆｉｌｅ−１４の第１分析値が「８」であるため、Ｆｉｌｅ−１４が「エンティティ数超過」という問題を有することが登録される。一方、第１分析値が所定の値未満であると判断された場合（ステップＳ６１３：Ｎｏルート）、処理はステップＳ６１７に移行する。図１５において、行６１３１以外には第１分析値が「６」以上であるイベントが登録されていないため、図１５のその他の行には問題点を示す情報は登録されない。なお、問題点を示す情報の代わりに、数値化された問題度を登録してもよく、所定の値以上であるか否かに応じて問題点の有無を特定する代わりに、第１分析値に比例して問題度を決定するようにしてもよい。
【０１０４】
次に、問題点特定部１５５は、全てのイベントに対して処理を終了したか判断する（ステップＳ６１７）。終了していないと判断された場合（ステップＳ６１７：Ｎｏルート）、ステップＳ６１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ６１７：Ｙｅｓルート）、処理はステップＳ６２１に移行する。
【０１０５】
次に、問題点特定部１５５は、エンティティ分析値テーブル１４１を参照して、エンティティの第２分析値を抽出する（ステップＳ６２１）。次に、抽出された第２分析値が所定の値以上であるか判断する（ステップＳ６２３）。本実施の形態においては、所定の値が「１０」であり、第２分析値が所定の値以上であるエンティティについて問題点を示す情報が登録されることとする。
【０１０６】
第２分析値が所定の値以上であると判断された場合（ステップＳ６２３：Ｙｅｓルート）、問題点特定部１５５は、エンティティ分析値テーブル１４１に、当該エンティティが問題を有することを示す情報を格納する（ステップＳ６２５）。その後、処理はステップＳ６２７に移行する。図１４の行５１５１に示されるように、Ｔａｂｌｅ−１１の第２分析値は「１９」であるため、Ｔａｂｌｅ−１１が「イベント数超過」という問題を有することが登録される。一方、所定の値未満であると判断された場合（ステップＳ６２３：Ｎｏルート）、処理はステップＳ６２７に移行する。図１４において、行５１５１以外の行においては第２分析値が「１０」以上であるエンティティが登録されていないため、その他の行には問題点を示す情報は登録されない。なお、問題点を示す情報の代わりに、数値化された問題度を登録してもよく、所定の値以上であるか否かに応じて問題点の有無を特定する代わりに、第２分析値に比例して問題度を決定するようにしてもよい。
【０１０７】
次に、問題点特定部１５５は、全てのエンティティに対して処理を終了したか判断する（ステップＳ６２７）。終了していないと判断された場合（ステップＳ６２７：Ｎｏルート）、ステップＳ６２１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ６２７：Ｙｅｓルート）、処理は端子Ｄを介して図２２の処理フローに移行する。
【０１０８】
次に、問題点特定部１５５は、イベント間の類似度に基づいて、イベントの問題点を特定する。まず、イベント類似度テーブル１５３を参照して、イベント間の類似度を抽出する（図２２：ステップＳ７０１）。次に、抽出された類似度が、所定の値以上であるか判定する（ステップＳ７０３）。本実施の形態においては、所定の値は「３」であるとする。類似度が所定の値未満である場合（ステップＳ７０３：Ｎｏルート）、処理はステップＳ７０７に移行する。
【０１０９】
一方、類似度が所定の値以上である場合（ステップＳ７０３：Ｙｅｓルート）、問題点特定部１５５は、問題点を示す情報を、両方のイベントに対応付けて、イベント分析値テーブル１４３に登録する（ステップＳ７０５）。本実施の形態において、Ｇａｍｅｎ−３とＧａｍｅｎ−３１との類似度は、図２０の行８１３１に示されるように「４」である。この場合、イベント分析値テーブル１４３のＧａｍｅｎ−３の行６１７１とＧａｍｅｎ−３１の行６１９１との両方において、問題点の列６０７７に、類似イベントがあることを示す情報が登録される。その後、処理はステップＳ７０７に移行する。
【０１１０】
次に、問題点特定部１５５は、全てのイベント間について処理を終了したか判断する（ステップＳ７０７）。終了していないと判断された場合（ステップＳ７０７：Ｎｏルート）、ステップＳ７０１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ７０７：Ｙｅｓルート）、処理はステップＳ７１１に移行する。
【０１１１】
次に、問題点特定部１５５は、エンティティ間の類似度に基づいて、エンティティの問題点を特定する。まず、エンティティ類似度テーブル１５１を参照して、エンティティ間の類似度を抽出する（ステップＳ７１１）。次に、抽出された類似度が、所定の値以上であるか判定する（ステップＳ７１３）。本実施の形態においては、所定の値は「３」であるとする。類似度が所定の値未満である場合（ステップＳ７１３：Ｎｏルート）、処理はステップＳ７１７に移行する。
【０１１２】
一方、類似度が所定の値以上である場合（ステップＳ７１３：Ｙｅｓルート）、問題点特定部１５５は、問題点を示す情報を、両方のエンティティに対応付けて、エンティティ分析値テーブル１４１に登録する（ステップＳ７１５）。その後、処理はステップＳ７１７に移行する。本実施の形態においては、図１９に示すように、Ｔａｂｌｅ−１とＴａｂｌｅ−２との類似度は「２」であり、Ｔａｂｌｅ−１とＴａｂｌｅ−３との類似度は「１」であるため、Ｔａｂｌｅ−１乃至Ｔａｂｌｅ−３については、問題点を示す情報は登録されない。
【０１１３】
次に、問題点特定部１５５は、全てのエンティティ間について処理を終了したか判断する（ステップＳ７１７）。終了していないと判断された場合（ステップＳ７１７：Ｎｏルート）、ステップＳ７１１に戻って処理を繰り返す。一方、終了していると判断された場合（ステップＳ７１７：Ｙｅｓルート）、問題点特定処理を終了する。
【０１１４】
図２の処理の説明に戻って、出力情報生成部１６１は、エンティティ分析値テーブル１４１及びイベント分析値テーブル１４３を参照して、処理結果を表示する情報を生成し、出力情報格納部１６３に格納する（ステップＳ４１）。その後、出力部１７１は出力情報格納部１６３から処理結果を表示する情報を読み出して出力する。出力部１７１はディスプレイやプリンタ等の出力装置であってもよく、ユーザ端末等の他のコンピュータにデータを送信するための通信装置であってもよい。
【０１１５】
図２３乃至図２５に、処理結果を表示する画面の例を示す。図２３は、上で説明した処理において特定されたエンティティの重要度及び問題点を、表形式で概観できる画面の例である。図２３においては、エンティティ名を、ユーザが把握しやすい名称に変換している。図２３の項番３の行に示されるように、重要度が設定されたエンティティは「○」で示され、同じく項番４に示されるように、問題があると判断されたエンティティは「×」で示されるが、問題点又は重要度のいずれか一方だけを提示するようにしてもよい。また、全てのエンティティを列挙するのではなく、重要度が設定されたエンティティ又は問題があると判断されたエンティティだけを抽出して提示してもよい。
【０１１６】
図２４は、エンティティ及びイベントの重要度の判定結果を、さらに詳細に提示する画面の例である。メッセージボックス２４０１には、重要度が設定されたイベント及びエンティティが、重要度とともに提示される。また、表中のセル２４１１、２４２１及び２４３１に示されるように、重要度が設定されたエンティティ及びイベントが強調表示されている。このような表を提示することにより、ユーザはエンティティとイベントとの関係に基づいて、エンティティ及びイベントの重要性を把握しやすくなる。
【０１１７】
図２５は、エンティティ及びイベントの問題点の判定結果を、さらに詳細に提示する画面の例である。メッセージボックス２５０１には、問題があると判断されたイベント及びエンティティが、その問題の内容とともに提示される。また、例えば表中の枠２５１１においては、Ｔａｂｌｅ−１１というエンティティに対して、影響を及ぼすイベントの数が多すぎることが提示されている。例えば表中の枠２５２１及び枠２５２３においては、Ｇａｍｅｎ−１及びＧａｍｅｎ−３１は、影響を及ぼす対象となるエンティティの組み合わせが類似していることが提示されている。このような表を提示することにより、ユーザはエンティティとイベントとの関係に基づいて、エンティティ及びイベントが問題を有することを把握しやすくなる。
【０１１８】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、解析装置１の機能ブロック図を図１に例示したが、必ずしも実際のプログラムのモジュールに対応するものではない。
【０１１９】
また、各格納部に格納されるデータの構造についても、上で述べたような例に限定されるものではなく、特定の列を別テーブルに切り分けてもよく、複数のテーブルを一つのテーブルに統合してもよい。また、各テーブルに示されたデータは全体の一部分を例示するものであり、図示しない他の行及び他の列を含んでもよい。
【０１２０】
また、各処理フローに示された処理の順序は一例であって、例えば第１分析処理を第１重要度特定処理又は第２分析処理の直前に行ってもよい。また、エンティティのみ、又はイベントのみを分析対象としてもよい。
【０１２１】
なお、上で述べた解析装置１は、図２６のようなコンピュータ装置であって、メモリ２５０１（記憶装置）とＣＰＵ２５０３（処理装置）とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施の形態における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本発明の実施の形態では、上で述べた処理を実施するためのアプリケーション・プログラムはリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１２２】
（付記１）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて前記イベントの重要度を算出し、記憶装置に格納するイベント重要度算出ステップと、
前記関係テーブルに格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、前記記憶装置に格納された当該イベントの重要度を用いて前記特定のエンティティの影響度を算出し、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【０１２３】
（付記２）
前記イベント重要度算出ステップが、
前記関係テーブルに格納されたデータを用いて、特定のイベントが影響を与える処理の対象となるエンティティの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数を用いて、前記特定のイベントの重要度を算出し、前記記憶装置に格納するステップと、
を含む付記１記載のプログラム解析方法。
【０１２４】
（付記３）
前記関係登録ステップにおいて、前記エンティティに対する処理を行うプログラムの識別情報と、当該処理の種別とを、前記エンティティに関係付けて前記関係テーブルに格納し、
前記関係テーブルに格納されたデータを用いて、前記特定のエンティティに対して所定の種別の処理を行うプログラムの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記プログラムの数を用いて、前記特定のエンティティの利用度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記特定のエンティティの利用度及び前記特定のエンティティの影響度を用いて、前記特定のエンティティの総合重要度を算出し、前記記憶装置に格納するステップと、
をさらに含む付記１記載のプログラム解析方法。
【０１２５】
（付記４）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて前記エンティティの重要度を算出し、記憶装置に格納するエンティティ重要度算出ステップと、
前記関係テーブルに格納されたデータを用いて特定のイベントが影響を与える処理の対象となるエンティティを特定し、前記記憶装置に格納された当該エンティティの重要度を用いて前記特定のイベントの影響度を算出し、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【０１２６】
（付記５）
前記関係登録ステップにおいて、前記エンティティに対する処理を行うプログラムの識別情報と、当該処理の種別とを、前記エンティティに関係付けて前記関係テーブルに格納し、
前記エンティティ重要度算出ステップが、
前記関係テーブルに格納されたデータを用いて、特定のエンティティに対して所定の種別の処理を行うプログラムの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記プログラムの数を用いて、前記特定のエンティティの重要度を算出し、前記記憶装置に格納するステップと、
を含む付記４記載のプログラム解析方法。
【０１２７】
（付記６）
前記関係テーブルに格納されたデータを用いて、前記特定のイベントが影響を与える処理の対象となるエンティティの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数を用いて、前記特定のイベントの利用度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記特定のイベントの利用度及び前記特定のイベントの影響度とを用いて、前記特定のイベントの総合重要度を算出し、前記記憶装置に格納するステップと、
をさらに含む付記４記載のプログラム解析方法。
【０１２８】
（付記７）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて、第１のエンティティに対する処理及び第２のエンティティに対する処理の両方に影響を与えるイベントの数を計数し、記憶装置に格納するステップと、
前記記憶装置に格納された前記イベントの数を用いて、前記第１のエンティティと前記第２のエンティティとのエンティティ間の類似度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティ間の類似度が所定の値を上回る場合に、前記第１のエンティティ及び前記第２のエンティティが問題を有することを示すデータを、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【０１２９】
（付記８）
前記関係テーブルに格納されたデータを用いて、前記エンティティに対する処理に影響を与えるイベントの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記イベントの数が所定の値を上回るエンティティを特定し、当該エンティティが問題を有することを示すデータを、前記記憶装置に格納するステップと、
をさらに含む付記７記載のプログラム解析方法。
【０１３０】
（付記９）
前記関係登録ステップにおいて、前記エンティティに対する処理を行うプログラムの識別情報と、当該処理の種別とを、前記エンティティに関係付けて前記関係テーブルに格納し、
前記関係テーブルに格納されたデータを用いて、前記エンティティに対して所定の種別の処理を行うプログラムの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記プログラムの数が所定の値を上回るエンティティを特定し、当該エンティティが問題を有することを示すデータを、前記記憶装置に格納するステップと、
をさらに含む付記７記載のプログラム解析方法。
【０１３１】
（付記１０）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録ステップと、
前記関係テーブルに格納されたデータを用いて、第１のイベントが影響を与える処理の対象となり且つ第２のイベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数を用いて、前記第１のイベントと前記第２のイベントとのイベント間の類似度を算出し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記イベント間の類似度が所定の値を上回る場合に、前記第１のイベント及び前記第２のイベントが問題を有することを示すデータを、前記記憶装置に格納するステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【０１３２】
（付記１１）
前記関係テーブルに格納されたデータを用いて、前記イベントが影響を与える処理の対象となるエンティティの数を計数し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記エンティティの数が所定の値を上回るイベントを特定し、当該イベントが問題を有することを示すデータを、前記記憶装置に格納するステップと、
をさらに含む付記１０記載のプログラム解析方法。
【０１３３】
（付記１２）
付記１乃至１１のうちいずれか１つ記載のプログラム解析方法をコンピュータに実行させるためのプログラム。
【０１３４】
（付記１３）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録手段と、
前記関係テーブルに格納されたデータを用いて前記イベントの重要度を算出し、記憶装置に格納するイベント重要度算出手段と、
前記関係テーブルに格納されたデータを用いて特定のエンティティに対する処理に影響を与えるイベントを特定し、前記記憶装置に格納された当該イベントの重要度を用いて前記特定のエンティティの影響度を算出し、前記記憶装置に格納する影響度算出手段と、
を有するプログラム解析装置。
【０１３５】
（付記１４）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録手段と、
前記関係テーブルに格納されたデータを用いて前記エンティティの重要度を算出し、記憶装置に格納するエンティティ重要度算出手段と、
前記関係テーブルに格納されたデータを用いて特定のイベントが影響を与える処理の対象となるエンティティを特定し、前記記憶装置に格納された当該エンティティの重要度を用いて前記特定のイベントの影響度を算出し、前記記憶装置に格納する影響度算出手段と、
を有するプログラム解析装置。
【０１３６】
（付記１５）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録手段と、
前記関係テーブルに格納されたデータを用いて、第１のエンティティに対する処理及び第２のエンティティに対する処理の両方に影響を与えるイベントの数を計数し、記憶装置に格納する手段と、
前記記憶装置に格納された前記イベントの数を用いて、前記第１のエンティティと前記第２のエンティティとのエンティティ間の類似度を算出し、前記記憶装置に格納する手段と、
前記記憶装置に格納された前記エンティティ間の類似度が所定の値を上回る場合に、前記第１のエンティティ及び前記第２のエンティティが問題を有することを示すデータを、前記記憶装置に格納する手段と、
を有するプログラム解析装置。
【０１３７】
（付記１６）
プログラムにおける処理の対象となる情報単位であるエンティティと、前記エンティティに対する処理に影響を与えるイベントとを関係付けて、関係テーブルに格納する関係登録手段と、
前記関係テーブルに格納されたデータを用いて、第１のイベントが影響を与える処理の対象となり且つ第２のイベントが影響を与える処理の対象となるエンティティの数を計数し、記憶装置に格納する手段と、
前記記憶装置に格納された前記エンティティの数を用いて、前記第１のイベントと前記第２のイベントとのイベント間の類似度を算出し、前記記憶装置に格納する手段と、
前記記憶装置に格納された前記イベント間の類似度が所定の値を上回る場合に、前記第１のイベント及び前記第２のイベントが問題を有することを示すデータを、前記記憶装置に格納する手段と、
を有するプログラム解析装置。
【図面の簡単な説明】
【０１３８】
【図１】本発明の実施の形態に係る解析装置のシステム概要図である。
【図２】本発明の実施の形態における処理フローを示す図である。
【図３】ソースプログラム格納部に格納されたソースプログラムの一例を示す図である。
【図４】図３に示すソースプログラムに基づいて作成された構文木の一例を示す図である。
【図５】構文木テーブルに格納される構文木のデータの一例を示す図である。
【図６】関係抽出処理の処理フローを示す図である。
【図７】プログラムＩＤ格納部に格納されるデータの一例を示す図である。
【図８】イベント格納部に格納されるデータの一例を示す図である。
【図９】関係抽出処理の処理フローを示す図である。
【図１０】関係テーブルに格納されるデータの一例を示す図である。
【図１１】関係抽出処理の処理フローを示す図である。
【図１２】変数格納部に格納されるデータの一例を示す図である。
【図１３】第１分析処理の処理フローを示す図である。
【図１４】エンティティ分析値テーブルに格納されるデータの一例を示す図である。
【図１５】イベント分析値テーブルに格納されるデータの一例を示す図である。
【図１６】第１重要度特定処理の処理フローを示す図である。
【図１７】第２重要度特定処理の処理フローを示す図である。
【図１８】第２分析処理の処理フローを示す図である。
【図１９】エンティティ類似度テーブルに格納されるデータの一例を示す図である。
【図２０】イベント類似度テーブルに格納されるデータの一例を示す図である。
【図２１】問題点特定処理の処理フローを示す図である。
【図２２】問題点特定処理の処理フローを示す図である。
【図２３】本発明の実施の形態における処理結果出力画面の一例を示す図である。
【図２４】本発明の実施の形態における処理結果出力画面の一例を示す図である。
【図２５】本発明の実施の形態における処理結果出力画面の一例を示す図である。
【図２６】コンピュータの機能ブロック図である。
【符号の説明】
【０１３９】
１  解析装置    １０１  指示受付部    １１１  ソースプログラム格納部
１１３  構文木解析部    １１５  構文木テーブル
１２１  イベント・エンティティ抽出部    １２３  イベント格納部
１２５  変数格納部    １２７  プログラムＩＤ格納部
１３１  関係テーブル    １３３  分析値算出部
１４１  エンティティ分析値テーブル    １４３  イベント分析値テーブル
１４５  重要度特定部    １５１  エンティティ類似度テーブル
１５３  イベント類似度テーブル    １５５  問題点特定部
１６１  出力情報生成部    １６３  出力情報格納部    １７１  出力部
【図１】
2007241916.tif 000003
【図２】
2007241916.tif 000004
【図３】
2007241916.tif 000005
【図４】
2007241916.tif 000006
【図５】
2007241916.tif 000007
【図６】
2007241916.tif 000008
【図７】
2007241916.tif 000009
【図８】
2007241916.tif 000010
【図９】
2007241916.tif 000011
【図１０】
2007241916.tif 000012
【図１１】
2007241916.tif 000013
【図１２】
2007241916.tif 000014
【図１３】
2007241916.tif 000015
【図１４】
2007241916.tif 000016
【図１５】
2007241916.tif 000017
【図１６】
2007241916.tif 000018
【図１７】
2007241916.tif 000019
【図１８】
2007241916.tif 000020
【図１９】
2007241916.tif 000021
【図２０】
2007241916.tif 000022
【図２１】
2007241916.tif 000023
【図２２】
2007241916.tif 000024
【図２３】
2007241916.tif 000025
【図２４】
2007241916.tif 000026
【図２５】
2007241916.tif 000027
【図２６】
2007241916.tif 000028