(57)【要約】【課題】ルール検査システムの利用者がルールを新しく定義し、その定義したルールを用いてアプリケーションのルール検査を行なうことを可能とする。【解決手段】ルール定義解析部１１は、利用者により定義されるルール定義データ４００を解析し、ルール定義データ４００中の対象指定部と論理式から構成される条件式を一つ取り出して字句解析部１２に送る。字句解析部１２は、条件式をトークンに分割する。構文解析部１３は、切り出したトークンの抽象構文木を作成する。解釈部１４は、作成された抽象構文木と、検査対象のアプリケーションとを読み込み、プログラム解析部１５の機能を用いて、アプリケーションに対し条件式を評価し、その評価結果をルール定義解析部１１に返す。ルール定義解析部１１は、返り値が偽の場合はルール違反が発生したことを出力装置３１上に表示し、返り値が真の場合、未評価の条件式がなくなるまで同様の処理を繰り返す。【選択図】  図１
2005056183.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査システムにおいて、
ルール検査装置と、
該ルール検査装置に接続される記憶装置とを備え、
前記ルール検査装置は、
前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、
前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、
前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、
前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備え、
前記記憶装置は、
前記検査対象のアプリケーションを記憶するアプリケーション情報記憶部と、
前記条件式の解析結果を格納する条件解析情報記憶部とを備えることを特徴とするルール検査システム。
【請求項２】
前記ルール検査装置は、
複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備え、
前記記憶装置は、
前記ルール定義データの解析結果を格納するルール定義情報記憶部をさらに備えることを特徴とする請求項１に記載のルール検査システム。
【請求項３】
前記解釈部は、
前記条件式に含まれる前記対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、
前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えることを特徴とする請求項１又は２に記載のルール検査システム。
【請求項４】
前記解釈部は、
前記条件式の対象指定部に含まれるパターンを展開するパターン解析部と、
前記条件式に含まれる対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、
前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えることを特徴とする請求項１から３のいずれか１項に記載のルール検査システム。
【請求項５】
前記プログラム解析部は、
前記解釈部からの処理要求を受け付け、前記アプリケーション情報記憶部の情報を利用して、前記アプリケーションを構成するクラス間の構造に関する解析を行なうクラス構造解析部と、
前記アプリケーションを構成するクラスのうち少なくとも一つのクラス中に定義された情報を解析するクラス定義解析部と、
前記アプリケーションの制御の流れを解析する制御フロー解析部と、
前記アプリケーションの中に現れる変数に格納されるデータの流れを解析するデータフロー解析部とを備えることを特徴とする請求項１から４のいずれか１項に記載のルール検査システム。
【請求項６】
前記ルール検査装置は、
ルール検査コードを挿入した新しいアプリケーションを生成するプログラム変換部をさらに備え
前記記憶装置は、
前記新しく生成されたアプリケーションを記憶する変換プログラム記憶部をさらに備えることを特徴とする請求項１から５のいずれか１項に記載のルール検査システム。
【請求項７】
所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査装置において、
前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、
前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、
前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、
前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備えることを特徴とするルール検査装置。
【請求項８】
複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備えることを特徴とする請求項７に記載のルール検査装置。
【請求項９】
所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査方法において、
前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、
前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、
前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを備えることを特徴とするルール検査方法。
【請求項１０】
複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに備えることを特徴とする請求項９に記載のルール検査方法。
【請求項１１】
所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するためのルール検査プログラムにおいて、
コンピュータに、
前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、
前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、
前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを実行させることを特徴とするルール検査プログラム。
【請求項１２】
前記コンピュータに、
複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに実行させることを特徴とする請求項１１に記載のルール検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラムに関し、特に、ルール定義を解釈し、アプリケーションを構成するプログラムコードの記述が、定義されたルールに従っているか否かを検査するルール検査手法に関する。
【背景技術】
【０００２】
一般に、アプリケーション・プログラム（以下、「アプリケーション」）開発時には、正常にアプリケーションを動作させるため、将来保守を容易にするため、よい実行性能を得るため等の理由により、守ることが好ましい種々のルール（規約）が存在する。こういったルールに従いアプリケーションを検査するルール検査システムが知られている（例えば、特許文献１参照）。
【０００３】
この種のルール検査システムは、アプリケーションを構成するプログラムコードの記述が、自システム内に組み込まれ且つ予め定義されているルールに従っているかどうかを検査することにより、アプリケーションの正常な動作、高い保守性、よい実行性能などを実現する支援を行なうものである。
【０００４】
図１０を参照して、従来例のルール検査システムを説明する。図１０に示すルール検査システムは、処理中枢を担うルール検査装置５１及び記憶装置５２と、検査対象のアプリケーションを入力するアプリケーション入力部８２と、検査結果等を出力する出力装置３１とから構成される。
【０００５】
このうち、ルール検査装置５１は、機能上、アプリケーション入力部８２から入力される検査対象のアプリケーションを構成するプログラムコードの記述が予め定義されたルールに従っているか否かを解析するプログラム解析部５１１を有する。
【０００６】
また、記憶装置５２は、機能上、アプリケーション入力部８２から入力される検査対象のアプリケーションを格納して管理するアプリケーション情報記憶部５２１と、複数のルール定義データをルール一覧上で管理する条件記憶部５２２とを有する。ルール定義データにより定義されるルールは、例えば「正しい方法でオブジェクトを生成すること」といった抽象的なルールから「クラスのインスタンス変数にpublic修飾子をつけてはならない」といった具体的なルールまで様々存在する。
【０００７】
上記ルール検査システムの動作について、図１１を参照して説明する。
【０００８】
まず、アプリケーション情報記憶部５２１は、アプリケーション入力部８２からの検査対象のアプリケーションを受け取ると、そのアプリケーションを構成するプログラムコードを記憶装置５２内の記憶領域上に格納し（ステップＳ１０）、プログラム解析部５１１に検査の開始を促すメッセージを送る。
【０００９】
これにより、プログラム解析部５１１は、条件記憶部５２２からルール一覧を読み込み（ステップＳ２０）、そのルール一覧から一つのルールを取りだし、アプリケーション情報記憶部５２１が管理するプログラムコードを読み込み、そのプログラムコードが取り出したルールに従っているか否かを検査する（ステップＳ３０）。
【００１０】
上記検査結果により、ルールが守られている場合（ステップＳ４０、ＹＥＳ）、ステップＳ６０へ移行する。また、ルールが守られていない場合（ステップＳ４０、ＮＯ）、プログラム解析部５１１は、ルール違反が見つかった旨を出力装置３１を用いて表示し（ステップＳ５０）、その後でステップＳ６０へ移行する。
【００１１】
これにより、プログラム解析部５１１は、ルール一覧の中からまだ検査していないルールがあるかを検査し、存在する場合（ステップＳ６０、ＹＥＳ）、ステップＳ３０に戻り、再びルール検査を開始する。また、プログラム解析部５１１の保持するルール一覧に含まれる全てのルールを検査し終えた場合（ステップＳ６０、ＮＯ）、処理を終了する。
【特許文献１】特開平１１−８５４９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述した従来例のルール検査システム（以下、「従来システム」）では、次のような問題があった。
【００１３】
第１の問題点は、従来システムでは、新しいルールの定義や既存ルールの修正が困難であり、システム利用者が簡便にルールを定義したり修正することができないことである。この理由は、従来システムでは、事前に決定されたルールを処理する仕組みのみを備え、利用者が定義したルールを解釈し検査するための方法について考慮されていないためである。
【００１４】
また、従来システムでは、事前に組み込まれたルールの集合の中から任意のものを足し合わせて、より大きなルールを作成することはできるものの、「ルールＡまたはルールＢが成立すること」という組み合わせによる新しいルールや、「ルールＡが成立しないで且つルールＢが成立すること」といった組合わせによる新しいルールを作成し、検査することができなかった。この理由は、従来システムには、論理式の"or"や"not"に相当する組み合わせを用いて新たに作成されたルールを解釈し検査するための仕組みがないためである。
【００１５】
さらに、従来システムは、各ルール毎にルールの検査対象を指定して検査することができない。この理由は、従来システムは、検査対象を指定したルールの組合わせを解釈する方法について考慮していないためである。
【００１６】
従って、従来システムでは、ルールを柔軟に組み合わせ、ルールの対象を指定して新しいルールを作成することができないといった問題があった。
【００１７】
第２の問題点は、従来システムでは、プログラムの実行前に検査することの可能なルールのみを検査するため、実行時にしか分からない情報を用いた検査ができないことである。この理由は、従来システムは、実行時検査を考慮しておらず、そのための装置を備えていないためである。
【００１８】
本発明の目的は、ルール検査システムの利用者が新しくルールを定義し、そのルールを修正することができるルール検査システムを提供することにある。
【００１９】
本発明の他の目的は、アプリケーション実行前には検査できないルールを、アプリケーション実行時に検査することのできるルール検査システムを提供することにある。
【課題を解決するための手段】
【００２０】
上記目的を達成するため、本発明にかかるルール検査システムは、ルールを論理演算子で結合した論理式と、この論理式で組み合わせる各ルールの適用対象をそれぞれ指定するための対象指定部とからなる条件式を解釈し、アプリケーションがその条件式で指定されたルールを守っているか否かを検査するものである。また、このルール検査システムが、検査対象のアプリケーションに実行時検査用ルーチンを埋め込む装置を備えている。
【００２１】
本発明の第１のルール検査システムは、システム利用者が定義したルール定義を解釈するルール定義解釈部と、解析したルール定義の中に記述されている条件式を解釈しアプリケーションが条件式を満たしているか否かを検査する解析部と、ルール定義の解析情報と検査対象アプリケーションの情報を格納する記憶装置とを有する。このような構成を有し、入力されたルール定義を解釈し、このルール定義に従い検査対象アプリケーションを検査することにより、本発明の目的を達成することができる。
【００２２】
本発明の第２のルール検査システムは、ルール検査システムは、上記第１のルール検査システムの構成に加え、アプリケーションに検査用のコードを埋め込む機能を有するプログラム変換部と、検査用のコードを埋め込んだ新しいアプリケーションを記憶する変換プログラム記憶部と、ルール検査処理が全て終了した後に変換プログラム記憶部に格納されている検査用のコードを埋め込んだ新しいアプリケーションを記憶するハードディスクなどの永続記憶装置とを有する。このような構成を採用し、アプリケーションにルール検査用コードを埋め込むことにより、本発明の目的を達成することができる。
【００２３】
本発明は、このような着想の元に完成されたものである。
【００２４】
即ち、本発明にかかるルール検査システムは、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査システムにおいて、ルール検査装置と、該ルール検査装置に接続される記憶装置とを備え、前記ルール検査装置は、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備え、前記記憶装置は、前記検査対象のアプリケーションを記憶するアプリケーション情報記憶部と、前記条件式の解析結果を格納する条件解析情報記憶部とを備えることを特徴とするルール検査システム。
【００２５】
前記ルール検査装置は、複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備え、前記記憶装置は、前記ルール定義データの解析結果を格納するルール定義情報記憶部をさらに備えてもよい。
【００２６】
前記解釈部は、前記条件式に含まれる前記対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えてもよい。
【００２７】
前記解釈部は、前記条件式の対象指定部に含まれるパターンを展開するパターン解析部と、前記条件式に含まれる対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えてもよい。
【００２８】
前記プログラム解析部は、前記解釈部からの処理要求を受け付け、前記アプリケーション情報記憶部の情報を利用して、前記アプリケーションを構成するクラス間の構造に関する解析を行なうクラス構造解析部と、前記アプリケーションを構成するクラスのうち少なくとも一つのクラス中に定義された情報を解析するクラス定義解析部と、前記アプリケーションの制御の流れを解析する制御フロー解析部と、前記アプリケーションの中に現れる変数に格納されるデータの流れを解析するデータフロー解析部とを備えてもよい。
【００２９】
前記ルール検査装置は、ルール検査コードを挿入した新しいアプリケーションを生成するプログラム変換部をさらに備え、前記記憶装置は、前記新しく生成されたアプリケーションを記憶する変換プログラム記憶部をさらに備えてもよい。
【００３０】
本発明にかかるルール検査装置は、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査装置において、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備えることを特徴とする。
【００３１】
上記構成に加え、複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備えてもよい。
【００３２】
本発明にかかるルール検査方法は、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査方法において、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを備えることを特徴とする。
【００３３】
上記構成に加え、複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに備えてもよい。
【００３４】
本発明にかかるルール検査プログラムは、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するためのルール検査プログラムにおいて、コンピュータに、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを実行させることを特徴とする。
【００３５】
上記構成に加え、前記コンピュータに、複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに実行させることを特徴とする。
【発明の効果】
【００３６】
以上説明したように、本発明のルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムによれば、以下のような効果が達成される。
【００３７】
第１に、本発明によれば、ルール定義を解釈し、解析対象とするアプリケーションが、前述のルール定義内に含まれる条件式の条件に従っているか否かを判定する仕組みを備えることにより、ルール定義システムの利用者が新しく定義した、または既存のものを修正したルール定義を用いてアプリケーションのルール検査を行なうことができる。
【００３８】
また、ルール検査システムの利用者は、述語を組み合わせた論理式からなる条件式を記述することにより、複数の解析を組み合わせた多様な解析からなる独自のルールを定義し、そのルールの検査を行なうことができる。ルールの検査を行なうことができる。
【００３９】
第２に、本発明によれば、実行前に検査できないルールであっても、アプリケーション中にルール検査用コードを埋め込むことにより、実行時にルール違反を検出することができる。
【発明を実施するための最良の形態】
【００４０】
次に、本発明にかかるルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムを実施するための最良の形態について図面を参照して詳細に説明する。
（第一の実施形態）
図１は、本実施形態のルール検査システムの全体構成を示すブロック図である。
【００４１】
図１に示すルール検査システムは、ハードウェア構成上、例えばパーソナルコンピュータ（ＰＣ）等のコンピュータシステムで構成される。具体的には、ルール定義を解釈し、アプリケーションを構成するプログラムコード（以下、「アプリケーション情報」）がルール定義内の条件式で示される条件を守っているか否かを検査するためのルール検査プログラムを実行するルール検査装置１と、このルール検査装置１１がその処理計算を進める際にその計算結果を格納する記憶装置２と、アプリケーションが守るべきルール定義データ４００を入力するルール定義入力部８１と、ルール検査システムの検査対象となるアプリケーション情報を入力するアプリケーション入力部８２と、ルール検査装置１が検査した結果を出力するディスプレイ等の出力装置３１と、ルール検査装置１が実行するルール検査プログラムが格納された記録媒体９０とを備えている。
【００４２】
図３は、ルール定義入力部８１に入力されるルール定義データ４００のデータ構造の例を示す。ルール定義データ４００は、その名前を示す「ルール名」４０１と、どのようなルールであるかを記述した「説明」４０２と、任意の個数からなる具体的な守るべきルールを記した「条件記述」４０３とから構成される。「条件記述」４０３は、例えば、各条件の名前を示す「条件名」４０４と、「条件説明」４０５と、一つ以上の「条件式」４１０とから構成される。
【００４３】
図４は、上記条件式４１０のデータ構造の例を示す。条件式４１０は、ルールを適用する対象を示す「対象指定部」４１１と、"and"や"or"や"not"といった論理演算子によって結合された一つ以上の述語又は述語の列から構成された「論理式」４１２とから構成される。
【００４４】
記憶装置２は、図１に示すように、機能上、ルール定義情報記憶部２１、条件解析情報記憶部２２、及び入力されるアプリケーション情報を管理するアプリケーション情報記憶部２３から構成される。
【００４５】
ルール検査装置１は、例えば記録媒体９０に格納されているルール検査プログラムを実行するＣＰＵ（プロセッサ）を搭載し、図１に示すように、機能上、ルール定義解析部１１、字句解析部１２、構文解析部１３、解釈部１４、及びプログラム解析部１５を有する。これら各部１１〜１５の機能は、例えばルール検査装置１のプロセッサ（ＣＰＵ）が記録媒体９０上のルール検査プログラムを実行することにより実現される。
【００４６】
ルール定義解析部１１は、ルール定義入力部８１に入力されるルール定義データ４００の構造を解析しその構造が正しいことを確認し、そのルール定義データ４００から「ルール名」４０１や、「説明」４０２や、１個以上の「条件記述」４０３の各データを取り出して、それぞれルール定義情報記憶部２１に格納し、ルール定義データ４００に含まれる各「条件記述」４０３に対し、それぞれに含まれる各「条件式」４１０を字句解析部１２に送信し、その結果を解釈部１４から受信し、各ルールの検査結果を出力装置３１に送信する機能を備える。
【００４７】
字句解析部１２は、ルール定義解析部１１から受信した「条件式」４１０を、その式を構成する各要素、例えば"＋"や"−"または利用者が定義した変数や文字列や値等ごとにトークン（字句）として切り分ける字句解析を行ない、その字句解析結果を条件解析情報記憶部２２に格納する機能を有する。
【００４８】
構文解析部１３は、字句解析部１２が条件解析情報記憶部２２に格納した字句解析結果を用いて各要素から抽象構文木（プログラムの抽象的な構造を簡潔に表現した木構造）を作成し、その抽象構文木を条件解析情報記憶部２２に格納する機能を有する。
【００４９】
解釈部１４は、アプリケーション情報記憶部２３からアプリケーション情報を取得し、条件解析情報記憶部２２に格納された条件式４１０の抽象構文木を読み出し、「条件式」４１０に含まれる「論理式」４１２の各述語をプログラム解析部１５を用いて評価し、「条件式」４１０に含まれる「論理式」４１２の評価結果をルール定義解析部１１に送信する機能を有する。
【００５０】
プログラム解析部１５は、解釈部１４から述語の名前とその引数から構成される処理要求を受信し、アプリケーション情報記憶部２３からアプリケーション情報を取得し、そのアプリケーション情報に対し、処理要求で指定された述語が意味する解析処理を行なって、述語が真であるか偽であるかを判定し、その結果を解釈部１４に送信する機能を有する。
【００５１】
上記ルール検査装置１の各部１１〜１５のうち、解釈部１４とプログラム解析部１５の詳細な構成を図２を用いて説明する。
【００５２】
解釈部１４は、構文解析部１３が条件解析情報部２２に格納した「条件式」４１０の抽象構文木を読み込み、アプリケーション情報記憶部２３の情報を読み込んで、抽象構文木中に含まれる「対象指定部」４１１の集合を特定する関数の引数部に含まれるパターン文字列を展開するパターン解析部１４１と、パターン解析部１４１から「対象指定部」４１１のパターンが展開された抽象構文木を受け取り、抽象構文木中の「対象指定部」４１１で指定された対象の一覧をアプリケーション情報記憶部２３の情報を用いて解析する解析対象特定部１４２と、解析対象特定部１４２から抽象構文木と対象の一覧をを受け取り抽象構文木に含まれる述語部をプログラム解析部１５を用いて評価し論理式全体を評価した結果をルール定義解析部１１に送信する論理式解釈部１４３から構成される。
【００５３】
また別の実施の形態では、解釈部１４は、パターン解析部１４１を含まなくても良い。その場合、解析対象特定部１４２が構文解析部１３から処理を引き継ぎ条件解析情報部２２からルール定義データ４００に含まれる「条件式」４１０の抽象構文木を読み込み処理を行なう。
【００５４】
プログラム解析部１５は、機能上、アプリケーション情報を構成するクラス間の構造に関する解析を行なう機能を有するクラス構造解析部１５１と、ひとつのクラスのなかに定義された情報を解析する機能を有するクラス定義解析部１５２と、アプリケーション情報の制御の流れを解析する機能を有するた制御フロー解析部１５３と、アプリケーション情報の中にあらわれる変数に格納されるデータの流れを解析するデータフロー解析部１５４とから構成され、前述の各解析部１１、１５は、論理式解釈部１４３から各々対応する述語の評価依頼メッセージを受け付ける。
【００５５】
次に、本実施形態の全体の動作について、図１、図２のブロック図と、図５、図６、図７のフローチャートと、図３、図４のデータ構造を参照して、詳細に説明する。なお、図６のフローチャートは、図５のフローチャート中のステップＡ３を詳細に説明したものである。また、図７のフローチャートは、図６のフローチャート中のステップＢ６を詳細に説明したものである。図５〜図７のフローチャートに示す処理手順は、ルール検査装置１のプロセッサ（ＣＰＵ）が記録媒体９０上のルール検査プログラムを実行することにより実行される。
【００５６】
まず、本ルール検査システムが扱うルールの詳細を説明する。
【００５７】
ルール定義入力部８１に入力されるルール定義データ４００のデータ構造の一例を前述の図３に基づき説明する。
【００５８】
ルール定義データ４００には、前述の図３で説明したとおり、「ルール名」４０１、「説明」４０２、及び「条件記述」４０３が含まれる。「ルール名」４０１は、ルール定義全体を表わす名前である。「説明」４０２は、どのような性質のルール定義であるかを示すために用いる。例えば、アプリケーション・フレームワークのルールである場合、前述のアプリケーション・フレームワークの名前や仕様書の版、などを記述するために用いる。
【００５９】
また、ルール定義データ４００は、前述したとおり、一つ以上の「条件記述」４０３を含む。例えば、前述のアプリケーション・フレームワークに５つのルールが存在する場合、「条件記述」４０３は、５つ記述される。「条件記述」４０３の名前を示す「条件名」４０４は、「条件記述」４０３を識別するために利用し、「条件説明」４０５はどのような条件であるかが記述される。例えば、前述のアプリケーション・フレームワークのルールに「スレッドを利用してはならない」というルールがあった場合、そのルールや、そのルールが記載されている仕様書のページなどを記述するために利用する。「条件記述」４０３には、一つ以上の「条件式」４１０が含まれる。
【００６０】
「条件記述」４０３の一例を前述した図４の「条件式」４１０に示す。「条件式」４１０は、解釈部１４が解釈可能な形式的な式であり、条件の対象範囲を指定する「対象指定部」４１１と、論理演算子で接続された述語の列からなる「論理式」４１２とから構成される。
【００６１】
「対象指定部」４１１は、集合を求める関数とその集合に属することを示す変数からなる。関数、変数共に複数存在して良い。
【００６２】
例えば、ジャバ（Java（登録商標））言語を例にとると、
「c1=implements("java.io.Serializable"),c2=extends("java.lang.Thread")」
といった記述の場合、「c1」という変数はjava.io.Serializableを実装したクラスの集合と関連付けられ、「c2」という変数はjava.lang.Threadを継承したクラスの集合と関連付けられる。
【００６３】
「対象指定部４１１」中の式には、集合を求める関数と変数の他に、"∪"、"∩"などの和集合や積集合を計算する集合演算子を含めても良い。
【００６４】
例えば、ジャバ言語を例にとると、
「c=implements(java.io.Serializable) ∪ extends(java.lang.Thread)」
といった記述の場合、「c」という変数は、implements(java.io.Serializable)と、extends(java.lang.Thread)との双方の関数から得られる集合の和集合が代入される。この場合、「c」という変数は、与えられたアプリケーションに含まれるクラスのうち、java.io.Serializableを実装したクラスの集合と、java.lang.Threadを継承したクラスの集合とを足し合わせた集合と関連付けられる。
【００６５】
さらに、「対象指定部」４１１中の式には、上記の集合を求める関数と、変数と、集合演算子との他に、述語論理で利用される"∀"や"∃"などの限定子を含めても良い。これらを含めることにより、より複雑な記述が可能となる。
【００６６】
この例として、
「∀ c ∈ implements("java.io.Serializable")」と
「∃ c ∈ implements("java.io.Serializable")」の２つの記述例を用いて説明をする。
【００６７】
前者の例の場合、"∀"が持つ「全ての」という意味より、implements 関数の返り値である"java,io.Serializable"を実装する全てのクラスが解析の対象となり、前述の全てのクラスが当該「対象指定部」４１１を含む「条件式」４１０中に含まれる「論理式」４１２を満たす必要がある。
【００６８】
後者の例の場合、"∃"が持つ「存在する」の意味より、implements 関数の返り値である"java.io.Serializable"を実装する全てのクラスのうち何れかのクラスが当該「対象指定部」４１１を含む「条件式」４１０中に含まれる「論理式」４１２を満たせば良い、という意味になる。なお、"∈"は集合演算で用いられる記号の一つであり、「Ａ∈Ｂ」は、ＡはＢという集合の要素であるということを意味する。
【００６９】
「論理式」４１２は、プログラム解析部１５に含まれる各解析部１５１〜１５４が備える解析機能に対応した「述語」により構成される。
【００７０】
例えば、「defineMethodIn("public void start()", c) andisFinal(c)」という「論理式」４１２の例を考える。ここで、「defineMethodIn」は、２番目の引数で指定されたクラスに１番目の引数で指定されたメソッドが定義されているか否かを検査する「述語」であるとする。
【００７１】
この場合、「defineMethodIn("public void start()", c)」は、クラスcにメソッド"public void start()"が定義されているか否かを解析し、定義されていれば「真」、定義されていなければ「偽」の値を返す。前述の「defineMethodIn」という「述語」は、クラス定義に関わる処理であるため、クラス定義解析部１５２に「defineMethodIn」という「述語」に対応する解析機能が備わっている。同様に「isFinal(c)」は、クラスcは「final」という修飾子により定義されていることを検査する。
【００７２】
「論理式」４１２は、前述の２つの「述語」の論理和からなるため、２つの「述語」が共に成立する場合に、論理式４１２が「真」になり、条件式４１０で表現されるルールが守られていると判断する。
【００７３】
上記のように「対象指定部」４１１と「論理式」４１２から構成される「条件式」４１０の一例を説明する。
【００７４】
例えば、「∀ c ∈ implements("java.io.Serializable"): defineMethodIn("public voidstart()", c) and isFinal(c)」といった「条件式」４１０は、次のように解釈する。なお、「条件式」４１０中の":"は、「対象指定部」４１１と「論理式」４１２とを分ける区切り記号であるとする。
【００７５】
前述の例の場合、「対象指定部」４１１では、"java.io.Serializable"を実装する全てのクラスの集合と変数cとが関連付けらる。
【００７６】
「論理式」４１２の各述語 「defineMethodIn」は、変数cに関連付けられた全てのクラスに"public void start()"が定義されているか否かを検査し、「isFinal」では、変数cに関連付けられた全てのクラスが「final」という修飾子を用いて定義されているか否かを検査する。前述の双方の述語が真の場合に当該「条件式」４１０は、「真」となり、それ以外の場合は、「偽」となる。
【００７７】
次に、本実施形態の動作の詳細を示す。
【００７８】
図５のフローチャートから説明を開始する。まず、ルール記述システム利用者から、ルール定義入力部８１とアプリケーション入力部８２を通して、ルール定義データ４００と検査対象のアプリケーションが与えられ、ルール定義データ４００は、ルール定義解析部１１によって読み込まれ、検査対象のアプリケーションは、アプリケーション情報記憶部２３に読み込まれる。ここで、ルール定義データ４００は、例えばエックス・エム・エル（ＸＭＬ）などのマークアップ言語で記述される。検査対象のアプリケーションは、プログラムのソースコードや、インタプリタが解釈する例えばジャババイトコード（Java（登録商標）Bytecode）のような実行形式のものでもよい。
【００７９】
図５において、ルール定義解析部１１は、前述のルール定義データ４００の構造を解析し、解析結果を計算しやすいように構造化してルール定義情報記憶部２１に記録する（ステップＡ１）。例えば、ルール定義データ４００がＸＭＬで記述されている場合、ルール定義解析部１１は、ＸＭＬのパーザに相当する機能を備え、そのパーズ結果をルール定義情報記憶部２１に記録する。
【００８０】
ルール定義解析部１１が構造を解析した結果、ルール定義データ４００が不正な構造であった場合（ステップＡ２、ＮＯ）、処理が継続できないため、出力装置３１にエラー出力を送信し（ステップＡ２ａ）、処理を終わり、適切な構造の場合処理を進める。
【００８１】
一方、ルール定義データ４００が正しい構造であれば（ステップＡ２、ＹＥＳ）、ルール定義解析部１１は、ルール定義情報記憶部２１に格納したルール定義データ４００に含まれる各「条件記述」４０３中の「条件式」４１０を一つ取り出して字句解析部１２に送信し、その「条件式」４１０によるアプリケーション情報の評価結果を解釈部１４から受信して取得する（ステップＡ３）。
【００８２】
次いで、上記ステップＡ３により解釈部１４から取得したアプリケーション情報の評価結果が「真」であれば（ステップＡ４、ＹＥＳ）、ルール定義解析部１１は、次に処理を進め、アプリケーション情報の評価結果が「偽」である場合は（ステップＡ４、ＮＯ）、上記ステップＡ３により送信した「条件式」４１０を含む「条件記述」４０３に記された「条件名」４０４及び「条件説明」４０５を出力装置３１を用いて表示し、ルール検査システム利用者に、検査対象のアプリケーション情報にルール違反があった旨を知らせる（ステップＡ５）。この時点でアプリケーション情報の検査処理を終了しても良いし、引き続き他のルールに従い検査しても良い。
【００８３】
ルール定義解析部１１は、ルール定義情報記憶部２１に格納したルール定義データ４００に含まれる各「条件記述」４０３中の「条件式」４１０の中で、未だ評価を行なっていないものがあれば、ステップＡ３に戻って上記の検査処理を継続し、全ての「条件式」４１０を評価し終えた場合、処理を終える（ステップＡ６）。
【００８４】
次に、図６のフローチャートを用いて、図５のフローチャート中の上記ステップＡ３の処理動作の内容をより詳細に説明する。
【００８５】
まず、ルール定義解析部１１は、ルール定義情報記憶部２１に格納したルール定義情報に含まれる各「条件記述」４０３中の「条件式」４１０を一つ取り出し、字句解析部１２に送ると、字句解析部１２は、その「条件式」４１０から、例えば、":"などの「条件式」４１２を「対象指定部」４１１と「論理式」４１２とに区切る区切り記号や、関数名、述語名、"and"や"or"や"notなどの論理演算子、"∈"などの集合演算子、変数や値など、条件式を構成する各要素をトークン（字句）として切り出し、その切り出したトークンを条件解析情報記憶部２２に格納する（ステップＢ１）。
【００８６】
次いで、構文解析部１３は、条件解析情報記憶部２２から上記ステップＢ１の処理で生成されたトークンを読み出し、「条件式」４１０を計算しやすい形にするために、抽象構文木を構成し、その結果を条件解析情報記憶部２２に格納する（ステップＢ２）。
【００８７】
次いで、構文解析部１３が条件解析情報記憶部２２から上記ステップＢ１の処理で生成されたトークンから抽象構文木を構成する際、「条件式」４１０中に文法上の誤りが見つかった場合（ステップＢ３、ＮＯ）、エラーを出力し処理を終了する（ステップＢ３ａ）。
【００８８】
一方、「条件式」４１０中に文法上の誤りがなく正しい構文であれば（ステップＢ３、ＹＥＳ）、パターン解析部１４１は、条件解析情報記憶部２２から抽象構文木を読み出し、「条件式」４１０中の「対象指定部」４１１で利用されている関数の引数の中に含まれている「パターン」を、アプリケーション情報記憶部２３に含まれる情報を用いて解析する（ステップＢ４）。
【００８９】
ここで、「パターン」は、例えば正規表現やアスタリスク（＊）による記法などを利用する。例えば、「対象指定部」４１１において「c ∈ implements("*Exception")」という記述があった場合、「implemnts」が関数であり、その引数である"*Exception"は＊を含んでいるため「パターン」と判断する。"*Exception"という「パターン」は、最後に「Exception」という文字列が入ったクラス名と照合し、パターン照合の結果として照合したクラス名の集合を返す。クラス名に限らず、メソッド名やフィールド名をパターンとして記述しても良い。
【００９０】
パターン解析部１４１は、パターン解析により、照合した、クラス名、メソッド名などの文字列の集合を算出し、算出した結果を用いて「対象指定部」４１１を展開する。「対象指定部」４１１を展開するとは、「対象指定部」４１１の対象を求める関数に「パターン」が含まれていた場合、「パターン」に照合した各文字列を引数としてとる複数の関数に展開することをいう。展開された関数の和集合が「解析対象」となる。
【００９１】
前述の例を利用して説明する。「c ∈ implements("*Exception")」の場合に、まず、パターン解析部１４１は、アプリケーション情報記憶部２３からアプリケーション情報を構成する全てのクラスの名前の一覧を取得する。次に、前述の一覧の中から「*Exception」に照合するものを探し出す。ここで、仮に照合した結果が「FooException」と 「BarException」の２つのクラス名だったとする。
【００９２】
パターン解析部１４１は、この時、「c ∈ implements("*Exception")」を「c ∈ implements("FooException") ∪ implements("BarException")」に展開する。「FooException」を実装する全てのクラスと、「BarException」を実装する全てのクラスの和集合に含まれるクラスが「解析対象」cとなる。解釈部１４にパターン解析部１４１を含まない場合、ステップＢ４の処理は省略される。
【００９３】
次いで、パターン解析部１４１は、解析対象特定部１４２に「対象指定部」４１１のパターンを展開した後の抽象構文木を送信する。解析対象特定部１４２は、抽象構文木を受け取ると、抽象構文木中に含まれる「対象指定部」４１１の式を解釈し、アプリケーション情報記憶部２３のアプリケーション情報を用いて、「解析対象」の集合を求め、変数と「解析対象」の集合を関連付けた表を作成し、前述の表と抽象構文木とを論理式解釈部１４３に送信する（ステップＢ５）。「対象指定部」４１１の式に、"∀"や"∃"などの限定子を含める場合は、前述の送信内容に加えて、変数と限定子を関連つけた表も送信する。
【００９４】
例えば、「∀ c ∈ implements("java.io.Serializable")」の場合、まず、解析対象特定部１４２は、アプリケーション情報記憶部２３からアプリケーション情報を構成するクラスを取得し、それらのクラスを全て解析し、"java.io.Serializable"を実装しているクラスを検出し、検出したクラスの名前の集合と変数cとを対応付けた表を作成する。
【００９５】
そして、前述の表と、抽象構文木と、限定子∀と変数cとを関連付けた表とを論理式解釈部１４３に送信する。この「implements」の様な集合を特定する機能は、あらかじめ解析対象特定部１４２に備わっており、その機能に対応する関数のみを「条件式」４１０の「対象指定部」４１１を記述する式で利用することができる。
【００９６】
次いで、論理式解釈部１４３は、解析対象特定部１４２から前述の変数と「解析対象」の集合を対応付けた表と抽象構文木を受け取ると、その表を用いて、抽象構文木に含まれる「条件式」４１０の「論理式」４１２部分を評価し、その結果をルール定義解析部１１に送信する（ステップＢ６）。
【００９７】
次に、図７のフローチャートを用いて、図６のフローチャート中のＢ６の動作の内容をより詳細を説明する。
【００９８】
まず、論理式解釈部１４３は、「論理式」４１２内に含まれる「述語」の名前とその述語を解析することの出来るプログラム解析部１５内の各解析部１５１〜１５４とを対応付けた表をあらかじめ保持している。論理式解釈部１４３は、解析対象特定部１４２から前述の変数と解析対象の集合を対応付けた表と抽象構文木を受け取ると、抽象構文木に含まれる「条件式」４１０の「論理式」４１２部分を解析し、各「述語」に対応する解析機能を備えた各解析部１５１〜１５４を検索する（ステップＣ１）。
【００９９】
論理式解釈部１４３は、上記ステップＣ１で得た「述語」の送信先の一覧を用いて、各「述語」毎に、述語名と、述語の引数内に記述された文字列や値、引数に変数が含まれる場合は解析対象特定部１４２から取得した変数と「解析対象」の集合を対応付けた表を用いて、その変数に対応した「解析対象」の集合をまとめて、送信先であるブログラム解析部１５内の各解析部１５１〜１５４に送信し、その結果を取得する（ステップＣ２）。
【０１００】
次いで、送信先であるプログラム解析部１５内の各解析部１５１〜１５４は、述語の解析内容により種別される。即ち、アプリケーションを構成するクラス間の構造に関する解析を行なう述語は、クラス構造解析部１５１に、アプリケーションを構成するひとつのクラスのなかに定義された情報を解析する述語は、クラス定義解析部１５２に、アプリケーションの制御の流れを解析するための述語は、制御フロー解析部１５３に、アプリケーションの中にあらわれる変数に格納されるデータの流れを解析する述語は、データフロー解析部１５４にそれぞれ送信される。制御フロー解析部１５３とデータフロー解析部１５４は、解析する際にお互いの機能を利用する。
【０１０１】
上記ルール検査システムの利用者は、プログラム解析部１５に含まれる各解析部１５１〜１５４が備える解析機能に対応し、あらかじめ定義されている述語を用いてルール定義データ４００内の「条件式」４１０中の「論理式」４１２を記述する。あらかじめ定義されている述語以外の述語が「条件式」４１０中に現われた場合はエラーとなる。
【０１０２】
次いで、クラス構造解析部１５１と、クラス定義解析部１５２と、制御フロー解析部１５３と、データフロー解析部１５４は、論理式解釈部１４３から解析要求を受け付けると、「解析対象」として指定されたクラスやクラスの一部であるメソッドを、アプリケーション情報記憶部２３に格納されているアプリケーション情報から取得し、上記「述語」により指定された解析を行なって、条件が満たされることが確認されたら「真」を、条件が違反していることが判明したら「偽」を、それぞれ論理式解釈部１４３に返す（ステップＣ３）。
【０１０３】
次いで、論理式解釈部１４３は、各述語の評価結果を得ると、その評価結果を「論理式」４１２で指定されている論理演算子で結合し評価した結果を、ルール定義解析部１１に送信する（ステップＣ４）。「論理式」４１２の評価には、カルノーマップなどの論理式評価技術を用いて、より効率的な順番で述語を評価してく方法を利用しても良い。
【０１０４】
なお、「対象指定部」４１１の式に限定子を利用する場合、上記ステップＣ２にて、論理式解釈部１４３は、プログラム解析部１５に含まれる各解析部１５１〜１５４に、述語名と、その引数の値の他に、限定子の種類を送信する。各解析部１５１〜１５４は、変数の限定子が「∀」の場合、その変数に対応付けられた集合の全要素に対して解析を行なう。一方、変数の限定子が「∃」の場合、その変数に対応付けられた集合の要素の中で、条件を満たす要素が存在した時点で「真」の結果を返す。
【０１０５】
従って、本実施形態によれば、ルール定義データを解釈し、解析対象とするアプリケーションが、ルール定義データ４００内に含まれる「条件式」４１０の条件に従っているか否かを判定する構成を備えたため、ルール検査システム利用者が新しく定義した、または既存のものを修正したルール定義を用いてアプリケーションに対するルール検査を行なうことができる。
【０１０６】
なお、本実施形態では、パターン解析部１４１を解析部１４１に含めたが、別の実施の形態として、プログラム解析部１５にパターン解析部１４１と同等の機能を備えたパターン解析部を含める構成がある。この場合、「対象指定部」４１１だけではなく、「論理式」４１２の述語部の引数にパターンを含めることが可能となる。解析部１５に含まれる各解析部１５１〜１５４は、引数として受け取ったパターンを展開することができる。
（第二の実施形態）
次に、本発明の第二の実施形態について詳細に説明する。
【０１０７】
図８、図９に本実施形態の構成例を示すブロック図を示す。本実施形態のルール検査システムは、第一の実施形態と同様の構成に加え、プログラム変換部１６、変換プログラム記憶部２４、及び永続記憶装置３２を備える点が相違する。
【０１０８】
ルール検査装置１ｂは、解析部１４ｂとプログラム変換部１６を備える点が図１に示すルール検査装置１と相違する。記憶装置２ｂは、変換プログラム記憶部２ｂを備える点が図１に示す記憶装置２と相違する。解釈部１４ｂは、論理式解釈部１４３ｂを備える点が図１に示す解釈部１４と相違する。論理式解釈部１４３ｂは、プログラム変換部１６に変換要求を送信する点が図２に示す論理式解釈部１４３と相違する。
【０１０９】
プログラム変換部１６は、解釈部から述語の名前と引数の値とを受信し、述語によって指定された解析用のコード埋め込んだ新しいアプリケーション・プログラムを、変換プログラム記憶部２４に記録する。
【０１１０】
変換プログラム記憶部２４に記録された上記変更後の新しいアプリケーション・プログラムは、全ての検査処理が終了後、永続記憶装置３２に記録される。永続記憶装置３２には例えばハードディスクなどを利用する。
【０１１１】
アプリケーション情報記憶部２３ｂは、プログラム変換部１６からアプリケーション・コードの取得要求を受け付ける点が、図１に示すアプリケーション情報記憶部２３と相違する。
【０１１２】
次に、本実施形態の動作について説明する。なお、ここでは論理式解釈部１４３ｂとプログラム変換部１６の動作を中心に説明する。他の処理は、第一実施形態と同様であるため省略する。
【０１１３】
論理式解釈部１４３ｂは、「論理式」４１２中に登場する述語のうち、プログラム解析部１５に含まれる各解析部１５１〜１５４が解析可能な「述語」の名前と各解析部１５１〜１５４とを関連付けた表と、実行時にしか解析できない性質を持った「述語」の名前とプログラム変換部１６とを関連付けた表とを管理する。「論理式」４１２を評価する際に、実行時にしか解析できない性質を持った「述語」が現われたら、プログラム変換部１６に「述語」の名前と、その引数の値を送信する。論理式解釈部１４３ｂは、プログラム変換部１６に送信した「述語」の結果を常に「真」として処理する。
【０１１４】
プログラム変換部１６は、論理式解釈部１４３ｂから「述語」の名前と、その引数の値を受信すると、変換プログラム記憶部２４を検査し、変換プログラム記憶部２４に変更済のアプリケーション・コードが格納されていた場合は、前述のアプリケーション・コードに、送信された「述語」とその引数の値を用いて検査用ルーチンを新しく埋め込む。
【０１１５】
変換プログラム記憶部２４にアプリケーション・コードが存在しない場合、アプリケーション情報記憶部２３ｂから検査対象のアプリケーション・コードを取得し、前述のアプリケーション・コードを変換プログラム記憶装置２４にコピーした後、送信された「述語」とその引数の値を用いて検査用ルーチンを新しく埋め込む。
【０１１６】
ここで、プログラム変換部１６の処理例を、「クラス"C"のインスタンス変数"X"の値は0から10の間である」という「述語」の例を用いて説明する。
【０１１７】
ある変数の値が実際に取りうる値は、一般には実行時にしか分からない。従って、ルール検査システムは、「論理式」４１２の「述語」として、「valRangeFromTo（クラス名,変数名,最低値,最大値）」を用意する。この場合、「論理式」４１２中に「valRangeFromTo("C","someVal",0,10)」が現われると、論理式解釈部１４３ｂは、「valRangeFromTo」という「述語」名とその4つの引数の値をプログラム変換部１６に送信する。プログラム変換部１６は、指定されたクラス"C"のインスタンス変数"X"を定義する全てのコードの後にクラス"C"のインスタンス変数"X"の値が0以上10以下であることを検査する検査コードをアプリケーション・コードに埋め込み、変換プログラム記憶部２４に記録する。
【０１１８】
全ての処理が終わると、変換プログラム記憶部２４に記録されている変更されたアプリケーション・コードは、永続記憶装置３２に書出される。
【０１１９】
永続記憶装置３２により書出されたアプリケーション・コードを用いることにより、実行前に検査できなかったルール（規則）は、アプリケーション中にルール検査用ルーチンが埋め込まれているため、アプリケーションの実行時にルール違反を検出することができる。
【０１２０】
以上説明したように、本実施形態によれば、実行前に検査できないルールであっても、アプリケーション中にルール検査用コードを埋め込むことにより、実行時にルール違反を検出することができる。
【産業上の利用可能性】
【０１２１】
以上のように、本発明は、アプリケーション・プログラムに対するルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムの用途に適用できる。
【図面の簡単な説明】
【０１２２】
【図１】本発明の第１の実施形態によるルール検査システムを示すブロック図である。
【図２】本発明の第１の実施形態による解析部とプログラム解析部の詳細を示すブロック図である。
【図３】本発明の第１の実施形態によるルール定義の構成の一例を示す図である。
【図４】本発明の第１の実施形態による条件式の構成の一例を示す図である。
【図５】本発明の第１の実施形態によるルール検査システムのルール検査処理の流れを示すフローチャート図である。
【図６】本発明の第１の実施形態によるルール検査装置がルールを処理する流れを示すフローチャート図である。
【図７】本発明の第１の実施形態による論理式解釈部が論理式を評価する流れを示すフローチャート図である。
【図８】本発明の第２の実施形態によるルール検査システムを示すブロック図である。
【図９】本発明の第２の実施形態による解析部とプログラム解析部の詳細を示すブロック図である。
【図１０】従来例のルール検査システムの一例を示すブロック図である。
【図１１】従来例のルール検査システムの処理の流れの一例を示すフローチャート図である。
【符号の説明】
【０１２３】
１、１ｂ  ルール検査装置
２、２ｂ  記憶装置
１１  ルール定義解釈部
１２  字句解析部
１３  構文解析部
１４、１４ｂ  解釈部
１５  プログラム解析部
１６  プログラム変換部
２１  ルール定義情報記憶部
２２  条件解析情報記憶部
２３、２３ｂ  アプリケーション情報記憶部
２４  変換プログラム記憶部
３１  出力装置
３２  永続記憶装置
８１  ルール定義入力部
８２  アプリケーション入力部
９０  記録媒体
１４１  パターン解析部
１４２  解析対象特定部
１４３、１４３ｂ  論理式解釈部
１５１  クラス構造解析部
１５２  クラス定義解析部
１５３  制御フロー解析部
１５４  データフロー解析部
４００  ルール定義データ
４１０  条件式
【図１】
2005056183.tif 000003
【図２】
2005056183.tif 000004
【図３】
2005056183.tif 000005
【図４】
2005056183.tif 000006
【図５】
2005056183.tif 000007
【図６】
2005056183.tif 000008
【図７】
2005056183.tif 000009
【図８】
2005056183.tif 000010
【図９】
2005056183.tif 000011
【図１０】
2005056183.tif 000012
【図１１】
2005056183.tif 000013