(57)【要約】  本発明の実施の一形態である試験支援装置１００は、試験対象の原本プログラムを取得する原本プログラム取得部５２と、原本プログラムに記述されたプログラムコードに基づいて構文木を生成する構文木生成部５４と、その構文木において、原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御された旨のメッセージを出力するロギング命令のノードを対応づけて設定する構文木改変部５６と、改変された構文木を参照して、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力する試験用プログラム出力部５８とを備える。
2010134123.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するプログラム取得部と、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木を生成する構文木生成部と、
前記構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定する構文木改変部と、
前記構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするためのプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するプログラム出力部と、
を備えることを特徴とする試験支援装置。
【請求項２】
前記構文木改変部は、複数のプログラミング言語のそれぞれについて制御命令を示すノードを記録したテーブルを参照して、各プログラミング言語で記述された原本プログラムから生成された構文木のそれぞれにおいて、制御命令を示すノードに対してロギング命令を示すノードを対応づけて設定することを特徴とする請求項１に記載の試験支援装置。
【請求項３】
前記試験用プログラムに所定の試験データを入力して、その試験データに応じて実行されたロギング命令により前記メッセージを出力させる試験実行部をさらに備えることを特徴とする請求項１または２に記載の試験支援装置。
【請求項４】
前記原本プログラムは、入力に対する処理結果を、所定のタグセットによる構造化文書ファイルとして出力するよう記述されたものであり、
前記ロギング命令により出力されるメッセージは、前記構造化文書ファイルにおけるコメント文であることを特徴とする請求項１から３のいずれかに記載の試験支援装置。
【請求項５】
前記原本プログラムへの入力に対する処理結果は、所定の閲覧プログラムの実行装置により表示される態様で出力され、
前記ロギング命令により出力されるメッセージは、前記閲覧プログラムの実行装置では非表示とされる態様で出力されることを特徴とする請求項１から３のいずれかに記載の試験支援装置。
【請求項６】
ユーザの権限に応じて、前記試験用プログラムの実行フローの表示を制限する実行フロー表示部をさらに備え、
前記ロギング命令は、前記メッセージに代えて、前記メッセージとは異なるデータであって、前記メッセージを一意に特定可能な識別データを出力する命令であり、
前記実行フロー表示部は、ユーザが前記試験用プログラムの実行フローを確認するとき、そのユーザが所定の権限を有する場合には、前記識別データにより特定されるメッセージを表示させることを特徴とする請求項１から５のいずれかに記載の試験支援装置。
【請求項７】
前記試験データに応じて前記試験用プログラムから出力されたメッセージを参照して、前記試験データに応じて実行されたロギング命令を特定し、前記試験用プログラムに設定されたロギング命令に占める前記実行されたロギング命令の割合を、前記原本プログラムに対する試験の網羅率として算出する網羅状況特定部と、
算出された網羅率を表示させる網羅状況表示部と、
をさらに備えることを特徴とする請求項１から６のいずれかに記載の試験支援装置。
【請求項８】
試験対象のプログラムである原本プログラムに所定の試験データが入力された際の実行フローを確認可能にするためのプログラムであって、前記原本プログラムの実行フローを制御する制御命令に対応づけて、その制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令が設定された試験用プログラムを取得するプログラム取得部と、
前記試験用プログラムに前記試験データを入力して、前記試験データに応じて実行されたロギング命令によりメッセージを出力させる試験実行部と、
前記試験用プログラムから出力されたメッセージを参照して、前記試験データに応じて実行されたロギング命令を特定し、前記試験用プログラムに設定されたロギング命令に占める前記実行されたロギング命令の割合を、前記原本プログラムに対する試験の網羅率として算出する網羅状況特定部と、
算出された網羅率を表示させる網羅状況表示部と、
を備えることを特徴とする試験支援装置。
【請求項９】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するステップと、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木を生成するステップと、
前記構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定するステップと、
前記構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするためのプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するステップと、
をコンピュータに実行させることを特徴とする試験支援方法。
【請求項１０】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得する機能と、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木を生成する機能と、
前記構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定する機能と、
前記構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするためのプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力する機能と、
をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ処理技術に関し、特に、コンピュータプログラムを試験するための技術に関する。
【背景技術】
【０００２】
コンピュータプログラムにおけるセキュリティ上の脆弱性を検出するためのテストとしてペネトレーションテストが知られている。ペネトレーションテストにおいては、既知の攻撃パターンを示すデータを試験対象のコンピュータプログラムに入力して、そのコンピュータプログラムからの出力データを検証する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２２８１７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ペネトレーションテストは、コンピュータプログラムの内部構造は考慮せずに、そのコンピュータプログラムからの出力データに着目するブラックボックステストである。したがって、試験対象のコンピュータプログラムにセキュリティ上の脆弱性が存在することは検出できるものの、内部構造はブラックボックスであるため、そのコンピュータプログラムに存在する問題の解決には時間を要することがあった。【０００５】
本発明は、本発明者の上記課題認識に基づいて完成された発明であり、その主たる目的は、コンピュータプログラムに対する試験を支援する技術を提供することである。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の試験支援装置は、所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するプログラム取得部と、プログラミング言語の文法規則にしたがって、原本プログラムに記述されたプログラムコードの各要素をノードとする構文木を生成する構文木生成部と、構文木において、原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定する構文木改変部と、構文木を参照して、所定の試験データが原本プログラムに入力された際の実行フローを確認可能にするためのプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するプログラム出力部と、を備える。【０００７】
本発明の別の態様もまた、試験支援装置である。この装置は、試験対象のプログラムである原本プログラムに所定の試験データが入力された際の実行フローを確認可能にするためのプログラムであって、原本プログラムの実行フローを制御する制御命令に対応づけて、その制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令が設定された試験用プログラムを取得するプログラム取得部と、試験用プログラムに試験データを入力して、試験データに応じて実行されたロギング命令によりメッセージを出力させる試験実行部と、試験用プログラムから出力されたメッセージを参照して、試験データに応じて実行されたロギング命令を特定し、試験用プログラムに設定されたロギング命令に占める実行されたロギング命令の割合を、原本プログラムに対する試験の網羅率として算出する網羅状況特定部と、算出された網羅率を表示させる網羅状況表示部と、を備える。【０００８】
本発明のさらに別の態様は、試験支援方法である。この方法は、所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するステップと、プログラミング言語の文法規則にしたがって、原本プログラムに記述されたプログラムコードの各要素をノードとする構文木を生成するステップと、構文木において、原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定するステップと、構文木を参照して、所定の試験データが原本プログラムに入力された際の実行フローを確認可能にするためのプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するステップと、をコンピュータに実行させる。【０００９】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１０】
本発明によれば、コンピュータプログラムに対する試験を支援できる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態である試験支援装置の機能構成を示すブロック図である。
【図２】制御命令ノードの定義情報の構造を示す図である。
【図３（ａ）】ロギング命令一覧情報の構造を示す図である。
【図３（ｂ）】ロギング命令一覧情報の構造を示す図である。
【図４】試験支援装置の動作を示すフローチャートである。
【図５（ａ）】原本プログラムのプログラムコードの例を示す図である。
【図５（ｂ）】原本プログラムのプログラムコードの例を示す図である。
【図６（ａ）】図５（ａ）の原本プログラムから生成された原本構文木の一例を示す図である。
【図６（ｂ）】図５（ｂ）の原本プログラムから生成された原本構文木の一例を示す図である。
【図７（ａ）】図６（ａ）の原本構文木が改変された改変構文木を示す図である。
【図７（ｂ）】図６（ｂ）の原本構文木が改変された改変構文木を示す図である。
【図８（ａ）】試験用プログラムのプログラムコードの例を示す図である。
【図８（ｂ）】試験用プログラムのプログラムコードの例を示す図である。
【図９】試験支援装置の動作を示すフローチャートである。
【図１０】ＨＴＭＬファイルに出力された試験用プログラムの出力データを示す図である。
【図１１】ＨＴＭＬファイルに出力された試験用プログラムの出力データを示す図である。
【図１２】試験支援装置の動作を示すフローチャートである。
【図１３】網羅状況表示部による網羅状況の表示イメージを示す図である。
【発明を実施するための形態】
【００１２】
本実施の形態では、ペネトレーションテストの対象となるオリジナルのプログラム（以下、適宜「原本プログラム」とも呼ぶ。）について、ペネトレーションテストにおけるプログラムコードの実行フローを可視化する試験支援装置を提案する。この試験支援装置は、原本プログラムにおけるプログラムコードに記述された命令のうち、原本プログラムの実行フローを制御する制御命令の実行に伴って、その実行フローをユーザに通知するためのメッセージを出力させるよう原本プログラムを改変する。このメッセージを、以下、「実行フローメッセージ」と呼ぶこととする。
【００１３】
具体的には、本実施の形態の試験支援装置は、原本プログラムに記述されたプログラムコードの各要素をノードとする抽象構文木を生成する。そして、抽象構文木において、制御命令を示すノード（以下、適宜「制御命令ノード」とも呼ぶ。）に対して、その制御命令を特定可能な実行フローメッセージを出力するロギング命令を示すノード（以下、適宜「ロギング命令ノード」とも呼ぶ。）を対応づけて設定する。そして、試験支援装置は、ロギング命令ノードを追加した抽象構文木から、原本プログラムが改変されたプログラム（以下、適宜「試験用プログラム」とも呼ぶ。）を生成する。この試験用プログラムでは、制御命令にロギング命令が対応づけられることになる。
【００１４】
本実施の形態の試験支援装置のように、原本プログラムの改変のために、そのプログラムコードそのものを解析するのではなく、原本プログラムに対応する抽象構文木を解析することにより、制御命令に対応づけてロギング命令を設定することが容易になる。例えば、同じ条件分岐処理であっても、以下の３例のように、プログラムコードとしては様々な記述パターンが存在する。
第１の記述パターン：
Ｉｆ（ｓｔａｔｕｓ）ｏｐｅｒａｔｉｏｎ；
第２の記述パターン：
Ｉｆ（ｓｔａｔｕｓ）｛
ｏｐｅｒａｔｉｏｎ；
｝
第３の記述パターン：
Ｉｆ（ｓｔａｔｕｓ）
｛
ｏｐｅｒａｔｉｏｎ；
｝
【００１５】
プログラムコードそのものを解析する場合には、上記３例それぞれのパターンに対応する解析処理が必要である。これに対し、抽象構文木においてはプログラムコードの書式レベルの差異は吸収されて同じノード構成となるため、制御命令ノードに対してロギング命令ノードを追加する処理を共通化できる。言い換えれば、プログラムコードの記述パターンに依存しない共通ロジックでの処理が可能となる。その結果、試験支援装置を実現するためのプログラムコードについて、そのコード量を低減できるとともに容易なメンテナンスを実現できる。
【００１６】
さらに、本実施の形態の試験支援装置は、生成した試験用プログラムに対してペネトレーションテストを実行する。そして、このペネトレーションテストにおいて実行されたロギング命令により、実行フローを制御した制御命令を特定可能な実行フローメッセージを出力させる。本実施の形態の試験支援装置によれば、原本プログラムに対するペネトレーションテスト実行時の実行フローが可視化され、原本プログラムに存在する問題箇所の特定が容易になり、問題の迅速な解決を支援できる。
【００１７】
図１は、本発明の実施の形態である試験支援装置１００の機能構成を示すブロック図である。試験支援装置１００は、記憶部１０と、ＵＩ部３０と、データ処理部４０とを備える。記憶部１０は、各種データを保持するための記憶領域である。ＵＩ部３０は、プログラムの開発者や試験担当者等、ユーザに対するユーザインタフェース処理を担当する。データ処理部４０は、記憶部１０に保持されたデータや、ＵＩ部３０において取得されたデータに基づいて各種のデータ処理を実行する。データ処理部４０は、記憶部１０とＵＩ部３０との間のインタフェースの役割も果たす。
【００１８】
本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのＣＰＵをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。例えば、メモリや補助記憶装置は、記憶部１０の処理を実行してもよい。また、ＣＰＵは、ＵＩ部３０やデータ処理部４０それぞれの処理内容が実装されたプログラムモジュールをメモリに読み込み、それぞれのプログラムモジュールにしたがって、ＵＩ部３０やデータ処理部４０の各種処理を実行してもよい。
【００１９】
記憶部１０：
記憶部１０は、原本プログラム保持部１２と、ノード定義保持部１４と、ロギング命令保持部１６と、試験用プログラム保持部１８と、入力データ保持部２０と、出力データ保持部２２とを有する。原本プログラム保持部１２は、原本プログラムのソースコードを保持する。原本プログラムを記述するプログラミング言語には制限はなく、例えばＰＨＰ・ＪＡＶＡ（登録商標）等であってもよい。
【００２０】
ノード定義保持部１４は、制御命令ノードの定義情報を保持する。具体的には、ＰＨＰやＪＡＶＡ等、互いに異なる複数のプログラミング言語のそれぞれで記述された原本プログラムから生成される抽象構造木について、各抽象構文木において存在しうる制御命令ノードの定義情報を保持する。この定義情報の具体例は、図２において後述する。
【００２１】
ロギング命令保持部１６は、試験用プログラムにおいて、複数の制御命令のそれぞれに対応づけて設定される複数のロギング命令について、各ロギング命令の属性情報をロギング命令一覧情報として保持する。ロギング命令一覧情報の具体例は、図３において後述する。試験用プログラム保持部１８は、原本プログラムが改変された試験用プログラムを保持する。
【００２２】
入力データ保持部２０は、原本プログラムに対してペネトレーションテストを実行するための試験データを保持する。この試験データは、典型的には、プログラムの脆弱性の有無を確認するための既知の攻撃パターンが設定されたデータである。例えば、クロスサイトスクリプティングに対する脆弱性の有無を検証するための、スクリプト言語で記述されたプログラムコードを含む試験データでもよい。また、ＳＱＬ（Structured Query Language）インジェクションに対する脆弱性の有無を検証するための文字列を含む試験データでもよい。出力データ保持部２２は、ペネトレーションテストにおいて試験用プログラムから出力された出力データを保持する。
【００２３】
ＵＩ部３０：
ＵＩ部３０は、指示受付部３２と、実行フロー表示部３４と、網羅状況表示部３６とを有する。指示受付部３２は、各種入力装置を介して、ユーザにより入力された各種指示を受け付ける。実行フロー表示部３４は、ペネトレーションテストにおける試験用プログラムからの出力データをディスプレイに表示させる。
【００２４】
網羅状況表示部３６は、原本プログラムのプログラムコード全体に占める、ペネトレーションテストにおいて原本プログラムのプログラムコードが実行された割合（以下、適宜「網羅率」と呼ぶ。）をディスプレイに表示させる。また網羅状況表示部３６は、試験用プログラムに設定されたロギング命令の一覧を表示する。その際に、ペネトレーションテストにおいて未実行のロギング命令については、実行済のロギング命令よりもユーザから視認されやすい態様でディスプレイ上に表示する。例えば、未実行のロギング命令を、実行済のロギング命令よりも大きな文字サイズや、より視認させやすい表示色等で表示させてもよい。
【００２５】
データ処理部４０：
データ処理部４０は、原本プログラムを試験用プログラムへと改変する改変部５０と、試験用プログラムに対してペネトレーションテストを実行する試験部６０とを有する。改変部５０は、原本プログラム取得部５２と、構文木生成部５４と、構文木改変部５６と、試験用プログラム出力部５８とを含む。また試験部６０は、試験用プログラム取得部６２と、試験実行部６４と、網羅状況特定部６６とを含む。
【００２６】
原本プログラム取得部５２は、原本プログラム保持部１２から原本プログラムのデータをメモリに読み込む。構文木生成部５４は、原本プログラムに記述されたプログラムコードに対して、使用されているプログラミング言語の文法規則にしたがってあらかじめ定められた方法により字句解析および構文解析を実行する。そして、原本プログラムに基づく抽象構文木（以下、適宜「原本構文木」と呼ぶ。）のデータをメモリに生成する。
【００２７】
構文木生成部５４は、ＬＲ構文解析法等の既知の手法により原本構文木を作成してもよく、公知の構文解析関数を呼び出すことにより原本構文木を作成してもよい。後者の例として、Ｅｃｌｉｐｓｅ（登録商標）が提供するＪＤＴ（Java Development Tools）のライブラリ関数に対して、ＪＡＶＡで記述された原本プログラムのデータを渡すことにより、その原本プログラムに対応する抽象構文木を生成してもよい。同様に、Ｅｃｌｉｐｓｅが提供するＰＤＴ（PHP Development Tools）のライブラリ関数を呼び出すことにより、ＰＨＰで記述された原本プログラムに対応する抽象構文木を生成してもよい。
【００２８】
構文木改変部５６は、ノード定義保持部１４に記憶された制御命令ノードの定義情報を参照して、原本構文木のノードのうち原本プログラムのプログラミング言語に対応した制御命令ノードを識別する。この制御命令ノードには、例えば、メソッド宣言、メソッド呼び出し命令、ｉｆ・ｅｌｓｅ・ｓｗｉｔｃｈ等の条件分岐命令、ｆｏｒ・ｗｈｉｌｅ等の繰り返し命令、ｔｒｙ・ｃａｔｃｈ等の例外処理命令を示すノードが含まれる。
【００２９】
構文木改変部５６は、制御命令ノードに対応づけて、典型的には原本構文木における制御命令ノード直下のノードとして、ロギング命令ノードを設定することにより、原本構文木を改変した抽象構文木（以下、適宜「改変構文木」と呼ぶ。）のデータを設定する。構文木改変部５６は、改変構文木を設定する際に、原本構文木における制御命令ノードの識別情報と、改変構文木におけるロギング命令ノードの識別情報とを対応づけてロギング命令保持部１６に記憶させる。
【００３０】
なお構文木生成部５４は、原本構文木のデータとして、原本構文木の各ノードをルートノード配下の子ノードとして有するＤＯＭ（Document Object Model）ツリーのオブジェクトをメモリ上に生成してもよい。このとき、それぞれの子ノードはその属性（例えばクラス型等）として制御命令の種類を示す情報を有してもよい。構文木改変部５６は、原本構文木を示すＤＯＭツリーをトラバースして制御命令ノードを検出し、検出した制御命令ノードに対応づけるべきロギング命令ノードを新たな子ノードとしてこのＤＯＭツリーに設定してもよい。この場合、ロギング命令ノードが付加されたＤＯＭツリーが改変構文木のデータとなる。
【００３１】
試験用プログラム出力部５８は、改変構文木のデータおよびロギング命令保持部１６に記憶されたロギング命令一覧情報にしたがって、試験用プログラムを生成して試験用プログラム保持部１８に記憶させる。この試験用プログラムは、原本プログラムにおける複数の制御命令それぞれに対応づけてロギング命令が設定されたソースコードであってもよく、そのソースコードに対応する実行可能形式のバイナリコードであってもよい。
【００３２】
ここで試験用プログラム出力部５８における試験用プログラムの設定処理を具体的に説明する。まず、試験用プログラム出力部５８は、ロギング命令一覧情報として記憶された制御命令ノードとロギング命令ノードとの対応関係にしたがって、ロギング命令で出力させるべき実行フローメッセージを決定する。具体的には、実行フローメッセージとして、ロギング命令が対応する制御命令の識別情報、例えば原本プログラムにおける制御命令の識別名称や位置情報等を設定する。
【００３３】
次に、試験用プログラム出力部５８は、その実行フローメッセージを所定の変換関数に入力することで、その実行フローメッセージとは異なり、その実行フローメッセージを一意に特定するための変換後データ（以下、適宜「メッセージ識別データ」とも呼ぶ。）を取得する。例えば、実行フローメッセージを所定のハッシュ関数に入力して、その実行フローメッセージから一意に生成されるハッシュ値をメッセージ識別データとして取得してもよい。試験用プログラム出力部５８は、実行フローメッセージと、その実行フローメッセージに対応するメッセージ識別データとを対応づけて、ロギング命令保持部１６にさらに記憶させる。
【００３４】
次に、試験用プログラム出力部５８は、原本プログラムのプログラミング言語に対応したロギング命令を決定する。このロギング命令は、標準出力や所定のログファイルに引数データを出力する命令であってもよく、所定のデータベースに引数データを記録する命令であってもよい。例えば、原本プログラムがＰＨＰで記述されている場合には「ｅｃｈｏ」命令をロギング命令としてもよい。試験用プログラム出力部５８は、実行コード通知メッセージそのものではなく、実行フローメッセージに対応するメッセージ識別データをロギング命令により出力させるために、ロギング命令の引数としてメッセージ識別データを設定する。
【００３５】
最後に、試験用プログラム出力部５８は、改変構文木を参照して、原本プログラムのプログラムコードに対してロギング命令が適宜挿入された試験用プログラムを生成する。試験用プログラムのソースコードを生成する場合には、改変構文木の各ノードに対応する所定のプログラムコードを逐次設定することにより、改変構文木に対応するソースコードを生成してもよい。また、構文木生成部５４と同様に、既知のライブラリ関数を呼び出すことで、抽象構文木のデータからソースコードを生成してもよい。実行形式のバイナリコードを生成する場合には、通常のコンパイル処理と同様に、改変構文木に対して意味解析やリンク処理等を順次実行してバイナリコードを出力すればよい。
【００３６】
試験用プログラム取得部６２は、試験用プログラム保持部１８から試験用プログラムのデータをメモリに読み込む。試験実行部６４は、試験用プログラムに対するペネトレーションテストを実行する。具体的には、入力データ保持部２０に記憶された試験データを取得して試験用プログラムに入力することで試験用プログラムを動作させ、試験用プログラムからの出力データを出力データ保持部２２に記憶させる。この出力データには、試験用プログラムによる試験データの処理結果や、制御命令に対応づけて設定されたロギング命令からのメッセージ識別データが含まれる。
【００３７】
網羅状況特定部６６は、ロギング命令保持部１６に記録されたロギング命令一覧情報と、出力データ保持部２２に記録されたメッセージ識別データとを参照して、ペネトレーションテストにおいて実行されたロギング命令を特定する。網羅状況特定部６６は、ロギング命令一覧情報におけるロギング命令の総数に占める、出力されたメッセージ識別データ数の割合を、原本プログラムに対するペネトレーションテストの網羅率として算出する。なお、出力されたメッセージ識別データ数を算出する際、同一のメッセージ識別データについては、複数回出力されている場合にも１とカウントする。
【００３８】
図２は、制御命令ノードの定義情報の構造を示す。言語欄には、プログラミング言語の種類が記録される。制御命令欄には、各プログラミング言語の抽象構文木に存在しうる複数種類のノードのうち制御命令ノードの識別情報が記録される。すなわち、構文木改変部５６は、原本プログラムのプログラミング言語に対応する制御命令欄を参照し、その制御命令欄に記録された制御命令ノードを原本構文木において検出すると、その制御命令ノードの直後に所定のロギング命令ノードを挿入する。
【００３９】
図３（ａ）および図３（ｂ）は、ロギング命令一覧情報の構造を示す。ロギング命令ＩＤ欄には、試験用プログラムに挿入したロギング命令を一意に特定するための識別情報が記録される。ロギング命令ノード欄には、改変構文木におけるロギング命令ノードの識別情報が記録される。同図においては、「ロギング命令ノードの識別名  ：  試験用プログラムでの行番号」の形式で記録されている。制御命令ノード欄には、改変構文木においてロギング命令ノードが設定された制御命令ノードの、原本構文木における識別情報が記録される。同図においては、「制御命令ノードの識別名  ：  原本プログラムでの行番号」の形式で記録されている。また、実行フローメッセージ欄には実行フローメッセージが記録され、メッセージ識別データ欄にはメッセージ識別データが記録される。
【００４０】
以上の構成による動作を以下説明する。
図４は、試験支援装置１００の動作を示すフローチャートである。指示受付部３２が試験用プログラムの作成指示をユーザから受け付けると、原本プログラム取得部５２は原本プログラムのデータを原本プログラム保持部１２から取得する（Ｓ１０）。図５（ａ）および図５（ｂ）は、原本プログラムのプログラムコードの例を示す。図５（ａ）は、ＪＡＶＡで記述された原本プログラムを示し、制御命令１０２ａ〜１０２ｇを含む。また図５（ｂ）は、ＰＨＰで記述された原本プログラムを示し、制御命令１０２ｈ〜１０２ｋを含む。図４に戻る。
【００４１】
構文木生成部５４は、原本プログラムに対応する原本構文木のデータをメモリ内に生成する（Ｓ１２）。図６（ａ）は、図５（ａ）の原本プログラムから生成された原本構文木の一例を示す。図６（ａ）における制御命令ノード１０４ａ〜１０４ｇは、図５（ａ）における制御命令１０２ａ〜１０２ｇに対応する。同図では、制御命令ノードのそれぞれを、「制御ノードの識別名  ：  原本プログラムでの行番号」の形式で示している。以降の抽象構文木における各ノードについても同様の形式で示すこととする。図６（ｂ）は、図５（ｂ）の原本プログラムから生成された原本構文木の一例を示す。図６（ｂ）における制御命令ノード１０４ｈ〜１０４ｋは、図５（ｂ）における制御命令１０２ｈ〜１０２ｋに対応する。図４に戻る。
【００４２】
構文木改変部５６は、原本構文木に存在する制御命令ノードを検出して、その制御命令ノードにロギング命令ノードを対応づけて設定することにより、原本構文木が改変された改変構文木を設定する（Ｓ１４）。そして、構文木改変部５６は、原本構文木における制御命令ノードの識別情報と、改変構文木においてその制御命令ノードに対し設定したロギング命令ノードの識別情報とを対応づけてロギング命令保持部１６に記憶させる（Ｓ１６）。本実施の形態では、ロギング命令一覧情報のロギング命令ＩＤ欄と、ロギング命令ノード欄と、制御命令ノード欄とを設定する。
【００４３】
図７（ａ）は、図６（ａ）の原本構文木が改変された改変構文木を示す。同図の改変構文木においては、図６（ａ）における制御命令ノード１０４ａ〜１０４ｇのそれぞれに対して、ロギング命令ノード１０６ａ〜１０６ｇのそれぞれが対応づけられている。また、図３（ａ）におけるロギング命令ＩＤ「００１」のロギング命令ノード欄、制御命令ノード欄は、制御命令ノード１０４ａに対応づけてロギング命令ノード１０６ａを設定する際に記録されたデータを示している。すなわち、そのロギング命令ノード欄は改変構文木におけるロギング命令ノード１０６ａの識別情報を示し、制御命令ノード欄は原本構文木における制御命令ノード１０４ａの識別情報を示している。同様に、図３（ａ）におけるロギング命令ＩＤ「００２」〜「００７」の各レコードは、制御命令ノード１０４ｂ〜１０４ｇのそれぞれに対応づけてロギング命令ノード１０６ｂ〜１０６ｇのそれぞれを設定する際に記録されたデータを示している。
【００４４】
図７（ｂ）は、図６（ｂ）の原本構文木が改変された改変構文木を示す。同図の改変構文木においては、図６（ｂ）における制御命令ノード１０４ｈ〜１０４ｋのそれぞれに対して、ロギング命令ノード１０６ｈ〜１０６ｋのそれぞれが対応づけられている。また、図３（ｂ）におけるロギング命令ＩＤ「００１」のロギング命令ノード欄、制御命令ノード欄は、制御命令ノード１０４ｈに対応づけてロギング命令ノード１０６ｈを設定する際に記録されたデータを示している。すなわち、そのロギング命令ノード欄は改変構文木におけるロギング命令ノード１０６ｈの識別情報を示し、制御命令ノード欄は原本構文木における制御命令ノード１０４ｈの識別情報を示している。同様に、図３（ｂ）におけるロギング命令ＩＤ「００２」〜「００４」の各レコードは、制御命令ノード１０４ｉ〜１０４ｋのそれぞれに対応づけてロギング命令ノード１０６ｉ〜１０６ｋのそれぞれを設定する際に記録されたデータを示している。図４に戻る。
【００４５】
試験用プログラム出力部５８は、ロギング命令一覧情報の各レコードを参照して、ロギング命令にて出力させる実行フローメッセージを決定し、その実行フローメッセージに対応するメッセージ識別データを決定する。そして、実行フローメッセージおよびメッセージ識別データをロギング命令一覧情報の各レコードに追加して記録する（Ｓ１８）。試験用プログラム出力部５８は、改変構文木とロギング命令一覧情報とにしたがって、メッセージ識別データを出力するロギング命令が追加され、原本プログラムが改変された試験用プログラムを試験用プログラム保持部１８に記憶させる（Ｓ２０）。
【００４６】
図３（ａ）および図３（ｂ）における実行フローメッセージ欄は、「テストログの固定文字列  ｜  ロギング命令ＩＤ  ｜  原本プログラムファイル名  ｜  制御命令の識別名  ｜  原本プログラムにおける制御命令の行番号」の形式の実行フローメッセージを示している。このうち「制御命令の識別名  ｜  原本プログラムにおける制御命令の行番号」には、制御命令ノード欄の記録データが設定される。また、図３（ａ）および図３（ｂ）におけるメッセージ識別データ欄は、実行フローメッセージを所定のハッシュ関数に入力して得られたハッシュ値を示している。
【００４７】
図８（ａ）は、図３（ａ）の原本プログラムに対応する試験用プログラムの例を示す。同図は、図７（ａ）の改変構文木および図３（ａ）のロギング命令一覧情報にしたがって生成されたプログラムコードを示している。同図では、原本プログラムに記述された制御命令１０２ａ〜１０２ｇのそれぞれに対応づけてロギング命令１０８ａ〜１０８ｇのそれぞれが設定されている。図８（ｂ）は、図３（ｂ）の原本プログラムに対応する試験用プログラムの例を示す。同図は、図７（ｂ）の改変構文木および図３（ｂ）のロギング命令一覧情報にしたがって生成されたプログラムコードを示している。同図では、原本プログラムに記述された制御命令１０２ｈ〜１０２ｋのそれぞれに対応づけてロギング命令１０８ｈ〜１０８ｋのそれぞれが設定されている。
【００４８】
試験用プログラム出力部５８は、ロギング命令一覧情報に設定されたロギング命令ノードを改変構文木にて検出すると、そのメッセージ識別データを所定のロギング命令の引数として設定することで、試験用プログラムを生成する。図８（ａ）および図８（ｂ）におけるロギング命令「ｉｎｓｅｒｔ」は、ユーザにより定義された関数であり、所定のファイルやデータベースに対して、引数で指定された文字列データを出力する。
【００４９】
本実施の形態のロギング命令は、原本プログラムにおける処理結果の出力先に、引数で指定された文字列データを出力する命令である。これにより、原本プログラムの当初記載のプログラムコードにより出力された処理結果と並列して、メッセージ識別データが出力され、処理結果と実行フローとの対応づけが容易になる。また、本実施の形態のロギング命令は、引数で指定されたメッセージ識別データを、原本プログラムにおける処理結果を閲覧するソフトウェアにおいて通常非表示とされる態様で出力する命令である。例えば、原本プログラムにおける処理結果の出力先がＨＴＭＬファイルやＸＭＬファイル等の構造化文書である場合、引数で指定された文字列データをその構造化文書におけるコメント文として出力する。
【００５０】
図９は、試験支援装置１００の動作を示すフローチャートである。指示受付部３２は、試験用プログラムに対するペネトレーションテストの開始指示をユーザから受け付け、試験用プログラム取得部６２は、試験用プログラムのデータを試験用プログラム保持部１８から読み込む（Ｓ３０）。試験実行部６４は、入力データ保持部２０に記憶された試験データを読み込み、試験用プログラムに試験データを入力することにより試験用プログラムを動作させてペネトレーションテストを実行する（Ｓ３２）。なお、試験用プログラムの実行に際し、試験用プログラムがソースコードである場合には、必要に応じて適宜実行可能形式のバイナリコードに変換する。
【００５１】
続いて、試験実行部６４は、試験用プログラムの動作に伴う試験用プログラムからの出力データを出力データ保持部２２に記憶させる（Ｓ３４）。この出力データには、ロギング命令により出力されたメッセージ識別データが含まれる。試験実行部６４は、試験用プログラムからの出力データを、構造化文書のファイル内の文字データとして記憶させてもよく、データベースにおける所定テーブルのレコードとして記憶させてもよい。
【００５２】
指示受付部３２は、試験用プログラムからの出力データの表示要求をユーザから受け付ける（Ｓ３６）。実行フローメッセージの参照権限がないユーザからの表示要求であれば（Ｓ３８のＮ）、実行フロー表示部３４は、試験用プログラムからの出力データをそのまま表示させる。図１０は、ＨＴＭＬファイルに出力された試験用プログラムの出力データを示す。同図は、ペネトレーションテストにおいて、図８（ｂ）の制御命令１０２ｈが示す「theMethod」メソッドが呼び出されたときの出力データを示している。同図では、メッセージ識別データがそのまま表示されているため、ペネトレーションテストにおける原本プログラムの実行フローを把握することは困難である。図９に戻る。
【００５３】
実行フローメッセージの参照権限を有するユーザからの表示要求であれば（Ｓ３８のＹ）、実行フロー表示部３４は、ロギング命令保持部１６のロギング命令一覧情報を参照して、試験用プログラムからの出力データであるメッセージ識別データを、そのメッセージ識別データに対応づけられた実行フローメッセージに変換して表示させる（Ｓ４０）。図１１は、ＨＴＭＬファイルに出力された試験用プログラムの出力データを示す。同図では、図１０のメッセージ識別データが、対応する実行フローメッセージに変換されているため、ペネトレーションテストにおける原本プログラムの実行フローを容易に確認できる。なお、ユーザが参照権限を有するか否かは公知のユーザ認証方法により判定されてよく、例えばユーザ端末のＩＤやログイン時のユーザ入力データにより判定してもよい。
【００５４】
図１２は、試験支援装置１００の動作を示すフローチャートである。同図のＳ３０〜Ｓ３４は、図９のＳ３０〜Ｓ３４と同様であるため説明を省略する。指示受付部３２は、原本プログラムに対するテストの網羅状況の表示要求をユーザから受け付ける。網羅状況特定部６６は、出力データ保持部２２に記憶されたメッセージ識別データを参照して、テストにより実行済のロギング命令を特定する（Ｓ５０）。すなわち、出力データ保持部２２に記憶されたメッセージ識別データに対応するロギング命令は、テストにより実行されたロギング命令であると特定できる。網羅状況特定部６６は、ロギング命令保持部１６のロギング命令一覧情報を参照して、ロギング命令の総数に占める実行済のロギング命令数を網羅率として算出する（Ｓ５２）。網羅状況表示部３６は、網羅状況特定部６６において算出された網羅率をディスプレイに表示させる（Ｓ５４）。また網羅状況表示部３６は、ロギング命令を一覧表示させる際、テストにおいて未実行のロギング命令については実行済のロギング命令よりも強調表示させる（Ｓ５６）。
【００５５】
図１３は、網羅状況表示部３６による網羅状況の表示イメージを示す。なお、同図の網羅状況は、図５（ａ）の原本プログラムに対するテストの網羅状況を示している。この例では、ロギング命令の総数が７、実行済のロギング命令数が５であるため、コード網羅率が７１％と表示されている。また、実行フローメッセージの一覧表示においては、未実行のロギング命令において出力されるメッセージが、ボールド書体かつ他のメッセージよりも大きな文字サイズで強調表示されている。この結果を確認したユーザは、網羅率を向上させるために、図５（ａ）の原本プログラムにおける１５行目の条件判定がｔｒｕｅとなるように、試験データ等を調整すべきことを認識できる。
【００５６】
本実施の形態の試験支援装置１００によれば、原本プログラムに対するペネトレーションテストを実行すべき際に、制御命令に対応づけてロギング命令を設定した試験用プログラムに対してペネトレーションテストが実行される。これにより、ペネトレーションテスト実行時の原本プログラムの実行フローをユーザが確認可能になる。ペネトレーションテストにおいて問題が検出された場合には、原本プログラムの実行フロー該当箇所を参照することで問題箇所を迅速に特定できる。また、ロギング命令では、試験用プログラムにおける制御命令の記述位置ではなく、原本プログラムにおける制御命令の記述位置が出力される。これにより、原本プログラムに存在する問題箇所を容易に特定しやすくなる。ユーザによる改修対象となるのは原本プログラムであるため、ユーザによる改修作業を一層支援できることになる。また、原本プログラムに記載されたプログラムコードそのものではなく、原本プログラムに対応する抽象構文木が改変されて試験用プログラムが生成される。これにより、原本プログラムの記述スタイルに依存することなく、制御命令を容易かつ正確に検出可能となり、ロギング命令の設定を容易かつ正確に実現できる。
【００５７】
また試験支援装置１００によれば、複数のプログラミング言語のそれぞれについて制御命令ノードの定義を記録したテーブルを参照して、その定義に合致する制御命令ノードが検出される。原本プログラムを記述したプログラミング言語に応じた定義を参照することにより、プログラミング言語に依存しない共通のロジックにて制御命令ノードを検出でき、その制御命令ノードに対応づけてロギング命令ノードを設定できる。
【００５８】
さらに試験支援装置１００によれば、ペネトレーションテストにおける試験用プログラムの処理結果は構造化文書のデータとして出力され、ロギング命令による出力データはその構造化文書におけるコメント文として出力される。言い換えれば、構造化文書の閲覧用プログラムにおいて、通常非表示とされる態様で出力される。これにより、ロギング命令による出力データによって、試験用プログラムの処理結果の閲覧が困難になることを回避できる。例えば、試験用プログラムの処理結果がＨＴＭＬファイルのデータとして出力される場合、ロギング命令による出力データをそのまま表示させると、ウェブブラウザでの表示上問題になる場合がある。しかし、コメント文として出力されるため、ウェブブラウザでは試験用プログラムの処理結果を問題なく表示させることができる。かつ、ＨＴＭＬファイルのソースデータを参照すればロギング命令によるメッセージも参照でき、実行フローを容易に特定できる。
【００５９】
さらにまた試験支援装置１００によれば、ロギング命令による出力データとして、実行フローメッセージそのものに代えてメッセージ識別データが出力される。そして、ロギング命令による出力データを権限のあるユーザが参照する際には、メッセージ識別データが実行フローメッセージに変換されて表示される。これにより、権限のないユーザからは実行フローメッセージを隠蔽することができ、原本プログラムの内部構造等の情報漏洩を防止できる。
【００６０】
さらにまた試験支援装置１００によれば、ペネトレーションテストにおけるプログラムコードの実行割合を示す網羅率をユーザに提供できる。試験支援装置１００では、抽象構文木を介して、複数の制御命令のそれぞれに対応づけてロギング命令が設定されるため、原本プログラムの規模や、原本プログラムの書式に依存することなく、高い精度の網羅率を容易に算出できる。
【００６１】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６２】
上述した実施の形態においては、１つの試験支援装置１００において、改変部５０および試験部６０の両方が備えられた。変形例においては、改変部５０と試験部６０とは、互いに異なる複数の装置に分散して備えられてもよい。言い換えれば、第１の装置において生成された試験用プログラムのデータを第１の装置とは異なる第２の装置が読み込んで、第２の装置においてペネトレーションテスト、およびテスト結果の表示等が行われてもよい。
【００６３】
また、試験支援装置１００の各機能ブロックを実現するプログラムモジュールは、ＩＤＥ（Integrated Development Environment）等、他のソフトウェアプログラムに対するプラグインとして実装されてもよい。例えば、Ｅｃｌｉｐｓｅに対するプラグインとして実装され、ユーザはこのプラグインをＥｃｌｉｐｓｅにアドオンすることで、試験用プログラムの生成およびペネトレーションテストを実行してもよい。これにより、ユーザはＥｃｌｉｐｓｅにおいてプログラムコードをコーディングした後、そのプログラムコードに対するペネトレーションテストをシームレスに実行できる。
【００６４】
上述した実施の形態においては、本発明の技術思想をペネトレーションテストに適用した例を示した。しかし、本発明の技術思想はペネトレーションテストのみならずコンピュータプログラムのテスト全般に適用可能であり、その場合にも、実施の形態に記載した各効果を奏することは当業者には理解されるところである。
【００６５】
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【符号の説明】
【００６６】
１２  原本プログラム保持部、  １４  ノード定義保持部、  １６  ロギング命令保持部、  １８  試験用プログラム保持部、  ２０  入力データ保持部、  ２２  出力データ保持部、  ３２  指示受付部、  ３４  実行フロー表示部、  ３６  網羅状況表示部、  ５２  原本プログラム取得部、  ５４  構文木生成部、  ５６  構文木改変部、  ５８  試験用プログラム出力部、  ６２  試験用プログラム取得部、  ６４  試験実行部、  ６６  網羅状況特定部、  １００  試験支援装置。
【産業上の利用可能性】
【００６７】
本発明は、コンピュータプログラムに対する試験を支援するための装置に適用できる。
【図１】
2010134123.tif 000003
【図２】
2010134123.tif 000004
【図３（ａ）】
2010134123.tif 000005
【図３（ｂ）】
2010134123.tif 000006
【図４】
2010134123.tif 000007
【図５（ａ）】
2010134123.tif 000008
【図５（ｂ）】
2010134123.tif 000009
【図６（ａ）】
2010134123.tif 000010
【図６（ｂ）】
2010134123.tif 000011
【図７（ａ）】
2010134123.tif 000012
【図７（ｂ）】
2010134123.tif 000013
【図８（ａ）】
2010134123.tif 000014
【図８（ｂ）】
2010134123.tif 000015
【図９】
2010134123.tif 000016
【図１０】
2010134123.tif 000017
【図１１】
2010134123.tif 000018
【図１２】
2010134123.tif 000019
【図１３】
2010134123.tif 000020
【手続補正書】
【提出日】平成22年1月29日(2010.1.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するプログラム取得部と、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木であって、前記原本プログラムの記述パターンに依存しない抽象構文木を生成する構文木生成部と、
前記抽象構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定することにより、前記抽象構文木を改変する構文木改変部と、
改変された抽象構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするための前記原本プログラムと同一のプログラミング言語で記述されたプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するプログラム出力部と、
を備えることを特徴とする試験支援装置。
【請求項２】
前記構文木改変部は、前記試験用プログラムではなく前記原本プログラムにおいて前記制御命令が記述された位置を示すメッセージを出力するロギング命令のノードを設定することを特徴とする請求項１に記載の試験支援装置。
【請求項３】
前記構文木改変部は、複数のプログラミング言語のそれぞれについて制御命令を示すノードを記録したテーブルを参照して、各プログラミング言語で記述された原本プログラムから生成された構文木のそれぞれにおいて、制御命令を示すノードに対してロギング命令を示すノードを対応づけて設定することを特徴とする請求項１または２に記載の試験支援装置。
【請求項４】
前記試験用プログラムに所定の試験データを入力して、その試験データに応じて実行されたロギング命令により前記メッセージを出力させる試験実行部をさらに備えることを特徴とする請求項１から３のいずれかに記載の試験支援装置。
【請求項５】
前記原本プログラムは、入力に対する処理結果を、所定のタグセットによる構造化文書ファイルとして出力するよう記述されたものであり、
前記ロギング命令により出力されるメッセージは、前記構造化文書ファイルにおけるコメント文であることを特徴とする請求項１から４のいずれかに記載の試験支援装置。
【請求項６】
前記原本プログラムへの入力に対する処理結果は、所定の閲覧プログラムの実行装置により表示される態様で出力され、
前記ロギング命令により出力されるメッセージは、前記閲覧プログラムの実行装置では非表示とされる態様で出力されることを特徴とする請求項１から４のいずれかに記載の試験支援装置。
【請求項７】
ユーザの権限に応じて、前記試験用プログラムの実行フローの表示を制限する実行フロー表示部をさらに備え、
前記ロギング命令は、前記メッセージに代えて、前記メッセージとは異なるデータであって、前記メッセージを一意に特定可能な識別データを出力する命令であり、
前記実行フロー表示部は、ユーザが前記試験用プログラムの実行フローを確認するとき、そのユーザが所定の権限を有する場合には、前記識別データにより特定されるメッセージを表示させることを特徴とする請求項１から６のいずれかに記載の試験支援装置。
【請求項８】
前記試験データに応じて前記試験用プログラムから出力されたメッセージを参照して、前記試験データに応じて実行されたロギング命令を特定し、前記試験用プログラムに設定されたロギング命令に占める前記実行されたロギング命令の割合を、前記原本プログラムに対する試験の網羅率として算出する網羅状況特定部と、
算出された網羅率を表示させる網羅状況表示部と、
をさらに備えることを特徴とする請求項１から７のいずれかに記載の試験支援装置。
【請求項９】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得するステップと、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木であって、前記原本プログラムの記述パターンに依存しない抽象構文木を生成するステップと、
前記抽象構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定することにより、前記抽象構文木を改変するステップと、
改変された抽象構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするための前記原本プログラムと同一のプログラミング言語で記述されたプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力するステップと、
をコンピュータに実行させることを特徴とする試験支援方法。
【請求項１０】
前記改変するステップは、前記試験用プログラムではなく前記原本プログラムにおいて前記制御命令が記述された位置を示すメッセージを出力するロギング命令のノードを設定することを特徴とする請求項９に記載の試験支援方法。
【請求項１１】
所定のプログラミング言語で記述された試験対象のプログラムを原本プログラムとして取得する機能と、
前記プログラミング言語の文法規則にしたがって、前記原本プログラムに記述されたプログラムコードの各要素をノードとする構文木であって、前記原本プログラムの記述パターンに依存しない抽象構文木を生成する機能と、
前記抽象構文木において、前記原本プログラムの実行フローを制御する制御命令のノードに対して、当該制御命令により実行フローが制御されたことを示すメッセージを出力するロギング命令のノードを対応づけて設定することにより、前記抽象構文木を改変する機能と、
改変された抽象構文木を参照して、所定の試験データが前記原本プログラムに入力された際の実行フローを確認可能にするための前記原本プログラムと同一のプログラミング言語で記述されたプログラムであって、制御命令に対応づけてロギング命令が設定された試験用プログラムを出力する機能と、
をコンピュータに実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１２】
前記改変する機能は、前記試験用プログラムではなく前記原本プログラムにおいて前記制御命令が記述された位置を示すメッセージを出力するロギング命令のノードを設定することを特徴とする請求項１１に記載の記録媒体。
【国際調査報告】
2010134123.tif 000021
2010134123.tif 000022
2010134123.tif 000023
2010134123.tif 000024