JP2005056183A - ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム - Google Patents

ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム Download PDF

Info

Publication number
JP2005056183A
JP2005056183A JP2003286850A JP2003286850A JP2005056183A JP 2005056183 A JP2005056183 A JP 2005056183A JP 2003286850 A JP2003286850 A JP 2003286850A JP 2003286850 A JP2003286850 A JP 2003286850A JP 2005056183 A JP2005056183 A JP 2005056183A
Authority
JP
Japan
Prior art keywords
rule
unit
analysis
application
conditional expression
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003286850A
Other languages
English (en)
Inventor
Naoto Maeda
直人 前田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2003286850A priority Critical patent/JP2005056183A/ja
Publication of JP2005056183A publication Critical patent/JP2005056183A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】ルール検査システムの利用者がルールを新しく定義し、その定義したルールを用いてアプリケーションのルール検査を行なうことを可能とする。
【解決手段】ルール定義解析部11は、利用者により定義されるルール定義データ400を解析し、ルール定義データ400中の対象指定部と論理式から構成される条件式を一つ取り出して字句解析部12に送る。字句解析部12は、条件式をトークンに分割する。構文解析部13は、切り出したトークンの抽象構文木を作成する。解釈部14は、作成された抽象構文木と、検査対象のアプリケーションとを読み込み、プログラム解析部15の機能を用いて、アプリケーションに対し条件式を評価し、その評価結果をルール定義解析部11に返す。ルール定義解析部11は、返り値が偽の場合はルール違反が発生したことを出力装置31上に表示し、返り値が真の場合、未評価の条件式がなくなるまで同様の処理を繰り返す。
【選択図】 図1

Description

