(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5758311
(24)【登録日】2015年6月12日
(45)【発行日】2015年8月5日
(54)【発明の名称】テストコード生成装置、テストコード生成方法、テストコード生成プログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20150716BHJP
G06F 11/28 20060101ALI20150716BHJP
【FI】
G06F9/06 620P
G06F11/28 340A
【請求項の数】6
【全頁数】14
(21)【出願番号】特願2012-5137(P2012-5137)
(22)【出願日】2012年1月13日
(65)【公開番号】特開2013-145443(P2013-145443A)
(43)【公開日】2013年7月25日
【審査請求日】2014年8月27日
(73)【特許権者】
【識別番号】000102728
【氏名又は名称】株式会社エヌ・ティ・ティ・データ
(74)【代理人】
【識別番号】110001634
【氏名又は名称】特許業務法人 志賀国際特許事務所
(72)【発明者】
【氏名】稲垣 弘樹
(72)【発明者】
【氏名】菅原 康友
【審査官】
石川 亮
(56)【参考文献】
【文献】
特開平03−206531(JP,A)
【文献】
特開2006−309290(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 11/28
(57)【特許請求の範囲】
【請求項1】
テスト対象であるソフトウェアプログラムの処理における条件と、当該条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、
前記条件または前記動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、
ユーザから入力された、前記条件または前記動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、
前記ユーザテストコードの入力を受け付け、入力されたユーザテストコードを前記ユーザテストコード記憶部に記憶させる入力部と、
前記条件または前記動作毎に、当該条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されているか否かを判定する判定部と、
前記判定部が、前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていると判定した場合、当該条件または動作に応じた前記ユーザテストコードを前記ユーザテストコード記憶部から読み出し、前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていないと判定した場合、当該条件または動作に応じた前記既定テストコードを前記既定テストコード記憶部から読み出し、読み出した前記ユーザテストコードまたは前記既定テストコードに基づいてテストコードを生成するテストコード生成部と、
を備えることを特徴とするテストコード生成装置。
【請求項2】
前記判定部は、前記決定表における前記条件または前記動作に、予め定められた識別情報が対応付けられている場合、当該条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていると判定する
ことを特徴とする請求項1に記載のテストコード生成装置。
【請求項3】
前記決定表記憶部には、テスト対象毎に異なる複数の前記決定表が記憶され、
前記ユーザテストコード記憶部には、前記複数の決定表のそれぞれに対応するユーザテストコードである内部コード定義情報と、前記複数の決定表に共通して使用するユーザテストコードである外部コード定義情報とが記憶され、
前記テストコード生成部は、前記条件または動作に対応する前記ユーザテストコードが前記内部コード定義情報に含まれていれば、当該内部コード定義情報に含まれるユーザテストコードを読み出し、前記条件または動作に対応する前記ユーザテストコードが前記内部コード定義情報に含まれていなければ、前記外部コード定義情報に含まれるユーザテストコードを読み出す
ことを特徴とする請求項1または請求項2に記載のテストコード生成装置。
【請求項4】
前記ユーザテストコードには、予め定められた第1の文字列が含まれており、
前記決定表には、前記第1の文字列を置換する第2の文字列が含まれており、
前記テストコード生成部は、前記ユーザテストコードに含まれる前記第1の文字列を、前記第2の文字列に置換した前記テストコードを生成する
ことを特徴とする請求項1から請求項3までのいずれか1項に記載のテストコード生成装置。
【請求項5】
テスト対象であるソフトウェアプログラムの処理における条件と、当該条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、前記条件または前記動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、ユーザから入力された、前記条件または前記動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、を備えたテストコード生成装置のテストコード生成方法であって、
前記ユーザテストコードの入力を受け付け、入力されたユーザテストコードを前記ユーザテストコード記憶部に記憶させるステップと、
前記条件または前記動作毎に、当該条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されているか否かを判定するステップと、
前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていると判定した場合、当該条件または動作に応じた前記ユーザテストコードを前記ユーザテストコード記憶部から読み出し、前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていないと判定した場合、当該条件または動作に応じた前記既定テストコードを前記既定テストコード記憶部から読み出し、読み出した前記ユーザテストコードまたは前記既定テストコードに基づいてテストコードを生成するステップと、
を備えることを特徴とするテストコード生成方法。
【請求項6】
テスト対象であるソフトウェアプログラムの処理における条件と、当該条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、前記条件または前記動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、ユーザから入力された、前記条件または前記動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、を備えたテストコード生成装置のコンピュータに、
前記ユーザテストコードの入力を受け付け、入力されたユーザテストコードを前記ユーザテストコード記憶部に記憶させるステップと、
前記条件または前記動作毎に、当該条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されているか否かを判定するステップと、
前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていると判定した場合、当該条件または動作に応じた前記ユーザテストコードを前記ユーザテストコード記憶部から読み出し、前記条件または動作に対応する前記ユーザテストコードが前記ユーザテストコード記憶部に記憶されていないと判定した場合、当該条件または動作に応じた前記既定テストコードを前記既定テストコード記憶部から読み出し、読み出した前記ユーザテストコードまたは前記既定テストコードに基づいてテストコードを生成するステップと、
を実行させるテストコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、テスト対象であるソフトウェアプログラムに対するテストコードを生成する技術に関する。
【背景技術】
【0002】
ソフトウェアシステム開発におけるテスト工程において、そのソフトウェアシステムを構成するソフトウェアプログラム毎に、条件分岐や入出力の妥当性を検査する単体テストが行われる。特許文献1、2には、このようなテストを自動化する技術が記載されている。
図9は、テスト対象であるソフトウェアプログラムに対する条件と動作とが対応付けられている決定表(デシジョンテーブル)のデータ例を示す図である。この決定表には、条件を示す事前条件および入力値と、条件に応じた動作を示す期待結果とが対応付けられており、テストケースの列毎に入出力の妥当性を検査するテストが行われることを示している。例えば、テストケース「1」では、引数である整数型「int」の変数「cnt」の値が「1」である場合に、テスト対象の関数(メソッド)を実行した戻り値であるブール型「boolean」の変数「actual」の値が偽(false)であることが期待結果である。ここで、入力値に示される引数の値を代入してテスト対象のメソッドを実行させ、戻り値が期待結果に示される値であるか否かを判定する既定テストコードを記述して予め記憶しておき、既定テストコードに含まれる変数や値を決定表に示される値に置換すれば、自動的にテストコードを生成することができる。
図10は、このような決定表と既定テストコードとに基づいて生成するテストコードの例を示す図である。符号aの箇所には変数に値を代入するテストコードが示されており、符号bの箇所には値を代入した変数を引数としてテスト対象の関数を実行するテストコードが示されており、符号cの箇所には符号bで実行したメソッドの戻り値の値を検査するテストコードが示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平5−342054号公報
【特許文献2】特開平10−207727号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、テスト対象の条件や動作は複雑なものである場合があり、全ての条件や動作に応じた既定テストコードを予め記憶しておくことは困難である。例えば、入力値として、テスト用に使用する値が記憶されたテストファイルを読み出し、読み出したテストファイルに含まれる値を引数として代入してテストを行いたい場合がある。このような状況に応じたテストコードを予め定めて記憶しておくことは困難である。また、テスト対象であるソフトウェアプログラムのプログラミング言語の仕様により、テストコードに独自の記述をしなければならない場合がある。そこで、ユーザの意図する様々なテストケースに応じたテストコードを、決定表に基づいて生成することが望ましい。
【0005】
本発明は、このような状況に鑑みてなされたもので、ユーザの意図するテストケースに応じたテストコードを、決定表に基づいて生成するテストコード生成装置、テストコード生成方法、テストコード生成プログラムを提供する。
【課題を解決するための手段】
【0006】
上述した課題を解決するために、本発明は、テスト対象であるソフトウェアプログラムの処理における条件と、条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、条件または動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、ユーザから入力された、条件または動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、ユーザテストコードの入力を受け付け、入力されたユーザテストコードをユーザテストコード記憶部に記憶させる入力部と、条件または動作毎に、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されているか否かを判定する判定部と、判定部が、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていると判定した場合、条件または動作に応じたユーザテストコードをユーザテストコード記憶部から読み出し、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていないと判定した場合、条件または動作に応じた既定テストコードを既定テストコード記憶部から読み出し、読み出したユーザテストコードまたは既定テストコードに基づいてテストコードを生成するテストコード生成部と、を備えることを特徴とするテストコード生成装置である。
【0007】
また、本発明は、判定部が、決定表における条件または動作に、予め定められた識別情報が対応付けられている場合、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていると判定することを特徴とする。
【0008】
また、本発明は、決定表記憶部には、テスト対象毎に異なる複数の決定表が記憶され、ユーザテストコード記憶部には、複数の決定表のそれぞれに対応するユーザテストコードである内部コード定義情報と、複数の決定表に共通して使用するユーザテストコードである外部コード定義情報とが記憶され、テストコード生成部は、条件または動作に対応するユーザテストコードが内部コード定義情報に含まれていれば、内部コード定義情報に含まれるユーザテストコードを読み出し、条件または動作に対応するユーザテストコードが内部コード定義情報に含まれていなければ、外部コード定義情報に含まれるユーザテストコードを読み出すことを特徴とする。
【0009】
また、本発明は、上述のユーザテストコードには、予め定められた第1の文字列が含まれており、決定表には、第1の文字列を置換する第2の文字列が含まれており、テストコード生成部は、ユーザテストコードに含まれる第1の文字列を、第2の文字列に置換したテストコードを生成することを特徴とする。
【0010】
また、本発明は、テスト対象であるソフトウェアプログラムの処理における条件と、条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、条件または動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、ユーザから入力された、条件または動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、を備えたテストコード生成装置のテストコード生成方法であって、ユーザテストコードの入力を受け付け、入力されたユーザテストコードをユーザテストコード記憶部に記憶させるステップと、条件または動作毎に、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されているか否かを判定するステップと、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていると判定した場合、条件または動作に応じたユーザテストコードをユーザテストコード記憶部から読み出し、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていないと判定した場合、条件または動作に応じた既定テストコードを既定テストコード記憶部から読み出し、読み出したユーザテストコードまたは既定テストコードに基づいてテストコードを生成するステップと、を備えることを特徴とするテストコード生成方法である。
【0011】
また、本発明は、テスト対象であるソフトウェアプログラムの処理における条件と、条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている決定表記憶部と、条件または動作に対応する既定テストコードが予め記憶されている既定テストコード記憶部と、ユーザから入力された、条件または動作に対応するユーザテストコードが記憶されるユーザテストコード記憶部と、を備えたテストコード生成装置のコンピュータに、ユーザテストコードの入力を受け付け、入力されたユーザテストコードをユーザテストコード記憶部に記憶させるステップと、条件または動作毎に、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されているか否かを判定するステップと、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていると判定した場合、条件または動作に応じたユーザテストコードをユーザテストコード記憶部から読み出し、条件または動作に対応するユーザテストコードがユーザテストコード記憶部に記憶されていないと判定した場合、条件または動作に応じた既定テストコードを既定テストコード記憶部から読み出し、読み出したユーザテストコードまたは既定テストコードに基づいてテストコードを生成するステップと、を実行させるテストコード生成プログラムである。
【発明の効果】
【0012】
以上説明したように、本発明によれば、テスト対象であるソフトウェアプログラムの条件と対応する動作とが対応付けられた決定表と、条件または動作に対応する既定テストコードと、条件または動作に対応するユーザテストコードとを記憶し、入力されたユーザテストコードをユーザテストコード記憶部に記憶させ、条件または動作毎に、対応するユーザテストコードが記憶されているか否かを判定し、対応するユーザテストコードが記憶されていると判定した場合、その条件または動作に応じたユーザテストコードを読み出し、条件または動作に対応するユーザテストコードが記憶されていないと判定した場合、その条件または動作に応じた既定テストコードを読み出し、読み出したユーザテストコードまたは既定テストコードに基づいてテストコードを生成するようにしたので、様々なテストケースに応じたテストコードを、決定表に基づいて生成することができる。
【図面の簡単な説明】
【0013】
【
図1】本発明の一実施形態によるテストコード生成装置の構成例を示すブロック図である。
【
図2】本発明の一実施形態による決定表の雛形の例を示す図である。
【
図3】本発明の一実施形態による決定表のデータ例を示す図である。
【
図4】本発明の一実施形態によるユーザテストコードのデータ例を示す図である。
【
図5】本発明の一実施形態によるクラス指定表のデータ例を示す図である。
【
図6】本発明の一実施形態によるテストコードのデータ例を示す図である。
【
図7】本発明の一実施形態によるテストコード生成装置の動作例を示すフローチャートである。
【
図8】本発明の一実施形態によるコード定義に関する情報を定める設定ファイルのデータ例を示す図である。
【
図9】従来技術による決定表のデータ例を示す図である。
【
図10】従来技術により生成するテストコードの例を示す図である。
【発明を実施するための形態】
【0014】
以下、本発明の一実施形態について、図面を参照して説明する。
図1は、本実施形態によるテストコード生成装置100の構成を示すブロック図である。テストコード生成装置100は、テスト対象であるソフトウェアプログラムをテストするテストコードを生成するコンピュータ装置であり、決定表生成部110と、入力部120と、記憶部130と、判定部140と、テストコード生成部150とを備えている。本実施形態によるテストコード生成装置100が提供するテストコード生成機能は、例えばソフトウェアの統合開発環境に対するアドオンとして実装することができる。
【0015】
決定表生成部110は、テスト対象であるソフトウェアプログラムをテストするための決定表を生成する。例えば、決定表生成部110は、決定表の雛形を予め自身の記憶領域に記憶している。
図2は、決定表生成部110が記憶している決定表の雛形の例を示す図である。決定表には、テスト対象であるクラスとメソッドとを識別する情報が含まれる。この例では、決定表には、テスト対象であるソフトウェアプログラム名を示す「テスト対象クラス」の欄と、テスト対象であるソフトウェアプログラムの関数を示す「テスト対象メソッド」の欄とが含まれる。ここでは、テスト対象であるソフトウェアプログラムが、オブジェクト指向のプログラミング言語であるJAVA(登録商標)によって記述されている例を説明するため、テスト対象の単位をクラスやメソッドとして示すが、手続き型や関数型のプログラミング言語をテスト対象とすることもできる。この場合、例えばテスト対象をファイル名としたり、関数名としたりすることができる。決定表には、条件を示す事前条件および入力値と、条件に応じた動作を示す期待値とが対応付けられており、テストケースの列毎に入出力の妥当性を検査するテストが行われることを示している。このような決定表は、例えば表計算ソフトによって生成されたファイルにおけるシートとして記憶されている。
【0016】
また、決定表生成部110は、ユーザからの要求に応じて、このような決定表の雛形をコピーして、テスト対象のクラス、メソッド毎の決定表を生成し、記憶部130の決定表記憶部131に記憶させる。ここで、決定表生成部110は、例えば単体テストの対象であるソフトウェアプログラムを外部の記憶部から読み出して解析し、テスト対象のクラス名、メソッド名、引数、戻り値等の情報を読み込んで、決定表における対象や要素、値に情報を追記して決定表生成部110に記憶させることもできる。
【0017】
入力部120は、キーボードやマウス等の入力デバイスを備えており、ユーザからの情報の入力を受け付ける。例えば、入力部120は、決定表に対する追記情報の入力を受け付けて決定表記憶部131に記憶させたり、後述するユーザテストコードの入力を受け付け、入力されたユーザテストコードを記憶部130のユーザテストコード記憶部133に記憶させたりする。
【0018】
記憶部130は、決定表記憶部131と、既定テストコード記憶部132と、ユーザテストコード記憶部133と、クラス指定表記憶部134とを備えており、テストコード生成のための各種情報が記憶される。
決定表記憶部131には、テスト対象であるソフトウェアプログラムの処理における条件と、その条件に対応する動作とが対応付けられた複数のテストケースが含まれる決定表が記憶されている。決定表は、決定表生成部110によって生成され、ユーザから入力部120に入力された情報が追記され、決定表記憶部131に記憶される。決定表記憶部131には、クラス、メソッド等のテスト対象毎に異なる複数の決定表が記憶される。
図3は、決定表記憶部131に記憶されている決定表のデータ例を示す図である。決定表には、事前条件、入力値、期待結果のブロック毎に、テストのための動作や条件が対応付けられている。このような決定表に基づいて、後述するテストコード生成部150によりテストコードが生成される。
【0019】
ここで、テストコードは、従来、決定表に含まれる情報と既定テストコード記憶部132に記憶されている既定テストコードとに基づいて生成されるが、様々なテストケースの全てに対応する既定テストコードを予め既定テストコード記憶部132に記憶しておくことは困難である。そこで、本実施形態では、決定表に予め定められたコード種別識別情報が対応付けられている項目については、既定テストコード記憶部132に記憶された既定テストコードではなく、ユーザテストコード記憶部133に記憶されているユーザテストコードに基づいてテストコードが生成される。例えば、この例では、コード種別識別情報として2列目のセルに「#」を対応付ける例を示している。また、決定表記憶部131に記憶される決定表において、コード種別識別情報が対応付けられたブロックには、ユーザテストコードにおいて定められた記法により示された場合に置換されることを示す第1の文字列と、その記法により示された第1の文字列を置換する第2の文字列とが含まれる。ここでは、「要素」の項目に第1の文字列である「class」と「data」とが対応付けられており、「値」の項目に第2の文字列である「MyBean」と「AMD0021」とが対応付けられている。
【0020】
既定テストコード記憶部132には、決定表に含まれる条件または動作に対応する既定テストコードが予め記憶されている。既定テストコードは、従来と同様の構成であり、例えば、決定表に含まれる引数を変数に代入するテストコードや、テスト対象であるメソッドを実行した戻り値が、決定表に含まれる期待結果に示される戻り値と一致するか否かを判定するテストコード等である。
【0021】
ユーザテストコード記憶部133には、ユーザから入力された、決定表における条件または動作に対応するユーザテストコードが記憶される。
図4は、ユーザテストコード記憶部133に記憶されるユーザテストコードのデータ例を示す図である。ユーザテストコード記憶部133には、キー名と、ユーザテストコードと、インポート文と、コメントとが対応付けられて記憶される。キー名は、決定表における「対象」に対応する項目であり、対応するユーザテストコードを識別する情報である。ユーザテストコードは、生成されるテストコードのうち定められた箇所に挿入される。インポート文は、対応するユーザテストコードを実行するために必要なクラスを示す。コメントは、対応するユーザテストコードを説明するコメントである。
【0022】
この例では、例えば、一行目には、決定表における入力値における「対象」の項目に「ListObjectGeneration」の文字列が対応付けられており、この文字列をキー名とした情報が記憶されている。ここで、ユーザテストコードには「${data}」や「${class}」等の文字列が含まれている。これは、決定表において指定することによって可変な項目であり、定められた記法により示された第1の文字列である。ここでは、ユーザテストコードにおける「${」から「}」までの箇所を、決定表において「${」から「}」に囲まれた文字列に対応する値に置換することを示している。例えば、決定表において「class」(第1の文字列)に「MyBean」(第2の文字列)が対応付けられているため、ユーザテストコードにおいて「List<${class}>」と記載された箇所は、「List<MyBean>」と置換される。このような置換処理は、テストコード生成部150によってテストコード生成時に行われる。ここでは、ユーザテストコードは、図に示すような表形式にて示される。このユーザテストコードは、決定表が表計算ソフトのファイルにおけるシートであれば、同一ファイルの別シートとして記憶されるようにしても良い。
【0023】
クラス指定表記憶部134には、テストコードにおける、事前条件と入力値と期待結果以外の箇所に挿入するテストコードに関する情報であるクラス指定表が記憶される。
図5は、クラス指定表記憶部134に記憶されるクラス指定表のデータ例を示す図である。ここでは、例えば「クラス外」、「クラスメンバ」、「setUp」等のブロック毎に、挿入するユーザテストコードを識別するキー名が対応付けられている。キー名に対応するユーザテストコードは、ユーザテストコード記憶部133に記憶されている。クラス指定表についても、決定表が表計算ソフトのファイルにおけるシートであれば、同一ファイルの別シートとして記憶されるようにしても良い。
【0024】
判定部140は、決定表における条件または動作毎に、その条件または動作に対応するユーザテストコードがユーザテストコード記憶部133に記憶されているか否かを判定する。例えば、判定部140は、決定表における条件または動作のブロックに、予め定められたコード種別識別情報が対応付けられている場合、その条件または動作に対応するユーザテストコードが決定表記憶部131に記憶されていると判定する。
【0025】
テストコード生成部150は、記憶部130に記憶されている情報に基づいて、テストコードを生成する。ここで、テストコード生成部150は、判定部140が、決定表における条件または動作に対応するユーザテストコードがユーザテストコード記憶部133に記憶されていると判定した場合、その条件または動作に応じたユーザテストコードをユーザテストコード記憶部133から読み出し、一方、判定部140が、その条件または動作に対応するユーザテストコードがユーザテストコード記憶部133に記憶されていないと判定した場合、その条件または動作に応じた既定テストコードを既定テストコード記憶部132から読み出す。テストコード生成部150は、読み出したユーザテストコードまたは既定テストコードに基づいて、テストコードを生成し、生成したテストコードを自身の記憶領域に記憶する。この際、テストコード生成部150は、ユーザテストコードに第1の文字列が含まれていれば、第1の文字列を第2の文字列に置換したテストコードを生成する。テストコード生成部150は、例えばテスト実行ツール等に、生成したテストコードを出力する。
【0026】
図6は、テストコード生成部150が生成するテストコードのデータ例を示す図である。符号aに示す箇所には、インポート文が記載される。符号bに示す箇所には、クラス指定表において「クラス外」の項目に指定されたユーザテストコードが挿入されている。符号cに示す箇所には、テストを実行するテストクラスが記載されている。符号dに示す箇所には、クラス指定表において「クラスメンバ」の項目に指定されたユーザテストコードが挿入されている。符号eに示す箇所には、クラス指定表において「setUp」の項目に指定されたユーザテストコードが挿入されている。
【0027】
符号fに示す箇所には、決定表における「入力値」の項目に指定されたユーザテストコードが挿入されている。符号gに示す箇所には、既定テストコードが挿入されており、テスト対象のメソッドの実行文が記載されている。符号hに示す箇所には、既定テストコードが挿入されており、期待結果の判定文が記載されている。符号iに示す箇所には、決定表における「期待結果」の項目に指定されたユーザテストコードが挿入されている。このようなテストコードが実行されることにより、ユーザの意図に応じたテストを行うことができる。
【0028】
次に、図面を参照して、本実施形態によるテストコード生成装置100の動作例を説明する。
図7は、本実施形態によるテストコード生成装置100の動作例を示すフローチャートである。
決定表生成部110は、自身の記憶領域に記憶されている決定表雛形をコピーして決定表を生成し、決定表記憶部131に記憶させる。ユーザからの操作要求に応じて、テストコード生成装置100は、決定表記憶部131に記憶されている決定表を読み出し、ディスプレイに表示させる(ステップS1)。入力部120は、ユーザから、決定表のうち、ユーザテストコードによるテストを実行したい箇所に対するコード種別識別情報(#)の入力を受け付ける(ステップS2)。
【0029】
また、入力部120は、ステップS2においてコード種別識別情報が入力されたブロックに対するユーザテストコードの入力を受け付け、ユーザテストコード記憶部133に記憶させる(ステップS3)。また、入力部120は、クラス指定表に対する入力を受け付け、クラス指定表記憶部134に記憶させる(ステップS4)。同様に、入力部120は、ステップS4においてクラス指定表にコード種別識別情報が入力された箇所に対するユーザテストコードの入力を受け付け、ユーザテストコード記憶部133に記憶させる(ステップS5)。
【0030】
ユーザから、入力部120にテストコード生成要求が入力されると、テストコード生成部150は、テストコードの生成を開始する(ステップS6)。まず、テストコード生成部150は、クラス指定表記憶部134に記憶されているクラス指定表と、クラス指定表に示されるキー名に対応付けられてユーザテストコード記憶部133に記憶されているユーザテストコードを読み出す。テストコード生成部150は、クラス指定表に示されるブロックの対応箇所に、ユーザテストコードを挿入する(ステップS7)。
【0031】
テストコード生成部150は、決定表に含まれるテストケース毎にテストコードを生成する(ステップS8)。テストコード生成部150は、決定表のブロック毎に、コード種別識別情報が対応付けられているか否かを判定する(ステップS9)。テストコード生成部150は、コード種別識別情報が対応付けられていると判定すると(ステップS9:YES)、対応するキー名に対応付けられてユーザテストコード記憶部133に記憶されているユーザテストコードとインポート文とコメントとを読み出し、テストコードに挿入する。また、ユーザテストコードに定められた第1の文字列が含まれていれば、決定表から第2の文字列を読み出して置換する(ステップS10)。
【0032】
一方、ステップS9において、コード種別識別情報が対応付けられていないと判定すると(ステップS9:NO)、既定テストコード記憶部132から対応する既定テストコードを読み出し、テストコードに挿入する(ステップS11)。テストコード生成部150は、全てのテストケースに対応するテストコードを生成していなければ(ステップS12:NO)、ステップS8に戻る。全てのテストケースに対応するテストコードを生成すれば(ステップS12:YES)、処理を終了する。
【0033】
なお、本実施形態では、特定の決定表に対するユーザテストコードがユーザテストコード記憶部133に記憶される例を示したが、例えば複数の決定表に共通して使用するユーザテストコードを定義することもできる。この場合、ユーザテストコード記憶部133には、複数の決定表のそれぞれに対応するユーザテストコードである内部コード定義表と、複数の決定表に共通して使用するユーザテストコードである外部コード定義表が記憶される。すなわち、単一の決定表について使用するユーザテストコードを定義する内部コード定義表とは別に、複数のクラスが含まれるパッケージにおいて共通して使用するテストコードを定義する外部コード定義表を予めユーザテストコード記憶部133に記憶させておく。
【0034】
そして、テストコード生成部150は、決定表に含まれる条件または動作に対応するユーザテストコードが内部コード定義表に含まれていれば、その内部コード定義表に含まれるユーザテストコードを読み出し、決定表に含まれる条件または動作に対応するユーザテストコードが内部コード定義表に含まれていなければ、外部コード定義表に含まれるユーザテストコードを読み出す。すなわち、テストコード生成部150は、決定表記憶部131に記憶されているユーザ定義表にコード種別識別情報が記載されている場合、まず内部コード定義表を読み出し、対応するユーザテストコードが内部コード定義表に含まれるか否かを判定する。ユーザテストコードが内部コード定義表に含まれていれば、そのユーザテストコードを読み出してテストコードに挿入する。ユーザテストコードが内部コード定義表に含まれていなければ、外部コード定義表を読み出し、対応するユーザテストコードを読み出してテストコードに挿入する。
【0035】
これにより、内部コード定義表と外部コード定義表とに同一のキー名が存在する場合には、内部コード定義表に記憶されているユーザテストコードが優先的に適用される。すなわち、同一のパッケージに含まれる複数のクラスに同一のキー名のユーザテストコードを利用させたい場合でも、特定のクラスにのみ異なるユーザテストコードを利用させたい場合があるからである。ここでは、外部コード定義表のみを利用させ、内部コード定義表を利用させないようにすることもできる。この場合、内部コード定義表にキー名に対応するユーザテストコードが記憶されていても、内部コード定義表からユーザテストコードを読み出さず、外部コード定義表からユーザテストコードを読み出してテストコードに挿入する。
図8は、使用するコード定義に関する情報を定める設定ファイルのデータ例を示す図である。符号aと符号bとの箇所には、外部コード定義表のパスが示されており、符号cの箇所には、内部コード定義表の使用可否を定める情報が示されている。
【0036】
以上説明したように、本実施形態によれば、予め定められた既定テストコードが存在する場合には既定テストコードに基づいて従来通りにテストコードを生成し、ユーザからコード種別識別情報が記入されたブロックについては、ユーザテストコード記憶部133に記憶されたユーザテストコードに基づいてテストコードを生成するようにした。これにより、既定テストコードとは異なる動作によりソフトウェアプログラムのテストを行いたい場合にも、決定表とユーザテストコードとを記憶部130に記憶させることにより、ユーザの意図した動作によるテストを行うことが可能となる。また、テストコード生成装置100は、複数のテストケースについて同様のユーザテストコードを挿入したい場合にも、テストコード生成装置100がユーザテストコード記憶部133からユーザテストコードを読み出して、異なるテストケースに同一のテストコードを自動的に挿入する。このため、ユーザはテストコードにおけるテストケース毎に同一のテストコードを繰り返し記載しなくとも、決定表とユーザテストコードとに必要な情報を記載することによって、簡単にテストコードを生成させることができる。このように、本実施形態のテストコード生成装置100によれば、従来プログラマが作成していた複雑なテストコードを自動で生成することができるため、テスト工程における工数削減をすることができる。
【0037】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりテストコードの生成を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0038】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【符号の説明】
【0039】
100 テストコード生成装置
110 決定表生成部
120 入力部
130 記憶部
131 決定表記憶部
132 既定テストコード記憶部
133 ユーザテストコード記憶部
134 クラス定義表記憶部
140 判定部
150 テストコード生成部