説明

プログラムチェックリスト作成システム

【課題】
既存アプリケーションの修正のテスト工程において、テストの実行結果から、そのプログラムの性能及びテストの品質を保証する。
【解決手段】
プログラムチェックリスト作成及びテスト実績の情報収集機能により、プログラムチェックリストを作成しながら、DBにテスト結果及び、テスト実施にかかった時間を記録し、テスト実績の統計情報作成機能により、その収集したテスト実績からテストの失敗率や成功時の実行時間等を用いて統計情報を出力し、コーディング補正機能によりコーディングノウハウ上、性能悪化と推測されるプログラムソースを自動補正する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムチェックリスト作成システムに係り、特に、プログラムソースからプログラムチェックリストを作成するシステムにおいて、過去と現在のテスト実績から、テストの統計情報を出力するプログラムチェックリスト作成システムに関するものである。
【背景技術】
【0002】
プログラムのテスト作業は、通常、チェックリストに基づいて作成したテスト用データファイルを被テストプログラムに入力・実行させてテストを実施している。このテスト作業では、テストの回数を削減し、テスト作業をより迅速に効率よく行うことが重要である。
【0003】
この関連技術として、例えば、特許文献1には、被テストプログラムに対して、テスト結果検証ロジックとチェックリスト消込みロジックを付加したチェックリスト自動消込みプログラムにテスト用データファイルとチェックリスト情報ファイルを入力して実行するようにして、出力されたテスト結果データが対応するチェック項目の確認データと一致しているか否かを検証し、検証済みチェック項目以外の項目で入力条件と確認内容が合致しているチェック項目を検索して自動的に消込みを行う、チェックリスト自動消込みシステムが開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平7−200356公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
一般的に、既存アプリケーションを修正或いは拡張する際のテスト作業を迅速かつ品質を確保して実施するためには、テスト工程を自動化することが必要である。従来、テストの実行とテスト結果のドキュメント化を自動化することで、この種の課題に対処している。
【0006】
しかし、テスト結果のドキュメント化を自動化しても、そのテスト結果が妥当かどうか判断する必要があり、それを怠ると品質の保証はできない。具体的には、最低限のプログラム品質を保証できるテストを実施しているか確認するためには、関数ごとに、下記(1)〜(3)のような条件を満たす必要がある。
(1)1つの関数において、1つ以上のテストを行っている。
(2)1つの関数において、正常ケースと異常ケースのテストがある。
(3)数値項目を引数にもつ関数は、境界値テストがある。
【0007】
また、性能面においては、過去に実施したテストの実行時間と同等の実行時間であることが必要である。
このように、従来の技術では、テストの品質を保証するのは、人任せであるため、定量的な判断ができず、また、性能面において、改変前のシステムとどれほど違いがあるのかが判断しにくいという課題があった。
【0008】
本発明の目的は、既存アプリケーションの修正のテスト工程において、テストの実行結果から、そのプログラムの性能及びテストの品質を保証するプログラムチェックリスト作成システムを提供することである。
【課題を解決するための手段】
【0009】
本発明は、プログラムソースからドキュメントを作成するシステムにおいて、プログラムチェックリストを作成しテスト実績の統計情報をDBに格納するプログラムチェックリスト作成及びテスト実績の情報収集機能と、収集したテスト実績から統計情報を出力するテスト実績の統計情報作成機能と、プログラムソースの補正を行うプログラムコーディング自動修正機能を有することを特徴とするプログラムチェックリスト作成システムとして構成される。
【発明の効果】
【0010】
本発明によれば、テストの実行結果から、そのテストが最低限のテストを実施しているかを確認することができる。また、過去のテスト実績から、プログラム性能が大幅に悪くなっていないか、定量的に判断できる。
また、過去に実施したプログラムのテスト状況を格納しているので、ソース改変による既存システムに与える影響を推測するための統計情報がわかる。
更に、機能としては満たしているコーディングでも、性能悪化につながるコーディングを自動的に修正することができる。
【図面の簡単な説明】
【0011】
【図1】一実施形態によるプログラムチェックリスト作成システムの全体構成図である。
【図2】プログラムチェックリスト作成システム全体の処理動作を示す処理フローである。
【図3】チェックリスト作成及びテスト結果の統計情報収集機能の処理動作を示す処理フローである。
【図4A】テスト実績の統計情報作成機能の動作を示す処理フローである。
【図4B】テスト実績の統計情報作成機能の動作を示す処理フローである。
【図5】コーディング補正機能の動作を示す処理フローである。
【図6】テストヘッダテーブル114の構成例を示す図である。
【図7】テスト詳細結果テーブル115の構成例を示す図である。
【図8】閾値テーブル112の構成例を示す図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して本発明の一実施形態について説明する。
まず、図1を参照して、プログラムチェックリスト作成システムの全体構成について説明する。
【0013】
プログラム開発者は、クライアントPC(開発者用PC)101を用いてプログラムの開発及びテストを実施する。プログラム開発者は、プログラムの開発が終了すると、ネットワーク102を介して接続されたプログラムチェックリスト作成システム104のサーバ103に対して、開発したプログラムのプログラムソース105、テストソース106、テスト結果XML107を入力する。
【0014】
ここで、プログラムチェックリスト作成システム104は、アプリケーションプログラムの実行によってサーバ103上に構築されるシステムであり、主に、プログラムチェックリスト作成機能108、プログラム統計情報収集機能109、及びコーディング補正機能110の3つの機能を有する。
これらの機能により、システム104は、実行したテストのプログラムチェックリスト111、そのテストの統計情報データ116、及び補正後プログラムソースデータ117を出力する。
【0015】
特に、プログラム統計情報収集機能109は、システム内部にあるプログラム統計情報DB113に統計情報を保管し、またその統計情報の分析を行う。ここで、プログラム統計情報DB113は、テストヘッダテーブル114と、テスト詳細結果テーブル115を有する。また、収集した統計情報を分析する際に、閾値テーブル112より閾値を取得して、分析数値に利用する。
【0016】
次に、図6〜図8を参照して、各テーブルの構成について説明する。
図6は、一連のテスト全体の情報を保存するテストヘッダテーブル114の構成例を示す。テストIDは、実施したテストを一意に指定するための固有の情報であり、テスト実施毎に自動採番される。テスト開始日時はテストを開始した日時であり、それを"yyyy/MM/dd hh:mm:ss"形式で保持する。テスト対象プログラム名は実行したテストのテスト対象プログラム名、テスト実行時間(s)は一連のテストにかかった総時間である。
【0017】
図7は、テスト詳細結果テーブル115を示す。
テスト詳細結果テーブル115は一つ一つのテストの内容、実行結果を保存するテーブルである。テストIDは実施したテストを一意に指定するための固有の情報であり、テストヘッダテーブル114とテスト詳細結果テーブル115を紐付けるキー情報となる。詳細IDはテストメソッド毎の固有の情報であり、テストメソッド毎に自動採番される。
テスト対象クラス名は、テスト対象のクラス名であり、テストソースのJavaDocコメント(Javaは登録商標です)に記載された@targetClassタグの値を格納する。テスト対象メソッド名は、同様にテスト対象のメソッド名であり、テストソースに記載された@targetMethodタグの値を格納する。テスト対象シグニチャは、テストメソッドをさらに細かく一意に区別するためのものであり、JavaDocコメントに書かれた、@targrtSignitreタグの値を格納する。
【0018】
テストクラス名はテストを実施したクラスのクラス名、テストメソッド名はテストを実施したメソッドの名前を示す。テストタイプはテストの種類を示し、N:正常ケース、E:異常ケース、I:インターフェース、L:境界などの種類を表す。テストタイプの項目は、JavaDocの@typeタグの値を格納する。
テスト結果項目は実施したテストの結果を示し、成功:"success"、失敗:"failure"、異常"exception"などで表す。本システムに入力したテスト結果XMLより、テスト結果を格納する。テスト時間は、同様にテスト結果XMLのtime属性から、テスト実行に掛かった時間を格納する。エラー内容は、失敗したテストのエラー内容をテスト結果XMLから読み込み、格納する。
【0019】
図8は、閾値テーブル112を示す。
閾値テーブル112は、テスト実績の統計情報作成機能において用いられる閾値を格納する。閾値Aは、テストの失敗率を判断する値、閾値B,Cは、テストの実行時間が以前のテストに比べて妥当であったかを判断するときに使用される値である。
【0020】
次に、図2のフローチャートを参照して、システム全体の処理動作を説明する。
処理が開始されると、チェックリスト作成及びテスト実績の情報収集処理(S204)が実行される。この処理は、テストソース106とテスト結果XML107を入力とし、プログラムチェックリスト111を出力する。また、その処理において、プログラム統計情報DB113に情報を書き込む。
【0021】
次のテスト実績の統計情報作成処理(S206)では、チェックリスト作成及びテスト実績の情報収集処理(S204)の処理で書き込んだプログラム統計情報DB113と、プログラムソース105を入力として、統計情報データ116を出力する。最後に、プログラムコーディング自動補正処理(S208)では、プログラムソース203を入力として、コーディングレベルで性能悪化となる部分を自動修正した、補正後プログラムソース117を出力する。
【0022】
次に、図3を参照して、チェックリスト作成処理及びテスト結果の統計情報収集処理機能108(チェックリスト作成及びテスト実績の情報収集処理S204)について詳細に説明する。
処理が開始されると、テストソース106の内容を読み込む(S304)。次に、システム内に保存しているプログラムチェックリストのテンプレートファイルをコピーして、出力ファイルを作成する(S305)。そして、テストヘッダテーブル114にテスト全体の情報を書き込む(S306)。
【0023】
処理ステップS307〜S318は、テストソースのテストクラス(関数群)毎に処理する。まず、テスト結果XML107を入力し、クラスに対するテスト結果のXMLファイルを取得する(S308)。ステップS309とS317の間は、テストメソッド(関数)ごとに処理を実施する。
まず、1テストメソッドに対して、指定のJavaDocコメント(@conditionタグ、@contentsタグ、@typeタグ)が存在するかチェックする(S310)。チェックの結果、存在しない場合は、処理S311〜S315を実施しない。一方、指定のJavaDocが存在する場合は、テスト詳細結果テーブル115の詳細IDを取得して、プログラムチェックリスト111に書き込む(S311)。
その後、テストソース106のJavaDocコメントから取得した、次の内容をそれぞれ、プログラムチェックリスト111に書き込む(S312)。この書き込み処理において、@conditionタグはテスト条件に、@contentタグはテスト内容に、@typeタグはテストタイプに、@targetClassタグはテスト対象クラスに、@targetMethodタグはテスト対象メソッドに、@targetSignatureタグはテスト対象シグニチャにそれぞれ書き込まれる。
【0024】
次に、ステップS312で読み込んだテスト結果によって処理を分岐する。即ち、テスト結果XMLの<testcase>ノード下にある、ノードが<success>か、<failure>を判定する(S313)。判定の結果が<failure>の場合は、<failure>ノードの"message"属性の値を取得し(S314)、テスト結果をプログラムチェックリスト323に書き込む(S315)。一方、判定の結果が<success>の場合は、テスト結果項目に"success"を書込む(S315)。
また、判定の結果が<failure>の場合は、テスト結果項目に"failure"と書込み、エラー内容にステップS314で取得したエラー詳細を書き込む(S315)。
このように、処理ステップS311,S312,S315で取得したテスト結果情報をテスト詳細結果テーブル115に書き込む。
【0025】
テストメソッド毎のループ(S317)、及びテストクラス毎のループ(S318)が終了したら、プログラムチェックリストにプログラム全体の概要シートを作成する(S319)。この概要シートには、クラス毎のテストの成功件数、失敗件数及び、テスト時間合計を記載する。最後、出力ファイルへ書き込み(クローズ処理)を実施して(S320)、一連の処理を終了する。
【0026】
次に、図4A,図4Bを参照して、テスト実績の統計情報作成機能(処理S206)について説明する。
処理が開始されると、閾値テーブル112から閾値を読み込む(S404)。そして、テスト詳細結果テーブル115より、今回のテストIDに紐づくテストメソッドの一覧を取得する(S405)。以後、テストメソッド毎に、処理ステップS406〜S414を処理する。
【0027】
即ち、テスト詳細結果テーブル115全てから、該当するテストメソッドのテスト結果を取得して、テスト失敗回数及びテスト回数を算出する(S407)。算出した値から、テスト失敗回数÷テスト回数を求めて、閾値Aとの関係の判定を行う(S408)。判定の結果、閾値Aよりテスト失敗回数の割合が大きい場合は、要注意テストとして、統計情報データ116に書き込む(S409)。
【0028】
一方、閾値A以下の場合は、テスト詳細結果テーブル115から、過去のテストの平均実行時間を算出する(S410)。具体的には、テスト詳細結果テーブル115から、該当のテストメソッドのテスト結果のうち、テスト結果項目が"success"ののテスト時間を取得し、その平均値を算出する。そして、その算出したテスト平均実行時間を判定する(S411)。即ち、今回のテスト時間が、テスト平均実行時間に閾値Bを掛けた値より小さい場合は、性能改善テストとして、統計情報に書き込む(S412)。また、テスト実行時間が、テスト平均実行時間に閾値Cを掛けた値より大きい場合は、性能悪化テストとして、統計情報に書き込む(S413)。更に、テスト時間が上記の2つに該当しない場合は、何も処理せず、処理ステップS414に移行する。
【0029】
以後、図4Bに示すように、プログラムソースを元として、各種テストを実施済みかどうかの情報を収集して行く。まず、プログラムソース105を入力とし、プログラムソースのメソッド情報を取得する(S418)。そして、プログラムソースのメソッドごとに、処理ステップS419〜S428を実施する。
即ち、テスト詳細結果テーブル115から対象メソッドのテストデータを取得する(S420)。テスト詳細結果テーブル115の検索キーは、テストID、テスト対象クラス、テスト対象メソッド、テスト対象メソッドシグニチャである。そして、検索した結果、対照メソッドのテストデータが存在しているか否かで、そのメソッドのテストを実行したか判断する(S421)。判断の結果、テストが実行されていない場合は、テスト未実施として統計情報データ116に書き込む(S422)。
【0030】
一方、判断の結果、テストが実行されている場合は、メソッド引数に数値項目があるかどうか判定する(S423)。具体的には、int、Integer、long、Long、double、Doubleなどが含まれているか確認する。メソッド引数に数値がある場合、境界値チェックを実施しているか確認する(S424)。具体的には、処理ステップ420で絞り込んだデータに、テストタイプがL(境界チェック)のものがあるか判定する(S424)。その結果、L(境界チェック)のものがなかった場合は、境界値テスト不備として、統計情報データ116に書き込む(S425)。
【0031】
そして、正常ケースと異常ケースのテストが実行しているか判定する(S426)。これは、対象メソッドのテストデータに、テストタイプがN(正常)のものとE(異常)のものがあるかを判断する。その結果、無かった場合、テスト不備として統計情報データに書き込む(S427)。以上のループをメソッドごとに繰り返して、一連の処理を終了する。
【0032】
次に、図5を参照して、コーディング補正機能(処理S208)について説明する。
ここでは、Java言語において、問題となるString型の文字連結について修正する。Java言語におけるString型の文字連結では、値の書き換えを行わず、新たに領域を確保するため、大量にStringオブジェクトが作成され、性能が悪化する。この対策として、StringBuffer型を用いることで、解決するのであるが、これを自動的に補正することを実現する。
【0033】
処理が開始されると、プログラムソース105を読み込んで、メソッド情報を取得する(S503)。以後、処理ステップS504〜S514をプログラムのメソッドごとに繰り返し処理する。
まず、メソッド内で定義されているローカル変数をリストアップする(S505)。次の、処理ステップS506〜S513でメソッド内の行ごとに繰り返し処理する。
【0034】
即ち、行頭がString型の変数で始まる行でなければ、処理S512に移る。一方、行頭がString型の変数で始まれば、String型の変数の次の演算子が、等号記号か否かの判定をする(S508)。その判定の結果、等号記号でなかった場合は、処理S512へ移る。一方、等号記号であった場合は、該当行の等号記号の後に"+"演算子があるか否かの判定を行う(S509)。判定の結果、"+"演算子がある場合、この変数をStringBuffer型に再定義し、該当の"+"演算子を.append()関数に修正して(S510)、該当行以外の、この変数を使っている場所を、"変数名.toString()"に置換する(S511)。
このように、String変数をStringBuffer変数に置換したものを、補正後プログラムソースデータ117に出力する(S512)。
【符号の説明】
【0035】
101:クライアントPC 102:ネットワーク 103:サーバ
104:プログラムチェックリスト作成システム 105:プログラムソース
106:テストソース 107:テスト結果XML
108:チェックリスト作成及びテスト結果の統計情報収集機能
109:テスト実績の統計情報作成機能
110:コーディング補正機能 111:プログラムチェックリスト
112:閾値DB 113:プログラム統計情報DB
114:テストヘッダテーブル 115:テスト詳細結果テーブル
116:統計情報データ 117:補正後プログラムソースデータ。