本発明は、ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラムに関し、特に、ルール定義を解釈し、アプリケーションを構成するプログラムコードの記述が、定義されたルールに従っているか否かを検査するルール検査手法に関する。
一般に、アプリケーション・プログラム(以下、「アプリケーション」)開発時には、正常にアプリケーションを動作させるため、将来保守を容易にするため、よい実行性能を得るため等の理由により、守ることが好ましい種々のルール(規約)が存在する。こういったルールに従いアプリケーションを検査するルール検査システムが知られている(例えば、特許文献1参照)。
この種のルール検査システムは、アプリケーションを構成するプログラムコードの記述が、自システム内に組み込まれ且つ予め定義されているルールに従っているかどうかを検査することにより、アプリケーションの正常な動作、高い保守性、よい実行性能などを実現する支援を行なうものである。
図10を参照して、従来例のルール検査システムを説明する。図10に示すルール検査システムは、処理中枢を担うルール検査装置51及び記憶装置52と、検査対象のアプリケーションを入力するアプリケーション入力部82と、検査結果等を出力する出力装置31とから構成される。
このうち、ルール検査装置51は、機能上、アプリケーション入力部82から入力される検査対象のアプリケーションを構成するプログラムコードの記述が予め定義されたルールに従っているか否かを解析するプログラム解析部511を有する。
また、記憶装置52は、機能上、アプリケーション入力部82から入力される検査対象のアプリケーションを格納して管理するアプリケーション情報記憶部521と、複数のルール定義データをルール一覧上で管理する条件記憶部522とを有する。ルール定義データにより定義されるルールは、例えば「正しい方法でオブジェクトを生成すること」といった抽象的なルールから「クラスのインスタンス変数にpublic修飾子をつけてはならない」といった具体的なルールまで様々存在する。
上記ルール検査システムの動作について、図11を参照して説明する。
まず、アプリケーション情報記憶部521は、アプリケーション入力部82からの検査対象のアプリケーションを受け取ると、そのアプリケーションを構成するプログラムコードを記憶装置52内の記憶領域上に格納し(ステップS10)、プログラム解析部511に検査の開始を促すメッセージを送る。
これにより、プログラム解析部511は、条件記憶部522からルール一覧を読み込み(ステップS20)、そのルール一覧から一つのルールを取りだし、アプリケーション情報記憶部521が管理するプログラムコードを読み込み、そのプログラムコードが取り出したルールに従っているか否かを検査する(ステップS30)。
上記検査結果により、ルールが守られている場合(ステップS40、YES)、ステップS60へ移行する。また、ルールが守られていない場合(ステップS40、NO)、プログラム解析部511は、ルール違反が見つかった旨を出力装置31を用いて表示し(ステップS50)、その後でステップS60へ移行する。
これにより、プログラム解析部511は、ルール一覧の中からまだ検査していないルールがあるかを検査し、存在する場合(ステップS60、YES)、ステップS30に戻り、再びルール検査を開始する。また、プログラム解析部511の保持するルール一覧に含まれる全てのルールを検査し終えた場合(ステップS60、NO)、処理を終了する。
特開平11−85496号公報
しかしながら、上述した従来例のルール検査システム(以下、「従来システム」)では、次のような問題があった。
第1の問題点は、従来システムでは、新しいルールの定義や既存ルールの修正が困難であり、システム利用者が簡便にルールを定義したり修正することができないことである。この理由は、従来システムでは、事前に決定されたルールを処理する仕組みのみを備え、利用者が定義したルールを解釈し検査するための方法について考慮されていないためである。
また、従来システムでは、事前に組み込まれたルールの集合の中から任意のものを足し合わせて、より大きなルールを作成することはできるものの、「ルールAまたはルールBが成立すること」という組み合わせによる新しいルールや、「ルールAが成立しないで且つルールBが成立すること」といった組合わせによる新しいルールを作成し、検査することができなかった。この理由は、従来システムには、論理式の"or"や"not"に相当する組み合わせを用いて新たに作成されたルールを解釈し検査するための仕組みがないためである。
さらに、従来システムは、各ルール毎にルールの検査対象を指定して検査することができない。この理由は、従来システムは、検査対象を指定したルールの組合わせを解釈する方法について考慮していないためである。
従って、従来システムでは、ルールを柔軟に組み合わせ、ルールの対象を指定して新しいルールを作成することができないといった問題があった。
第2の問題点は、従来システムでは、プログラムの実行前に検査することの可能なルールのみを検査するため、実行時にしか分からない情報を用いた検査ができないことである。この理由は、従来システムは、実行時検査を考慮しておらず、そのための装置を備えていないためである。
本発明の目的は、ルール検査システムの利用者が新しくルールを定義し、そのルールを修正することができるルール検査システムを提供することにある。
本発明の他の目的は、アプリケーション実行前には検査できないルールを、アプリケーション実行時に検査することのできるルール検査システムを提供することにある。
上記目的を達成するため、本発明にかかるルール検査システムは、ルールを論理演算子で結合した論理式と、この論理式で組み合わせる各ルールの適用対象をそれぞれ指定するための対象指定部とからなる条件式を解釈し、アプリケーションがその条件式で指定されたルールを守っているか否かを検査するものである。また、このルール検査システムが、検査対象のアプリケーションに実行時検査用ルーチンを埋め込む装置を備えている。
本発明の第1のルール検査システムは、システム利用者が定義したルール定義を解釈するルール定義解釈部と、解析したルール定義の中に記述されている条件式を解釈しアプリケーションが条件式を満たしているか否かを検査する解析部と、ルール定義の解析情報と検査対象アプリケーションの情報を格納する記憶装置とを有する。このような構成を有し、入力されたルール定義を解釈し、このルール定義に従い検査対象アプリケーションを検査することにより、本発明の目的を達成することができる。
本発明の第2のルール検査システムは、ルール検査システムは、上記第1のルール検査システムの構成に加え、アプリケーションに検査用のコードを埋め込む機能を有するプログラム変換部と、検査用のコードを埋め込んだ新しいアプリケーションを記憶する変換プログラム記憶部と、ルール検査処理が全て終了した後に変換プログラム記憶部に格納されている検査用のコードを埋め込んだ新しいアプリケーションを記憶するハードディスクなどの永続記憶装置とを有する。このような構成を採用し、アプリケーションにルール検査用コードを埋め込むことにより、本発明の目的を達成することができる。
本発明は、このような着想の元に完成されたものである。
即ち、本発明にかかるルール検査システムは、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査システムにおいて、ルール検査装置と、該ルール検査装置に接続される記憶装置とを備え、前記ルール検査装置は、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備え、前記記憶装置は、前記検査対象のアプリケーションを記憶するアプリケーション情報記憶部と、前記条件式の解析結果を格納する条件解析情報記憶部とを備えることを特徴とするルール検査システム。
前記ルール検査装置は、複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備え、前記記憶装置は、前記ルール定義データの解析結果を格納するルール定義情報記憶部をさらに備えてもよい。
前記解釈部は、前記条件式に含まれる前記対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えてもよい。
前記解釈部は、前記条件式の対象指定部に含まれるパターンを展開するパターン解析部と、前記条件式に含まれる対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えてもよい。
前記プログラム解析部は、前記解釈部からの処理要求を受け付け、前記アプリケーション情報記憶部の情報を利用して、前記アプリケーションを構成するクラス間の構造に関する解析を行なうクラス構造解析部と、前記アプリケーションを構成するクラスのうち少なくとも一つのクラス中に定義された情報を解析するクラス定義解析部と、前記アプリケーションの制御の流れを解析する制御フロー解析部と、前記アプリケーションの中に現れる変数に格納されるデータの流れを解析するデータフロー解析部とを備えてもよい。
前記ルール検査装置は、ルール検査コードを挿入した新しいアプリケーションを生成するプログラム変換部をさらに備え、前記記憶装置は、前記新しく生成されたアプリケーションを記憶する変換プログラム記憶部をさらに備えてもよい。
本発明にかかるルール検査装置は、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査装置において、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備えることを特徴とする。
上記構成に加え、複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備えてもよい。
本発明にかかるルール検査方法は、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査方法において、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを備えることを特徴とする。
上記構成に加え、複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに備えてもよい。
本発明にかかるルール検査プログラムは、所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するためのルール検査プログラムにおいて、コンピュータに、前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを実行させることを特徴とする。
上記構成に加え、前記コンピュータに、複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに実行させることを特徴とする。
以上説明したように、本発明のルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムによれば、以下のような効果が達成される。
第1に、本発明によれば、ルール定義を解釈し、解析対象とするアプリケーションが、前述のルール定義内に含まれる条件式の条件に従っているか否かを判定する仕組みを備えることにより、ルール定義システムの利用者が新しく定義した、または既存のものを修正したルール定義を用いてアプリケーションのルール検査を行なうことができる。
また、ルール検査システムの利用者は、述語を組み合わせた論理式からなる条件式を記述することにより、複数の解析を組み合わせた多様な解析からなる独自のルールを定義し、そのルールの検査を行なうことができる。ルールの検査を行なうことができる。
第2に、本発明によれば、実行前に検査できないルールであっても、アプリケーション中にルール検査用コードを埋め込むことにより、実行時にルール違反を検出することができる。
次に、本発明にかかるルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムを実施するための最良の形態について図面を参照して詳細に説明する。
(第一の実施形態)
図1は、本実施形態のルール検査システムの全体構成を示すブロック図である。
図1に示すルール検査システムは、ハードウェア構成上、例えばパーソナルコンピュータ(PC)等のコンピュータシステムで構成される。具体的には、ルール定義を解釈し、アプリケーションを構成するプログラムコード(以下、「アプリケーション情報」)がルール定義内の条件式で示される条件を守っているか否かを検査するためのルール検査プログラムを実行するルール検査装置1と、このルール検査装置11がその処理計算を進める際にその計算結果を格納する記憶装置2と、アプリケーションが守るべきルール定義データ400を入力するルール定義入力部81と、ルール検査システムの検査対象となるアプリケーション情報を入力するアプリケーション入力部82と、ルール検査装置1が検査した結果を出力するディスプレイ等の出力装置31と、ルール検査装置1が実行するルール検査プログラムが格納された記録媒体90とを備えている。
図3は、ルール定義入力部81に入力されるルール定義データ400のデータ構造の例を示す。ルール定義データ400は、その名前を示す「ルール名」401と、どのようなルールであるかを記述した「説明」402と、任意の個数からなる具体的な守るべきルールを記した「条件記述」403とから構成される。「条件記述」403は、例えば、各条件の名前を示す「条件名」404と、「条件説明」405と、一つ以上の「条件式」410とから構成される。
図4は、上記条件式410のデータ構造の例を示す。条件式410は、ルールを適用する対象を示す「対象指定部」411と、"and"や"or"や"not"といった論理演算子によって結合された一つ以上の述語又は述語の列から構成された「論理式」412とから構成される。
記憶装置2は、図1に示すように、機能上、ルール定義情報記憶部21、条件解析情報記憶部22、及び入力されるアプリケーション情報を管理するアプリケーション情報記憶部23から構成される。
ルール検査装置1は、例えば記録媒体90に格納されているルール検査プログラムを実行するCPU(プロセッサ)を搭載し、図1に示すように、機能上、ルール定義解析部11、字句解析部12、構文解析部13、解釈部14、及びプログラム解析部15を有する。これら各部11〜15の機能は、例えばルール検査装置1のプロセッサ(CPU)が記録媒体90上のルール検査プログラムを実行することにより実現される。
ルール定義解析部11は、ルール定義入力部81に入力されるルール定義データ400の構造を解析しその構造が正しいことを確認し、そのルール定義データ400から「ルール名」401や、「説明」402や、1個以上の「条件記述」403の各データを取り出して、それぞれルール定義情報記憶部21に格納し、ルール定義データ400に含まれる各「条件記述」403に対し、それぞれに含まれる各「条件式」410を字句解析部12に送信し、その結果を解釈部14から受信し、各ルールの検査結果を出力装置31に送信する機能を備える。
字句解析部12は、ルール定義解析部11から受信した「条件式」410を、その式を構成する各要素、例えば"+"や"−"または利用者が定義した変数や文字列や値等ごとにトークン(字句)として切り分ける字句解析を行ない、その字句解析結果を条件解析情報記憶部22に格納する機能を有する。
構文解析部13は、字句解析部12が条件解析情報記憶部22に格納した字句解析結果を用いて各要素から抽象構文木(プログラムの抽象的な構造を簡潔に表現した木構造)を作成し、その抽象構文木を条件解析情報記憶部22に格納する機能を有する。
解釈部14は、アプリケーション情報記憶部23からアプリケーション情報を取得し、条件解析情報記憶部22に格納された条件式410の抽象構文木を読み出し、「条件式」410に含まれる「論理式」412の各述語をプログラム解析部15を用いて評価し、「条件式」410に含まれる「論理式」412の評価結果をルール定義解析部11に送信する機能を有する。
プログラム解析部15は、解釈部14から述語の名前とその引数から構成される処理要求を受信し、アプリケーション情報記憶部23からアプリケーション情報を取得し、そのアプリケーション情報に対し、処理要求で指定された述語が意味する解析処理を行なって、述語が真であるか偽であるかを判定し、その結果を解釈部14に送信する機能を有する。
上記ルール検査装置1の各部11〜15のうち、解釈部14とプログラム解析部15の詳細な構成を図2を用いて説明する。
解釈部14は、構文解析部13が条件解析情報部22に格納した「条件式」410の抽象構文木を読み込み、アプリケーション情報記憶部23の情報を読み込んで、抽象構文木中に含まれる「対象指定部」411の集合を特定する関数の引数部に含まれるパターン文字列を展開するパターン解析部141と、パターン解析部141から「対象指定部」411のパターンが展開された抽象構文木を受け取り、抽象構文木中の「対象指定部」411で指定された対象の一覧をアプリケーション情報記憶部23の情報を用いて解析する解析対象特定部142と、解析対象特定部142から抽象構文木と対象の一覧をを受け取り抽象構文木に含まれる述語部をプログラム解析部15を用いて評価し論理式全体を評価した結果をルール定義解析部11に送信する論理式解釈部143から構成される。
また別の実施の形態では、解釈部14は、パターン解析部141を含まなくても良い。その場合、解析対象特定部142が構文解析部13から処理を引き継ぎ条件解析情報部22からルール定義データ400に含まれる「条件式」410の抽象構文木を読み込み処理を行なう。
プログラム解析部15は、機能上、アプリケーション情報を構成するクラス間の構造に関する解析を行なう機能を有するクラス構造解析部151と、ひとつのクラスのなかに定義された情報を解析する機能を有するクラス定義解析部152と、アプリケーション情報の制御の流れを解析する機能を有するた制御フロー解析部153と、アプリケーション情報の中にあらわれる変数に格納されるデータの流れを解析するデータフロー解析部154とから構成され、前述の各解析部11、15は、論理式解釈部143から各々対応する述語の評価依頼メッセージを受け付ける。
次に、本実施形態の全体の動作について、図1、図2のブロック図と、図5、図6、図7のフローチャートと、図3、図4のデータ構造を参照して、詳細に説明する。なお、図6のフローチャートは、図5のフローチャート中のステップA3を詳細に説明したものである。また、図7のフローチャートは、図6のフローチャート中のステップB6を詳細に説明したものである。図5〜図7のフローチャートに示す処理手順は、ルール検査装置1のプロセッサ(CPU)が記録媒体90上のルール検査プログラムを実行することにより実行される。
まず、本ルール検査システムが扱うルールの詳細を説明する。
ルール定義入力部81に入力されるルール定義データ400のデータ構造の一例を前述の図3に基づき説明する。
ルール定義データ400には、前述の図3で説明したとおり、「ルール名」401、「説明」402、及び「条件記述」403が含まれる。「ルール名」401は、ルール定義全体を表わす名前である。「説明」402は、どのような性質のルール定義であるかを示すために用いる。例えば、アプリケーション・フレームワークのルールである場合、前述のアプリケーション・フレームワークの名前や仕様書の版、などを記述するために用いる。
また、ルール定義データ400は、前述したとおり、一つ以上の「条件記述」403を含む。例えば、前述のアプリケーション・フレームワークに5つのルールが存在する場合、「条件記述」403は、5つ記述される。「条件記述」403の名前を示す「条件名」404は、「条件記述」403を識別するために利用し、「条件説明」405はどのような条件であるかが記述される。例えば、前述のアプリケーション・フレームワークのルールに「スレッドを利用してはならない」というルールがあった場合、そのルールや、そのルールが記載されている仕様書のページなどを記述するために利用する。「条件記述」403には、一つ以上の「条件式」410が含まれる。
「条件記述」403の一例を前述した図4の「条件式」410に示す。「条件式」410は、解釈部14が解釈可能な形式的な式であり、条件の対象範囲を指定する「対象指定部」411と、論理演算子で接続された述語の列からなる「論理式」412とから構成される。
「対象指定部」411は、集合を求める関数とその集合に属することを示す変数からなる。関数、変数共に複数存在して良い。
例えば、ジャバ(Java(登録商標))言語を例にとると、
「c1=implements("java.io.Serializable"),c2=extends("java.lang.Thread")」
といった記述の場合、「c1」という変数はjava.io.Serializableを実装したクラスの集合と関連付けられ、「c2」という変数はjava.lang.Threadを継承したクラスの集合と関連付けられる。
「対象指定部411」中の式には、集合を求める関数と変数の他に、"∪"、"∩"などの和集合や積集合を計算する集合演算子を含めても良い。
例えば、ジャバ言語を例にとると、
「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を継承したクラスの集合とを足し合わせた集合と関連付けられる。
さらに、「対象指定部」411中の式には、上記の集合を求める関数と、変数と、集合演算子との他に、述語論理で利用される"∀"や"∃"などの限定子を含めても良い。これらを含めることにより、より複雑な記述が可能となる。
この例として、
「∀ c ∈ implements("java.io.Serializable")」と
「∃ c ∈ implements("java.io.Serializable")」の2つの記述例を用いて説明をする。
前者の例の場合、"∀"が持つ「全ての」という意味より、implements 関数の返り値である"java,io.Serializable"を実装する全てのクラスが解析の対象となり、前述の全てのクラスが当該「対象指定部」411を含む「条件式」410中に含まれる「論理式」412を満たす必要がある。
後者の例の場合、"∃"が持つ「存在する」の意味より、implements 関数の返り値である"java.io.Serializable"を実装する全てのクラスのうち何れかのクラスが当該「対象指定部」411を含む「条件式」410中に含まれる「論理式」412を満たせば良い、という意味になる。なお、"∈"は集合演算で用いられる記号の一つであり、「A∈B」は、AはBという集合の要素であるということを意味する。
「論理式」412は、プログラム解析部15に含まれる各解析部151〜154が備える解析機能に対応した「述語」により構成される。
例えば、「defineMethodIn("public void start()", c) andisFinal(c)」という「論理式」412の例を考える。ここで、「defineMethodIn」は、2番目の引数で指定されたクラスに1番目の引数で指定されたメソッドが定義されているか否かを検査する「述語」であるとする。
この場合、「defineMethodIn("public void start()", c)」は、クラスcにメソッド"public void start()"が定義されているか否かを解析し、定義されていれば「真」、定義されていなければ「偽」の値を返す。前述の「defineMethodIn」という「述語」は、クラス定義に関わる処理であるため、クラス定義解析部152に「defineMethodIn」という「述語」に対応する解析機能が備わっている。同様に「isFinal(c)」は、クラスcは「final」という修飾子により定義されていることを検査する。
「論理式」412は、前述の2つの「述語」の論理和からなるため、2つの「述語」が共に成立する場合に、論理式412が「真」になり、条件式410で表現されるルールが守られていると判断する。
上記のように「対象指定部」411と「論理式」412から構成される「条件式」410の一例を説明する。
例えば、「∀ c ∈ implements("java.io.Serializable"): defineMethodIn("public voidstart()", c) and isFinal(c)」といった「条件式」410は、次のように解釈する。なお、「条件式」410中の":"は、「対象指定部」411と「論理式」412とを分ける区切り記号であるとする。
前述の例の場合、「対象指定部」411では、"java.io.Serializable"を実装する全てのクラスの集合と変数cとが関連付けらる。
「論理式」412の各述語 「defineMethodIn」は、変数cに関連付けられた全てのクラスに"public void start()"が定義されているか否かを検査し、「isFinal」では、変数cに関連付けられた全てのクラスが「final」という修飾子を用いて定義されているか否かを検査する。前述の双方の述語が真の場合に当該「条件式」410は、「真」となり、それ以外の場合は、「偽」となる。
次に、本実施形態の動作の詳細を示す。
図5のフローチャートから説明を開始する。まず、ルール記述システム利用者から、ルール定義入力部81とアプリケーション入力部82を通して、ルール定義データ400と検査対象のアプリケーションが与えられ、ルール定義データ400は、ルール定義解析部11によって読み込まれ、検査対象のアプリケーションは、アプリケーション情報記憶部23に読み込まれる。ここで、ルール定義データ400は、例えばエックス・エム・エル(XML)などのマークアップ言語で記述される。検査対象のアプリケーションは、プログラムのソースコードや、インタプリタが解釈する例えばジャババイトコード(Java(登録商標)Bytecode)のような実行形式のものでもよい。
図5において、ルール定義解析部11は、前述のルール定義データ400の構造を解析し、解析結果を計算しやすいように構造化してルール定義情報記憶部21に記録する(ステップA1)。例えば、ルール定義データ400がXMLで記述されている場合、ルール定義解析部11は、XMLのパーザに相当する機能を備え、そのパーズ結果をルール定義情報記憶部21に記録する。
ルール定義解析部11が構造を解析した結果、ルール定義データ400が不正な構造であった場合(ステップA2、NO)、処理が継続できないため、出力装置31にエラー出力を送信し(ステップA2a)、処理を終わり、適切な構造の場合処理を進める。
一方、ルール定義データ400が正しい構造であれば(ステップA2、YES)、ルール定義解析部11は、ルール定義情報記憶部21に格納したルール定義データ400に含まれる各「条件記述」403中の「条件式」410を一つ取り出して字句解析部12に送信し、その「条件式」410によるアプリケーション情報の評価結果を解釈部14から受信して取得する(ステップA3)。
次いで、上記ステップA3により解釈部14から取得したアプリケーション情報の評価結果が「真」であれば(ステップA4、YES)、ルール定義解析部11は、次に処理を進め、アプリケーション情報の評価結果が「偽」である場合は(ステップA4、NO)、上記ステップA3により送信した「条件式」410を含む「条件記述」403に記された「条件名」404及び「条件説明」405を出力装置31を用いて表示し、ルール検査システム利用者に、検査対象のアプリケーション情報にルール違反があった旨を知らせる(ステップA5)。この時点でアプリケーション情報の検査処理を終了しても良いし、引き続き他のルールに従い検査しても良い。
ルール定義解析部11は、ルール定義情報記憶部21に格納したルール定義データ400に含まれる各「条件記述」403中の「条件式」410の中で、未だ評価を行なっていないものがあれば、ステップA3に戻って上記の検査処理を継続し、全ての「条件式」410を評価し終えた場合、処理を終える(ステップA6)。
次に、図6のフローチャートを用いて、図5のフローチャート中の上記ステップA3の処理動作の内容をより詳細に説明する。
まず、ルール定義解析部11は、ルール定義情報記憶部21に格納したルール定義情報に含まれる各「条件記述」403中の「条件式」410を一つ取り出し、字句解析部12に送ると、字句解析部12は、その「条件式」410から、例えば、":"などの「条件式」412を「対象指定部」411と「論理式」412とに区切る区切り記号や、関数名、述語名、"and"や"or"や"notなどの論理演算子、"∈"などの集合演算子、変数や値など、条件式を構成する各要素をトークン(字句)として切り出し、その切り出したトークンを条件解析情報記憶部22に格納する(ステップB1)。
次いで、構文解析部13は、条件解析情報記憶部22から上記ステップB1の処理で生成されたトークンを読み出し、「条件式」410を計算しやすい形にするために、抽象構文木を構成し、その結果を条件解析情報記憶部22に格納する(ステップB2)。
次いで、構文解析部13が条件解析情報記憶部22から上記ステップB1の処理で生成されたトークンから抽象構文木を構成する際、「条件式」410中に文法上の誤りが見つかった場合(ステップB3、NO)、エラーを出力し処理を終了する(ステップB3a)。
一方、「条件式」410中に文法上の誤りがなく正しい構文であれば(ステップB3、YES)、パターン解析部141は、条件解析情報記憶部22から抽象構文木を読み出し、「条件式」410中の「対象指定部」411で利用されている関数の引数の中に含まれている「パターン」を、アプリケーション情報記憶部23に含まれる情報を用いて解析する(ステップB4)。
ここで、「パターン」は、例えば正規表現やアスタリスク(*)による記法などを利用する。例えば、「対象指定部」411において「c ∈ implements("*Exception")」という記述があった場合、「implemnts」が関数であり、その引数である"*Exception"は*を含んでいるため「パターン」と判断する。"*Exception"という「パターン」は、最後に「Exception」という文字列が入ったクラス名と照合し、パターン照合の結果として照合したクラス名の集合を返す。クラス名に限らず、メソッド名やフィールド名をパターンとして記述しても良い。
パターン解析部141は、パターン解析により、照合した、クラス名、メソッド名などの文字列の集合を算出し、算出した結果を用いて「対象指定部」411を展開する。「対象指定部」411を展開するとは、「対象指定部」411の対象を求める関数に「パターン」が含まれていた場合、「パターン」に照合した各文字列を引数としてとる複数の関数に展開することをいう。展開された関数の和集合が「解析対象」となる。
前述の例を利用して説明する。「c ∈ implements("*Exception")」の場合に、まず、パターン解析部141は、アプリケーション情報記憶部23からアプリケーション情報を構成する全てのクラスの名前の一覧を取得する。次に、前述の一覧の中から「*Exception」に照合するものを探し出す。ここで、仮に照合した結果が「FooException」と 「BarException」の2つのクラス名だったとする。
パターン解析部141は、この時、「c ∈ implements("*Exception")」を「c ∈ implements("FooException") ∪ implements("BarException")」に展開する。「FooException」を実装する全てのクラスと、「BarException」を実装する全てのクラスの和集合に含まれるクラスが「解析対象」cとなる。解釈部14にパターン解析部141を含まない場合、ステップB4の処理は省略される。
次いで、パターン解析部141は、解析対象特定部142に「対象指定部」411のパターンを展開した後の抽象構文木を送信する。解析対象特定部142は、抽象構文木を受け取ると、抽象構文木中に含まれる「対象指定部」411の式を解釈し、アプリケーション情報記憶部23のアプリケーション情報を用いて、「解析対象」の集合を求め、変数と「解析対象」の集合を関連付けた表を作成し、前述の表と抽象構文木とを論理式解釈部143に送信する(ステップB5)。「対象指定部」411の式に、"∀"や"∃"などの限定子を含める場合は、前述の送信内容に加えて、変数と限定子を関連つけた表も送信する。
例えば、「∀ c ∈ implements("java.io.Serializable")」の場合、まず、解析対象特定部142は、アプリケーション情報記憶部23からアプリケーション情報を構成するクラスを取得し、それらのクラスを全て解析し、"java.io.Serializable"を実装しているクラスを検出し、検出したクラスの名前の集合と変数cとを対応付けた表を作成する。
そして、前述の表と、抽象構文木と、限定子∀と変数cとを関連付けた表とを論理式解釈部143に送信する。この「implements」の様な集合を特定する機能は、あらかじめ解析対象特定部142に備わっており、その機能に対応する関数のみを「条件式」410の「対象指定部」411を記述する式で利用することができる。
次いで、論理式解釈部143は、解析対象特定部142から前述の変数と「解析対象」の集合を対応付けた表と抽象構文木を受け取ると、その表を用いて、抽象構文木に含まれる「条件式」410の「論理式」412部分を評価し、その結果をルール定義解析部11に送信する(ステップB6)。
次に、図7のフローチャートを用いて、図6のフローチャート中のB6の動作の内容をより詳細を説明する。
まず、論理式解釈部143は、「論理式」412内に含まれる「述語」の名前とその述語を解析することの出来るプログラム解析部15内の各解析部151〜154とを対応付けた表をあらかじめ保持している。論理式解釈部143は、解析対象特定部142から前述の変数と解析対象の集合を対応付けた表と抽象構文木を受け取ると、抽象構文木に含まれる「条件式」410の「論理式」412部分を解析し、各「述語」に対応する解析機能を備えた各解析部151〜154を検索する(ステップC1)。
論理式解釈部143は、上記ステップC1で得た「述語」の送信先の一覧を用いて、各「述語」毎に、述語名と、述語の引数内に記述された文字列や値、引数に変数が含まれる場合は解析対象特定部142から取得した変数と「解析対象」の集合を対応付けた表を用いて、その変数に対応した「解析対象」の集合をまとめて、送信先であるブログラム解析部15内の各解析部151〜154に送信し、その結果を取得する(ステップC2)。
次いで、送信先であるプログラム解析部15内の各解析部151〜154は、述語の解析内容により種別される。即ち、アプリケーションを構成するクラス間の構造に関する解析を行なう述語は、クラス構造解析部151に、アプリケーションを構成するひとつのクラスのなかに定義された情報を解析する述語は、クラス定義解析部152に、アプリケーションの制御の流れを解析するための述語は、制御フロー解析部153に、アプリケーションの中にあらわれる変数に格納されるデータの流れを解析する述語は、データフロー解析部154にそれぞれ送信される。制御フロー解析部153とデータフロー解析部154は、解析する際にお互いの機能を利用する。
上記ルール検査システムの利用者は、プログラム解析部15に含まれる各解析部151〜154が備える解析機能に対応し、あらかじめ定義されている述語を用いてルール定義データ400内の「条件式」410中の「論理式」412を記述する。あらかじめ定義されている述語以外の述語が「条件式」410中に現われた場合はエラーとなる。
次いで、クラス構造解析部151と、クラス定義解析部152と、制御フロー解析部153と、データフロー解析部154は、論理式解釈部143から解析要求を受け付けると、「解析対象」として指定されたクラスやクラスの一部であるメソッドを、アプリケーション情報記憶部23に格納されているアプリケーション情報から取得し、上記「述語」により指定された解析を行なって、条件が満たされることが確認されたら「真」を、条件が違反していることが判明したら「偽」を、それぞれ論理式解釈部143に返す(ステップC3)。
次いで、論理式解釈部143は、各述語の評価結果を得ると、その評価結果を「論理式」412で指定されている論理演算子で結合し評価した結果を、ルール定義解析部11に送信する(ステップC4)。「論理式」412の評価には、カルノーマップなどの論理式評価技術を用いて、より効率的な順番で述語を評価してく方法を利用しても良い。
なお、「対象指定部」411の式に限定子を利用する場合、上記ステップC2にて、論理式解釈部143は、プログラム解析部15に含まれる各解析部151〜154に、述語名と、その引数の値の他に、限定子の種類を送信する。各解析部151〜154は、変数の限定子が「∀」の場合、その変数に対応付けられた集合の全要素に対して解析を行なう。一方、変数の限定子が「∃」の場合、その変数に対応付けられた集合の要素の中で、条件を満たす要素が存在した時点で「真」の結果を返す。
従って、本実施形態によれば、ルール定義データを解釈し、解析対象とするアプリケーションが、ルール定義データ400内に含まれる「条件式」410の条件に従っているか否かを判定する構成を備えたため、ルール検査システム利用者が新しく定義した、または既存のものを修正したルール定義を用いてアプリケーションに対するルール検査を行なうことができる。
なお、本実施形態では、パターン解析部141を解析部141に含めたが、別の実施の形態として、プログラム解析部15にパターン解析部141と同等の機能を備えたパターン解析部を含める構成がある。この場合、「対象指定部」411だけではなく、「論理式」412の述語部の引数にパターンを含めることが可能となる。解析部15に含まれる各解析部151〜154は、引数として受け取ったパターンを展開することができる。
(第二の実施形態)
次に、本発明の第二の実施形態について詳細に説明する。
図8、図9に本実施形態の構成例を示すブロック図を示す。本実施形態のルール検査システムは、第一の実施形態と同様の構成に加え、プログラム変換部16、変換プログラム記憶部24、及び永続記憶装置32を備える点が相違する。
ルール検査装置1bは、解析部14bとプログラム変換部16を備える点が図1に示すルール検査装置1と相違する。記憶装置2bは、変換プログラム記憶部2bを備える点が図1に示す記憶装置2と相違する。解釈部14bは、論理式解釈部143bを備える点が図1に示す解釈部14と相違する。論理式解釈部143bは、プログラム変換部16に変換要求を送信する点が図2に示す論理式解釈部143と相違する。
プログラム変換部16は、解釈部から述語の名前と引数の値とを受信し、述語によって指定された解析用のコード埋め込んだ新しいアプリケーション・プログラムを、変換プログラム記憶部24に記録する。
変換プログラム記憶部24に記録された上記変更後の新しいアプリケーション・プログラムは、全ての検査処理が終了後、永続記憶装置32に記録される。永続記憶装置32には例えばハードディスクなどを利用する。
アプリケーション情報記憶部23bは、プログラム変換部16からアプリケーション・コードの取得要求を受け付ける点が、図1に示すアプリケーション情報記憶部23と相違する。
次に、本実施形態の動作について説明する。なお、ここでは論理式解釈部143bとプログラム変換部16の動作を中心に説明する。他の処理は、第一実施形態と同様であるため省略する。
論理式解釈部143bは、「論理式」412中に登場する述語のうち、プログラム解析部15に含まれる各解析部151〜154が解析可能な「述語」の名前と各解析部151〜154とを関連付けた表と、実行時にしか解析できない性質を持った「述語」の名前とプログラム変換部16とを関連付けた表とを管理する。「論理式」412を評価する際に、実行時にしか解析できない性質を持った「述語」が現われたら、プログラム変換部16に「述語」の名前と、その引数の値を送信する。論理式解釈部143bは、プログラム変換部16に送信した「述語」の結果を常に「真」として処理する。
プログラム変換部16は、論理式解釈部143bから「述語」の名前と、その引数の値を受信すると、変換プログラム記憶部24を検査し、変換プログラム記憶部24に変更済のアプリケーション・コードが格納されていた場合は、前述のアプリケーション・コードに、送信された「述語」とその引数の値を用いて検査用ルーチンを新しく埋め込む。
変換プログラム記憶部24にアプリケーション・コードが存在しない場合、アプリケーション情報記憶部23bから検査対象のアプリケーション・コードを取得し、前述のアプリケーション・コードを変換プログラム記憶装置24にコピーした後、送信された「述語」とその引数の値を用いて検査用ルーチンを新しく埋め込む。
ここで、プログラム変換部16の処理例を、「クラス"C"のインスタンス変数"X"の値は0から10の間である」という「述語」の例を用いて説明する。
ある変数の値が実際に取りうる値は、一般には実行時にしか分からない。従って、ルール検査システムは、「論理式」412の「述語」として、「valRangeFromTo(クラス名,変数名,最低値,最大値)」を用意する。この場合、「論理式」412中に「valRangeFromTo("C","someVal",0,10)」が現われると、論理式解釈部143bは、「valRangeFromTo」という「述語」名とその4つの引数の値をプログラム変換部16に送信する。プログラム変換部16は、指定されたクラス"C"のインスタンス変数"X"を定義する全てのコードの後にクラス"C"のインスタンス変数"X"の値が0以上10以下であることを検査する検査コードをアプリケーション・コードに埋め込み、変換プログラム記憶部24に記録する。
全ての処理が終わると、変換プログラム記憶部24に記録されている変更されたアプリケーション・コードは、永続記憶装置32に書出される。
永続記憶装置32により書出されたアプリケーション・コードを用いることにより、実行前に検査できなかったルール(規則)は、アプリケーション中にルール検査用ルーチンが埋め込まれているため、アプリケーションの実行時にルール違反を検出することができる。
以上説明したように、本実施形態によれば、実行前に検査できないルールであっても、アプリケーション中にルール検査用コードを埋め込むことにより、実行時にルール違反を検出することができる。
以上のように、本発明は、アプリケーション・プログラムに対するルール検査システム、ルール検査装置とその検査方法、ルール検査プログラムの用途に適用できる。
本発明の第1の実施形態によるルール検査システムを示すブロック図である。 本発明の第1の実施形態による解析部とプログラム解析部の詳細を示すブロック図である。 本発明の第1の実施形態によるルール定義の構成の一例を示す図である。 本発明の第1の実施形態による条件式の構成の一例を示す図である。 本発明の第1の実施形態によるルール検査システムのルール検査処理の流れを示すフローチャート図である。 本発明の第1の実施形態によるルール検査装置がルールを処理する流れを示すフローチャート図である。 本発明の第1の実施形態による論理式解釈部が論理式を評価する流れを示すフローチャート図である。 本発明の第2の実施形態によるルール検査システムを示すブロック図である。 本発明の第2の実施形態による解析部とプログラム解析部の詳細を示すブロック図である。 従来例のルール検査システムの一例を示すブロック図である。 従来例のルール検査システムの処理の流れの一例を示すフローチャート図である。
符号の説明
1、1b ルール検査装置
2、2b 記憶装置
11 ルール定義解釈部
12 字句解析部
13 構文解析部
14、14b 解釈部
15 プログラム解析部
16 プログラム変換部
21 ルール定義情報記憶部
22 条件解析情報記憶部
23、23b アプリケーション情報記憶部
24 変換プログラム記憶部
31 出力装置
32 永続記憶装置
81 ルール定義入力部
82 アプリケーション入力部
90 記録媒体
141 パターン解析部
142 解析対象特定部
143、143b 論理式解釈部
151 クラス構造解析部
152 クラス定義解析部
153 制御フロー解析部
154 データフロー解析部
400 ルール定義データ
410 条件式

