(57)【特許請求の範囲】
【請求項１】
プログラム言語の指定とテスト項目を含むテスト仕様書に基づいて、前記指定されたプログラム言語のソースコードをテストすることを支援するテスト支援システムであって、
各テスト項目に対応したテストコードがプログラム言語毎に格納されているテスト情報リポジトリと、
各プログラミング言語に対応したソースコードをテストするための複数のテスティングフレームワークと、
前記テスト仕様書に含まれる各テスト項目を抽出し、抽出された当該各テスト項目に基づいて前記テスト情報リポジトリを検索し、検索されたテスト項目毎のテストコードを基に、前記テスト仕様書で指定されるプログラム言語のテストコードを生成し、当該生成されたテストコードが入力されるテスティングフレームワークを、前記テスト仕様書で指定されるプログラム言語に対応する前記テスティングフレームワークに切り換え、前記生成されたテストコードを用いて、当該切り替えられたテスティングフレームワークに前記テスト仕様書で指定されたプログラム言語のソースコードをテストさせるテスティングフレームワーク切り替え部と、
前記テスティングフレームワーク切り替え部によって切り替えられたテスティングフレームワークによるテストの結果を集計してテスト結果レポートを作成するテスト結果集計部と、
から構成されるテスト支援ツールを備える、
ことを特徴とするテスト支援システム。
【請求項２】
前記テスティングフレームワーク切り替え部が、前記テスト仕様書に含まれるテスト項目を抽出し、当該抽出されたテスト項目が格納されたテスト情報テーブルを作成し、当該テスト情報テーブルに格納されている各テスト項目に基づいて前記テスト情報リポジトリを検索する、
ことを特徴とする請求項１に記載のテスト支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発のための開発支援システムに関し、更に詳しくは、ソースコードのテスト支援技術に関する。
【背景技術】
【０００２】
従来、ソフトウェアの開発プロセスにソフトウェアのテスティングを組み込んだテスティングフレームワークを用いてソースコードの開発とテストを実施するためには、最初に開発者はテスト仕様書を作成していた。テスト仕様書には、それぞれのメソッドにおけるテスト項目、例えば、メソッドの戻り値やメソッド内のロジックのチェック等が記述されている。次に、テスト仕様書の内容を満たすテストコードを実装する。そして、テスト仕様書の内容を満たすソースコードを実装する。最後に実装されたソースコードとテストコードをテスティングフレームワークに入力して、テストコードで実装された内容を満たすソースコードが実装されているかをテストする。この手法より、テストする内容を満たすソースコードが実装されることにより、ソースコードの品質を高めることができる。
【０００３】
例えば、特許文献１では、プログラム内の分岐命令を抽出し発生する事象を分析する分岐命令抽出・分析手段と、全テストパターンに対するテストデータと出力期待値の入力要求をオペレータに出し、テスト確認項目を決定するテスト項目決定手段と、入力されたテストデータに従ってプログラムを実行するテスト実行手段と、テスト項目と出力結果を記述したテスト仕様書を作成するテスト仕様書編集手段とを有するテスト支援装置により、テスト作業の効率化、高速化を図るとともに個人の技術レベルに依存しない標準的な作業結果を得ることが可能な技術が開示されている。
【０００４】
【特許文献１】特開平７−１９１８８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、テスティングフレームワークは、プログラム言語（例えば、.NET、Java（登録商標）、Visual Basic(VB)等）ごとに用意されている。従って、テスティングフレームワークを用いたテストは、開発者がプログラム言語ごとにテストコードとテストコードの内容を満たすソースコードを用いてテストを実行する。この手法では、プログラム言語ごとにテストコードを用意する必要がある。しかし、プログラム言語の種類は異なるが、テストコードの内容は同一になるものが多い。よって、テストコードの内容は同一であるが、プログラム言語ごとに別々のテストの仕組みを作る必要があるので手間がかかるという問題点があった。
【０００６】
また、特許文献１に記載の技術では、テスト仕様書よりテストコードを生成し、テストを実行することにより、テスト結果を反映することは可能であるが、単一のプログラム言語に依存した形でのテストしか行うことができないという問題点があった。
【０００７】
上記問題点に鑑み、本発明は、プログラム言語に依存しないテスト仕様書と実装済みのソースコードより、テストを実施することができ、さらに、複数のプログラム言語に対応したテスト仕様書を用いて、効率よくテストを実施することができるテスト支援システムを提供する。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のテスト支援ツールは、
プログラム言語の指定とテスト項目を含むテスト仕様書に基づいて、前記指定されたプログラム言語のソースコードをテストすることを支援するテスト支援システムであって、
各テスト項目に対応したテストコードがプログラム言語毎に格納されているテスト情報リポジトリと、
各プログラミング言語に対応したソースコードをテストするための複数のテスティングフレームワークと、
前記テスト仕様書に含まれる各テスト項目を抽出し、抽出された当該各テスト項目に基づいて前記テスト情報リポジトリを検索し、検索されたテスト項目毎のテストコードを基に、前記テスト仕様書で指定されるプログラム言語のテストコードを生成し、当該生成されたテストコードが入力されるテスティングフレームワークを、前記テスト仕様書で指定されるプログラム言語に対応する前記テスティングフレームワークに切り換え、前記生成されたテストコードを用いて、当該切り替えられたテスティングフレームワークに前記テスト仕様書で指定されたプログラム言語のソースコードをテストさせるテスティングフレームワーク切り替え部と、
前記テスティングフレームワーク切り替え部によって切り替えられたテスティングフレームワークによるテストの結果を集計してテスト結果レポートを作成するテスト結果集計部と、
から構成されるテスト支援ツールを備える。
【０００９】
好ましくは、本発明のテスト支援ツールは、
前記テスティングフレームワーク切り替え部が、前記テスト仕様書に含まれるテスト項目を抽出し、当該抽出されたテスト項目が格納されたテスト情報テーブルを作成し、当該テスト情報テーブルに格納されている各テスト項目に基づいて前記テスト情報リポジトリを検索する。
【発明の効果】
【００１０】
本発明により、プログラム言語に依存しないテスト仕様書と実装済みのソースコードより、テストを実施することができ、さらに、複数のプログラム言語に対応したテスト仕様書を用いて、効率よくテストを実施するテスト支援システムを提供することができる。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明を実施するための最良の形態を図面に基づいて説明する。
【００１２】
図１は、本発明のテスト支援システムのテスト支援ツールの概略構成を示す図である。テスト支援ツール１０１は、テスティングフレームワーク切り替え部１０２と、テスティングフレームワーク１０３と、テスト結果集計部１０４と、テスト情報リポジトリ１０５とから構成される。テスティングフレームワーク１０３は、テスト用に作成されたテストケースを満たすソースコードを満たすプログラムが実装されていることを確認する。また、テスティングフレームワーク１０３は、既存のソフトウェアを利用する。Java（登録商標）言語に対応したテスティングフレームワーク１０６や.NETに対応したテスティングフレームワーク１０７等、プログラム言語ごとにテスティングフレームワークが用意されている。
【００１３】
以下、本発明を実現するためのテスト支援ツールにおける具体的な処理についてその概要を説明する。
最初に、開発者は書式の指定されたテスト仕様書１０８にテスト項目やテスト対象となるプログラム言語を入力する。そして、テスト仕様書１０８で入力されたテスト項目の内容を満たすソースコード１０９を生成する。
次に、作成されたソースコード１０９とテスト仕様書１０８とをテスト支援ツール１０に入力する。テスト支援ツール１０１では、まずテスト仕様書１０８をテスティングフレームワーク切り替え部１０２に入力する。テスティングフレームワーク切り替え部１０３では、テスト仕様書１０８で入力された情報を利用してテスト情報リポジトリ１０５に登録されたルールを用いてテストコード１１０を生成する。テスト情報リポジトリ１０５に入力されている情報は、プログラム言語ごとにテストコード１１０を生成するための情報である。そして、生成されたテストコード１１０とソースコード１０９をテスト仕様書１０６で指定されたプログラム言語に対応したテスティングフレームワーク１０３に入力する。そして、テストを実行して、テスティングフレームワーク１０３より出力されたテスト結果１１１を、テスト結果集計部１０４に入力する。テスト結果集計部１０４では、得られたテスト結果１１１の情報を加工して、テスト結果レポート１１２に出力する。テストレポート１１２が出力されることで一連のテスト作業が完了する。
【００１４】
以上の処理をフローチャートにより説明する。
図２は、本発明を実現するための開発からテストのまでの処理を示すフローチャートである。
まず、テスト仕様書を作成して（ステップ２０１）、テスト仕様書よりテストコードを作成する（ステップ２０２）。そして、テスト仕様書を元にソースコードを作成する（ステップ２０３）。そして、テスティングフレームワークを用いて、テストコードの内容を満たすソースコードが実装されているかテストをする（ステップ２０４）。最後にテストの結果をテスト結果レポートに出力する（ステップ２０５）。
【００１５】
次に、テスト支援ツールを具体例に基づいて説明する。
図３は、テスト支援ツールを実行するためのシートである。項目３０１はテスト仕様書を生成する部分である。ここでは、項目３０２にテスト仕様書の保存先を入力して項目３０３のボタンをクリックすると、項目３０２で指定されたファイルパスにテスト仕様書を生成する。項目３０４は入力されたテスト仕様書とテスト仕様書を満たすソースコードより、テスト結果レポートを生成する部分である。また、テスティングフレームワークに入力するテストコードを出力することも可能である。
【００１６】
処理内容としては、項目３０５、項目３０６、項目３０７、項目３０８に必要な情報を入力する。項目３０５では、作成されたテスト仕様書のファイルパスを入力する。項目３０６では、作成されたソースコード一式が格納されたディレクトリパスを入力する。項目３０７では、テスト支援ツールより生成されるテストコード一式を出力するディレクトリパスを入力する。項目３０８では、テスト支援ツールより生成されるテスト結果レポートを出力するファイルパスを入力する。上述した項目に必要な情報を入力後に項目３０９をクリックすると、テストコードとテスト結果レポートを出力する。
ここで、テストコードは図１に示すテストコード１１０に相当し、ソースコードは図１に示すソースコード１０９に相当する。
【００１７】
次に、テスト仕様書の内容について説明する。
図４は、テストを実行するためのテスト仕様書の具体例を示す図である。テスト仕様書はテスト仕様を入力する部分である表４０３と、入力されたテスト仕様書を反映するボタン部４０１、４０２より構成される。ボタン部は、保存４０１とクリア４０２からなる。保存４０１は、テスト仕様書に入力されたデータを保存する。クリア４０２は、テスト仕様書に新たに入力されたデータを削除する。テスト仕様書に記述する情報は表４０３に入力する。  
【００１８】
以降、表４０３内の入力項目について説明する。
作成日４０４はテスト仕様書を作成した日を入力する。作成者４０５はテスト仕様書の作成者を入力する。対象言語４０６はテストコードを生成するためのプログラム言語を入力する。プログラム言語は、後述するテスト情報リポジトリ１０５に格納されているテストコードに対応したプログラム言語を入力する。クラス名４０７、メソッド名４０８は、テスト対象となるクラス名とクラス内のメソッド名を入力する。戻り値４０９は、テスト対象となるメソッドの戻り値に関するテスト項目を入力する。詳細な項目は、型４１０、桁数４１１、値４１２、形式４１３に入力する。型４１０は、メソッドの戻り値の型をテストする場合にテスト対象となる型名（String型、void型）を入力する。桁数４１１は、メソッドの戻り値が数値の場合は数値の桁数を入力する。また、メソッドの戻り値が文字列の場合は文字数を入力する。値４１２は、メソッドの戻り値が指定された値と一致することを確認する場合に、その値を入力する。形式４１３は、戻り値の書式をテストする場合にその書式を入力する。書式とは、全角かなや半角英数字というように入力する。ロジック４１４は、メソッドの中で実装されるべき処理内容が実装されていることをテストする際に入力する。ロジック４１４でテストしたい項目は、「○」を入力する。DB参照４１５は、DB挿入４１６、DB更新４１７、DB削除４１８は、メソッドの中でDBを処理する場合に記述する。
【００１９】
次に、テスト支援ツール内のテスティングフレームワーク切り替え部の詳細について説明する。
図５は、テスティングフレームワーク切り替え部の処理を示すフローチャートである。以下、処理過程について説明する。
まず、開発者が作成したテスト仕様書内に入力されたテスト項目情報とテストコードを生成する対象となるプログラム言語名を抽出する（ステップ５０１）。次に、ステップ５０１で抽出された情報を用いてテストコードを生成する（ステップ５０２）。次に、ステップ５０２で生成されたテストコードと、テスト支援ツールに入力されたソースコードをステップ５０１で抽出されたプログラム言語に該当するテスティングフレームワークに入力してテストを実行する（ステップ５０３）。
【００２０】
図６は、テスティングフレームワーク切り替え部でテスト仕様書より抽出された値を格納したテーブルを示す図である。テーブル６０１は、テスト仕様書より抽出されるテスト項目に関するテスト情報テーブルである。項目６０２はテスト対象となるクラス名、項目６０３はテスト対象となるメソッド名、項目６０４はテスト情報リポジトリに格納されているテスト項目のカテゴリ名、項目６０５は項目６０４を詳細化した項目名、項目６０６はテスト仕様書で入力された値が入力される。テーブル６０１内は、複数のレコードを生成することが可能である。テーブル６０７は、データを出力時の設定情報が格納されている設定情報テーブルである。項目６０８はテストコードの出力先、項目６０９はテスト結果レポートの出力先、項目６１０はテストコードを生成する時の対象となるプログラム言語名である。テーブル６０７で生成されるレコード数は１である。
【００２１】
図７は、テスト情報リポジトリを構成するテーブルとテーブルに格納されているレコードの例を示した図である。テーブル７０１は、テストコードテーブルである。列７０２はテスト項目のカテゴリを表す。これは項目６０４と対応する。列７０３はカテゴリ内の項目を現す。これは項目６０５と対応する。列７０４はテスト項目の名前が入力されている。これは、テスト結果レポートに出力される項目名になる。列７０５、列７０６、列７０７はそれぞれのテスト項目に対応するテストコードである。列７０５はJava言語用テスティングフレームワークに対応するテストコードが入力されている。列７０６は.NET用テスティングフレームワークに対応するテストコードが入力されている。列７０７はVB用テスティングフレームワークに対応するテストコードが入力されている。列７０５、列７０６、列７０７は、入力されていない項目も存在する。テーブル内には、[ ]で囲まれている部分は、テーブル６０１で入力された値が代入される。なお、[インスタンス名]は、項目６０２のクラス名の先頭文字を小文字にしたものである。例えばクラス名がLogicならば、インスタンス名はlogicとなる。
【００２２】
図８は、各々のテスト項目に対応するテストコードに付加されるXMLタグである。それぞれのタグの解説をタグの説明表８０１に示す。項目８０２はテストコードの対象となるクラス名である。項目８０３はテストコードの対象となるメソッド名である。項目８０４はテスト結果をテスト結果レポートに出力するときの出力場所を示す。項目８０５に代入される値は１から始まる連番である。この値は、テストコードテーブル７０１で上から振られるIndex値と同一である。項目８０５はテスト項目名が記入される。タグの中に生成される内容は、列８０６のルールにより生成される。なお、テスト情報リポジトリ内に該当するプログラム言語に対応したテストコードが存在しない場合でも、テストコード内にはタグの情報のみ生成される。
ここで、テストコードは、図１に示すテストコード１１０に相当する。  
【００２３】
図９は、テスト仕様書から抽出された値を用いてテストコードを生成する流れを示す図である。
テーブル９０１は、テスト情報テーブルである。処理としては、テスト仕様書より抽出されたテーブル内のそれぞれのレコードにSQL文を発行してテストコードを生成する。SQL文はクエリ９０２、クエリ９０３、クエリ９０４のようになる。SELECT内の値は、テストコードを抽出するためのプログラム言語になる。この値は、項目４０３で指定された値になる。FROM内の「テストコードテーブル」は、テーブル９０５を指す。WHERE内の条件式は、テーブル９０１内のテストカテゴリとテスト項目の値をキーとした条件式となる。クエリ９０２、クエリ９０３、クエリ９０４を実行すると、テストコードが生成される。そして、処理９０６を実行してテストコード内の[]の値をテーブル９０１のデータを用いて生成する。次に処理９０７を実行して生成されたテストコードにコメント文を生成して表８０１で定義されたテスト情報タグを代入する。次に処理９０８を実行して、処理９０７で生成されたテストコードを集計してテスティングフレームワークに入力するテストコード９０９を完成させる。
【００２４】
ここで、テストコードは、図１に示すテストコード１１０に相当する。
以上により、テスト仕様書からテスティングフレームワークに入力するテストコードを生成することが可能となる
【００２５】
図１０は、テスティングフレームワーク切り替え部より生成されるテストコードの例を示す図である。このテストコードは、Java言語より生成されている。項目１００１はテスト対象となるクラスである。項目１００２、項目１００３はテスト仕様書より生成されるテストコードの一部である。項目１００４はテスト情報リポジトリにテスト項目に対応したテストコードがないため、テスト結果レポートに出力するための値のみの出力となる。
【００２６】
次に、テスト支援ツール内のテスト結果集計部の詳細について説明する。
図１１は、テスト結果集計部の処理を示すフローチャートである。以下、処理過程について説明する。
まず、テスティングフレームワークより生成されたテスト結果を取得する（ステップ１１０１）。そして、取得されたテスト結果を用いてテスト結果レポートを出力する（ステップ１１０２）。
【００２７】
図１２は、テスティングフレームワークより生成されるテスト結果の書式の例を表した図である。列１２０１は、テスト項目の対象となったクラス名である。列１２０２は、テスト項目の対象となったメソッド名である。列１２０３はテスト項目である。列１２０４はテスト項目に対するテストの結果である。テスト結果は、「○」、「×」、「−」の３種類表示される。「○」はテストが成功したことを表す。「×」はテストが失敗したことを表す。「−」は、テスト対象となるテストコードを生成することができなかったため、テストを実施することができないことを表す。つまり、テストコード内に、タグ情報のみが代入されるテスト項目に対しては、テスト結果として「−」を表示する。
【００２８】
図１３は、出力されたテスト結果レポートの書式を表した図である。表１３０１はテスト結果を表した表である。項目１３０２はテスト結果レポートを生成した日付である。列１３０３はテスト項目の対象となったクラス名である。列１３０４はテスト項目の対象となったメソッド名である。列１３０５はテストの対象となったテスト項目名である。項目１３０６はそれぞれのテスト項目のテスト結果が表示される。テスト結果は、「○」、「×」、「−」の３種類表示される。「○」はテストが成功したことを表す。「×」はテストが失敗したことを表す。「−」は、テスト対象となるテストコードを生成することができなかったため、テストを実施することができないことを表す。
【００２９】
このようにすることで、テスト項目毎のテスト結果をクラス毎、メソッド毎に容易に、かつ、迅速に知ることができる。
【００３０】
以上により、ソースコードの開発者は、プログラム言語に依存しないテスト仕様書に必要情報（テスト項目、テストコードの対象となるプログラム言語の名前）を入力することで、指定されたプログラム言語を基に実装されたテストコードを生成し、このテストコードとテストの対象となるソースコードをテスティングフレームワークに入力し、テスト実行し、その結果をテスト結果レポートに出力することができる。従って、テスト仕様書はプログラム言語に、特定のプログラム言語に依存せずに使用することができる。
更に、特定のプログラム言語に依存することなく、テスト仕様書を生成してテスト結果レポートを生成することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明のテスト支援システムのテスト支援ツールの概略構成を示す図である。
【図２】本発明を実現するための開発からテストのまでの処理を示すフローチャートである。
【図３】テスト支援ツールを実行するための入力シートを示す図である。
【図４】テストを実行するためのテスト仕様書の具体例を示す図である。
【図５】テスティングフレームワーク切り替え部の処理を示すフローチャートである。
【図６】テスティングフレームワーク切り替え部でテスト仕様書より抽出された値を格納したテーブルを示す図である。
【図７】テスト情報リポジトリを構成するテーブルとテーブルに格納されているレコードの例を示した図である。
【図８】各々のテスト項目に対応するテストコードに付加されるXMLタグである。
【図９】テスト仕様書から抽出された値を用いてテストコードを生成する流れを示す図である。
【図１０】テスティングフレームワーク切り替え部より生成されるテストコードの例を示す図である。
【図１１】テスト結果集計部の処理を示すフローチャートである。
【図１２】テスティングフレームワークより生成されるテスト結果の書式の例を表した図である。
【図１３】出力されたテスト結果レポートの書式を表した図である。
【符号の説明】
【００３２】
１０１  テスト支援ツール
１０２  テスティングワークフレーム切り替え部
１０３  テスティングワークフレーム
１０４  テスト結果集計部
１０５  テスト情報リポジトリ
１０６、１０７  プログラム言語別テスティングワークフレーム
１０８  テスト仕様書
１０９  ソースコード
１１０  テストコード
１１１  テスト結果
１１２  テスト結果レポート
３０１、３０２、３０３、３０４、３０５、３０６、３０７、３０８、３０９  項目
４０１  保存ボタン
４０２  クリアボタン
４０３  表
４０４  作成日
４０５  作成者
４０６  対象言語
４０７  クラス名
４０８  メソッド名
４０９  戻り値
４１０  型
４１１  桁数
４１２  値
４１３  形式
４１４  ロジック
４１５  ＤＢ参照
４１６  ＤＢ挿入
４１７  ＤＢ更新
４１８  ＤＢ削除
６０１  テスト情報テーブル
６０２、６０２、６０３、６０４、６０５、６０６、６０８、６０９、６１０  項目
６０７  設定情報テーブル
７０１  テストコードテーブル
７０２、７０３、７０４、７０５、７０６、７０７  列
８０１  タグの説明表
８０２、８０３、８０４、８０５  項目
８０６  列
９０１、９０５  テーブル
９０２、９０３、９０４  クエリ
９０６、９０７、９０８  処理
９０９  テストコード
１００１、１００２、１００３、１００４  項目
１２０１、１２０２、１２０３、１２０４  列
１３０１  表
１３０２、１３０６  項目
１３０３、１３０４、１３０５  列
【図１】
0004777740.tif 000002
【図２】
0004777740.tif 000003
【図３】
0004777740.tif 000004
【図４】
0004777740.tif 000005
【図５】
0004777740.tif 000006
【図６】
0004777740.tif 000007
【図７】
0004777740.tif 000008
【図８】
0004777740.tif 000009
【図９】
0004777740.tif 000010
【図１０】
0004777740.tif 000011
【図１１】
0004777740.tif 000012
【図１２】
0004777740.tif 000013
【図１３】
0004777740.tif 000014