【特許請求の範囲】
【請求項1】
プログラムソースからドキュメントを作成するシステムにおいて、プログラムチェックリストを作成しテスト実績の統計情報をDBに格納するプログラムチェックリスト作成及びテスト実績の情報収集機能と、収集したテスト実績から統計情報を出力するテスト実績の統計情報作成機能と、プログラムソースの補正を行うプログラムコーディング自動修正機能を有することを特徴とするプログラムチェックリスト作成システム。
【請求項2】
前記統計情報を格納する前記DBは、
実施したテストを一意に指定するテストIDと、テストを開始した日時と、実行したテストのテスト対象プログラム名と、一連のテストにかかったテスト実行時間に関する情報を保管するテストヘッダテーブルと、
実施したテストを一意に指定する該テストIDと、テスト対象クラス名と、テスト対象メソッド名と、テストメソッドをさらに細かく一意に区別するテスト対象シグニチャと、テストを実施したクラスのテストクラス名と、テストを実施したメソッドの名前を示すテストメソッド名と、テストタイプはテストの種類を示すテストタイプと、実施したテストの結果を示すテスト結果項目と、テスト実行に掛かったテスト時間と、テストのエラー内容、に関する情報を保管するテスト詳細結果テーブルと、
を格納することを特徴とする請求項1のプログラムチェックリスト作成システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2010−286975(P2010−286975A)
【公開日】平成22年12月24日(2010.12.24)
【国際特許分類】
【出願番号】特願2009−139192(P2009−139192)
【出願日】平成21年6月10日(2009.6.10)
【出願人】(000152985)株式会社日立情報システムズ (409)
【Fターム(参考)】