Claims (12)

  1. 所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査システムにおいて、
    ルール検査装置と、
    該ルール検査装置に接続される記憶装置とを備え、
    前記ルール検査装置は、
    前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、
    前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、
    前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、
    前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備え、
    前記記憶装置は、
    前記検査対象のアプリケーションを記憶するアプリケーション情報記憶部と、
    前記条件式の解析結果を格納する条件解析情報記憶部とを備えることを特徴とするルール検査システム。
  2. 前記ルール検査装置は、
    複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備え、
    前記記憶装置は、
    前記ルール定義データの解析結果を格納するルール定義情報記憶部をさらに備えることを特徴とする請求項1に記載のルール検査システム。
  3. 前記解釈部は、
    前記条件式に含まれる前記対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、
    前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えることを特徴とする請求項1又は2に記載のルール検査システム。
  4. 前記解釈部は、
    前記条件式の対象指定部に含まれるパターンを展開するパターン解析部と、
    前記条件式に含まれる対象指定部で指定された解析対象を前記アプリケーション情報記憶部の情報を用いて計算する解析対象特定部と、
    前記条件式に含まれる論理式を前記プログラム解析部の機能を用いて評価する論理式解釈部とを備えることを特徴とする請求項1から3のいずれか1項に記載のルール検査システム。
  5. 前記プログラム解析部は、
    前記解釈部からの処理要求を受け付け、前記アプリケーション情報記憶部の情報を利用して、前記アプリケーションを構成するクラス間の構造に関する解析を行なうクラス構造解析部と、
    前記アプリケーションを構成するクラスのうち少なくとも一つのクラス中に定義された情報を解析するクラス定義解析部と、
    前記アプリケーションの制御の流れを解析する制御フロー解析部と、
    前記アプリケーションの中に現れる変数に格納されるデータの流れを解析するデータフロー解析部とを備えることを特徴とする請求項1から4のいずれか1項に記載のルール検査システム。
  6. 前記ルール検査装置は、
    ルール検査コードを挿入した新しいアプリケーションを生成するプログラム変換部をさらに備え
    前記記憶装置は、
    前記新しく生成されたアプリケーションを記憶する変換プログラム記憶部をさらに備えることを特徴とする請求項1から5のいずれか1項に記載のルール検査システム。
  7. 所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査装置において、
    前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析してトークンに分解する字句解析部と、
    前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成する構文解析部と、
    前記抽象構文木に基づき、前記対象指定部を解析し、論理式を評価する解釈部と、
    前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析するプログラム解析部とを備えることを特徴とするルール検査装置。
  8. 複数の条件式を含むルール定義データを解析し、該ルール定義データを前記字句解析部に送信し、前記解釈部から該ルール定義データ内の各条件式における論理式の評価結果を取得するルール定義解析部をさらに備えることを特徴とする請求項7に記載のルール検査装置。
  9. 所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するルール検査方法において、
    前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、
    前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、
    前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを備えることを特徴とするルール検査方法。
  10. 複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに備えることを特徴とする請求項9に記載のルール検査方法。
  11. 所定のプログラミング言語で記述された検査対象のアプリケーションにおけるプログラムコードの記述が所定の性質を満たしているか否かを予め設定されたルールに従い検査するためのルール検査プログラムにおいて、
    コンピュータに、
    前記ルールを定義するデータとして、前記プログラムコードの解析対象を指定する対象指定部と、論理演算子で接続される述語からなる論理式とから構成される条件式を含むルール定義データを入力し、該ルール定義データ内に含まれる条件式を字句解析するステップと、
    前記トークンに分解された前記条件式の構文を解析して抽象構文木を作成するステップと、
    前記抽象構文木に基づき、前記対象指定部を解析し、前記条件式の論理式中に記述される述語に応じて、前記検査対象のアプリケーションを解析して該論理式を評価するステップとを実行させることを特徴とするルール検査プログラム。
  12. 前記コンピュータに、
    複数の条件式を含むルール定義データを解析し、該ルール定義データ内の各条件式における前記論理式の評価結果を取得するステップをさらに実行させることを特徴とする請求項11に記載のルール検査プログラム。
JP2003286850A 2003-08-05 2003-08-05 ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム Pending JP2005056183A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003286850A JP2005056183A (ja) 2003-08-05 2003-08-05 ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003286850A JP2005056183A (ja) 2003-08-05 2003-08-05 ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム

Publications (1)

Publication Number Publication Date
JP2005056183A true JP2005056183A (ja) 2005-03-03

Family

ID=34366031

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003286850A Pending JP2005056183A (ja) 2003-08-05 2003-08-05 ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム

Country Status (1)

Country Link
JP (1) JP2005056183A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009524875A (ja) * 2006-01-26 2009-07-02 マイクロソフト コーポレーション バイナリコード解析
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置
CN102804147A (zh) * 2010-03-29 2012-11-28 株式会社软4软 执行abap源代码的代码检查的代码检查执行系统
WO2014115189A1 (en) 2013-01-28 2014-07-31 Nec Corporation Method and system for transforming specification scripts to program code
US9164980B2 (en) 2011-06-03 2015-10-20 Fujitsu Limited Name identification rule generating apparatus and name identification rule generating method
JP2019028723A (ja) * 2017-07-31 2019-02-21 日本電信電話株式会社 設計確認装置及び設計確認方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009524875A (ja) * 2006-01-26 2009-07-02 マイクロソフト コーポレーション バイナリコード解析
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置
CN102804147A (zh) * 2010-03-29 2012-11-28 株式会社软4软 执行abap源代码的代码检查的代码检查执行系统
JP2013522790A (ja) * 2010-03-29 2013-06-13 ソフトフォーソフト カンパニーリミテッド アバップソースコードのコード検査遂行システム
US9164980B2 (en) 2011-06-03 2015-10-20 Fujitsu Limited Name identification rule generating apparatus and name identification rule generating method
WO2014115189A1 (en) 2013-01-28 2014-07-31 Nec Corporation Method and system for transforming specification scripts to program code
JP2019028723A (ja) * 2017-07-31 2019-02-21 日本電信電話株式会社 設計確認装置及び設計確認方法

Similar Documents

Publication Publication Date Title
Pawlak et al. Spoon: A library for implementing analyses and transformations of java source code
JP4619698B2 (ja) コードセグメント作成方法及びそのシステム
US8543379B1 (en) System and method for parsing a text buffer using a graphical user interface
Patra et al. Learning to fuzz: Application-independent fuzz testing with probabilistic, generative models of input data
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
Zhai et al. C2S: translating natural language comments to formal program specifications
KR100692172B1 (ko) 종합 문자열 분석기 및 그 분석 방법
US20070113221A1 (en) XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas
JP2007052625A (ja) ソースコード脆弱性検査装置
CN106371997A (zh) 一种代码检查方法及装置
Morgan et al. A static aspect language for checking design rules
Faria et al. A toolset for conformance testing against UML sequence diagrams based on event-driven colored Petri nets
JP2008299723A (ja) プログラム検証方法、プログラム検証装置
Bossung et al. Automated data mapping specification via schema heuristics and user interaction
Samuel et al. A novel test case design technique using dynamic slicing of UML sequence diagrams
Agarwal et al. Copilot Evaluation Harness: Evaluating LLM-Guided Software Programming
Grent et al. Automatically identifying parameter constraints in complex web APIs: A case study at adyen
US8359579B2 (en) Monitoring dynamic aspect oriented applications at execution time
JP2005056183A (ja) ルール検査システム、ルール検査装置、ルール検査方法、及びルール検査プログラム
EP2972880B1 (en) Kernel functionality checker
US20060168566A1 (en) Pattern matching documentation
JP2013030017A (ja) テストプログラム生成方法、テストプログラム生成装置、及びテストプログラム生成プログラム
EP2535813B1 (en) Method and device for generating an alert during an analysis of performance of a computer application
Yusuf et al. An automatic approach to measure and visualize coupling in object-oriented programs
Zhang et al. A declarative approach for Java code instrumentation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060713

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080422

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090624

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090818

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090908