以下、プログラムテスト決定装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態)
図1は、本実施の形態におけるプログラムテスト決定装置1のブロック図である。
プログラムテスト決定装置1は、テスト命令対応情報受付部101、命令出現情報取得部102、網羅テスト決定部103、テスト別工数情報取得部104、工数算出部105、出力部106、テスト別工数情報格納部107、テスト識別情報格納部110、ソースプログラム格納部111、命令パターン格納部112、テスト管理情報格納部113、パターン管理情報格納部114、およびテスト命令対応情報取得部115を備えている。
プログラムテスト決定装置1は、例えば、命令パターンを利用してソースプログラムを変換する変換装置や変換方法によって変換された複数のソースプログラムの動作検証等を行うために用いられるテストの組合せを決定するための装置である。
テスト命令対応情報受付部101は、複数のソースプログラムに対して行われる複数のテストをそれぞれ識別するテスト識別情報と、当該テスト識別情報に対応するテストにおいて実行されるソースプログラムの組合せに含まれる1以上の命令パターンと、の対応関係を示す情報であるテスト命令対応情報を受け付ける。複数のソースプログラムは、例えば、ユーザ等により予め用意されたテストの対象となるソースプログラムである。
ソースプログラムは、例えば、命令パターンを利用した変換ツール(例えば、変換用ソフトウェア等)を用いて、または命令パターンを利用した変換方法により変換されるソースプログラムである。ただし、ソースプログラムは、例えば、命令パターンを利用した変換ツールや変換方法を用いて変換されたソースプログラムであってもよい。ソースプログラムは、例えば、いわゆるマイグレーション元またはマイグレーション先となるソースプログラムである。ソースプログラムは、それぞれ、COBOL言語や、C言語、perl言語等、どのような言語のソースプログラムであっても良い。また、スクリプト等であっても良い。また、これらの言語をカスタマイズした言語のソースプログラムであっても良い。ここでの変換とは、変換前のソースプログラムを、変換後のソースプログラムに変換する変換である。ソースプログラムは、例えば、実行ファイルや実行モジュール等である。なお、複数のソースプログラムは、実質的に複数のソースプログラムとして実行可能なものであればよく、例えば、形式的に一つのファイルを構成している複数のソースプログラムであっても良い。なお、ここで述べる複数のソースプログラムは、複数のテストのいずれかを行う際に、少なくとも一度は読み出されて実行されるソースプログラムであることが好ましい。
命令パターンとは、ソースプログラムにおいて利用されている命令における文字列等の情報の出現するパターン等を示す情報である。また、命令パターンは、命令において出現する文字列等の情報のうちの一部、例えば、変数やリテラル文字や関数名等を、固定されていない情報であることを示すための、予め指定されている字句要素(例えば単語)で置き換えた情報であっても良い。この置き換える情報をここでは例えば変換語と呼ぶ。この変換語については、当該変換語が配置されている位置に配置される情報のデータタイプやデータサイズや属性等が判断可能な情報であることが好ましい。命令パターンは、例えば、命令語と、ユーザ指定語と、変換語と、その他の文字列とのうちの1以上の組み合わせで構成される。また、命令パターンを、ソースプログラムにおける予約語(例えば命令語等)の出現するパターン、非予約語(例えば、変数やリテラル文字や関数名等)の出現するパターン、または予約語および非予約語の出現するパターンと考えても良く、この場合、命令パターンは、例えば、ソースプログラムにおける予約語の出現するパターン、非予約語の出現するパターン、または予約語および非予約語の出現するパターンの少なくとも一つを示す情報であってもよい。具体例を挙げると、命令パターンは、「命令語 <引数1> <引数2>」という予約語と非予約語の配列パターンを示す情報である。ただし、この場合、「命令語」は、「OPEN」や「MOVE」、「CALL」等の予約語であり、「<引数1>」、「<引数2>」は変数文字列である非予約語である。また、命令パターンは、特定の予約語、例えば命令語と不特定の予約語とがどのような順番で配列されているかを示す情報等であっても良い。予約語とは、プログラミング言語の仕様等で定められた、変数名や関数名、クラス名等の識別子名として使用できない字句要素である。
ここでの命令パターンは、テスト命令対応情報受付部101が受け付ける複数のソースプログラムから、ユーザ等の手作業や、図示しない命令パターンを取得するツール等を用いて取得された命令パターンである。変換前のソースプログラムに現れる命令パターンであっても良いし、変換前のソースプログラムに対応した当該変換前のソースプログラムを変換するための命令パターンであってもよい。
なお、上述した命令語とは、ソースプログラムとして意味のある字句であり、演算や入出力の処理を指示する語である。ここで述べる命令語とは、例えば、演算子や命令部やトークンの一部等の全てまたは一部である。また、COBOL等の言語特有の命令語と考えても良い。
また、変換語とは、ソースプログラムに現れ得る文字列の変換条件と対応付けられた文字列である。具体的には、上述した変数や関数名やリテラル文字等の非固定語の、置き換えに用いられる1以上の文字列である。変換語は、所定の属性やデータタイプ等を有する非固定語が配置されていることを示すための文字列であってもよい。
また、ユーザ指定語とは、ユーザが指定した文字列である。ユーザ指定語は、例えば、変換語への変換を望まない文字列である。
ここで述べるテストとは、例えば、テスト命令対応情報受付部101が受け付けた複数のソースプログラムに対して、予めユーザ等により用意された複数のテストである。ここで述べるテストは、例えば、命令パターンを利用して変換された複数のソースプログラムのテストであり、具体的には、変換前のソースプログラムに含まれる第一命令パターンに対応する部分を、当該命令パターンと対になる第二命令パターンに対応するように変換手段を用いて変換して得られた変換後のソースプログラムが正常に動作するか否かを調べるためにユーザ等により実施されるテストである。ここで述べるテストは、正常に動作しない箇所を修復する処理を含むと考えても良い。テストは、例えば、変換後ソースプログラムを実行させて予めテスト用に用意された所定の情報を与えた場合に、当該変換後ソースプログラムが正常に動作した場合に出力されると考えられる所定の情報が、出力されるか否かを判断することで行われる。ソースプログラムが正常に動作するか否かを確認するためにどのようなテストが行われうるかは、通常、各ソースプログラムに対して予め決まっている。ここで述べるテストは、2以上のテストを含んでいてもよい。即ち一のテストはグループ化された複数のテストにより構成されていてもよい。
複数のソースプログラムに対して行われる複数のテストのそれぞれは、例えば、テスト命令対応情報受付部101が受け付けた複数のソースプログラムのうちの1以上のソースプログラムの組合せを用いたテストであれば良く、全ての複数のソースプログラムを用いるものでなくてよい。各テスト間においては、ソースプログラムを重複して実行させても良い。各テストは、例えば、一以上のソースプログラムの組合せを呼び出すことによって実行されるジョブ単位で行われるテストである。例えば、各テストはJCL(Job Control Language)等により1以上のソースプログラムを呼び出して実行されるバッチ処理単位のテストである。また、オンライン処理等については、1以上のソースプログラムによって表示される操作画面単位で行われるテストであっても良い。操作画面単位で行われるテストとは、具体的には、操作画面等に関連して動作する部分についてのテストである。ここで述べるテストは、統合テストであっても良いし、結合テストであっても良いし、モジュールテストであっても良い。
テスト識別情報とは、複数のソースプログラムに対して行われる複数のテストをそれぞれ識別可能な情報であればよい。テスト識別情報は、例えば、テスト名や、テスト項目や、テストケース等である。また、テスト識別情報は、一のテストにおけるテスト対象となるジョブ(処理)を指定する情報でもよい。例えばテスト対象となるバッチ処理を指定するためのバッチ処理名等の情報や、テスト対象となる画面を識別するためのテスト画面名等の情報であっても良い。また、テスト識別情報は、一のテストにおいて実行させる1以上のソースプログラムの組合せを指定する情報、例えばプログラム名の組合せ等でもよい。また、テスト識別情報は、テストにおいて実行される1以上のソースプログラムを呼び出すための、JCL等で記述された情報や、テスト対象となる画面を呼び出すために用いられる情報を識別する情報であっても良いし、例えばJCLファイル名等のこれらの情報を識別する情報でもよい。また、テスト識別情報は、テストにおいて実行されるソースプログラム自身であっても良い。
テスト命令対応情報は、テスト識別情報と、このテスト識別情報に対応するテストにおいて実行される複数のソースプログラムのうちの1以上の組合せに含まれる1以上の命令パターンと、の対応関係を示す情報である。テスト命令対応情報は、例えば、テスト識別情報と、命令パターンとを一のレコードの二つの項目の値として管理情報等である。但し、テスト命令対応情報は、例えば、対応するテスト識別情報と、命令パターンとを管理できる情報であればどのような情報であってもよく、データ形式等は問わない。テスト命令対応情報は、複数のテスト識別情報と、複数の命令パターンとを対応付けたものであっても良い。例えば、テスト命令対応情報は、複数のテスト識別情報に対応するテストにおいて実行されるソースプログラムに含まれる命令パターンの全てと、複数のテスト識別情報のそれぞれに対応するテストにおいて実行される命令パターンとの対応関係を示す情報であってもよい。なお、この場合、テスト命令対応情報における複数のテスト識別情報に対応するテストにおいて実行される複数のソースプログラムに含まれる全ての命令パターンにおいては、重複した命令パターンは、一つのみを残して削除するようにしても良い。
テスト命令対応情報においては、1以上のソースプログラムに対して行われる複数のテストに対応した複数のテスト識別情報と、この複数のテスト識別情報が示す複数のテストのそれぞれにおいて実行されるソースプログラムに含まれる1以上の命令パターンとが結果的に対応付けられていればよい。例えば、テスト識別情報と対応付けられる命令パターンは、変換後の命令パターンであっても、変換前の命令パターンであっても良い。例えば、変換前の命令パターンは、変換後の命令パターンと対応しているため、テスト識別情報と変換前の命令パターンとを対応付けることは、テスト識別情報と、テスト識別情報が示すテストにおいて実行される変換後のソースプログラムに含まれる1以上の変換後の命令パターンとを対応付けることと結果的に同じことと考えて良い。
テスト識別情報と、命令パターンとを対応付けるとは、テスト識別情報と命令パターンとを直接対応付けることであっても良いし、テスト識別情報と命令パターンの識別情報とを対応付けることのように、テスト識別情報と命令パターンとを間接的に対応付けることであっても良い。
なお、テスト識別情報が示すテストにおいて実行される1以上のソースプログラムの組に含まれる1以上の命令パターンがどのようにして検出されたものであるかは問わない。また、テスト識別情報と一以上の命令パターンとを対応付けたテスト命令対応情報がどのように生成されたものであるかは問わない。例えば、特許第4115511号公報に記載されているようなプログラムパターン分析装置等の、比較部が命令パターンのいずれにも一致しないと判断した変換単位情報に対応した命令パターンであって、一致しないと判断された変換単位情報に含まれる文字列のうちの、変換語格納部に格納されている変換条件に一致する文字列を、当該変換条件に対応付けられた変換語に変換して構成された命令パターンを示す情報である比較命令パターンを新たな命令パターンとしてパターン情報格納部に蓄積する技術を用いて、テスト識別情報が示すテストにおいて実行される1以上のソースプログラムの組から、命令パターンを取得しても良い。
テスト命令対応情報受付部101は、このようなプログラムパターン分析装置等が出力する命令パターンと、当該命令パターンの抽出元となる1以上のソースプログラムの組を用いたテストを識別するテスト識別情報とを対応付けたテスト命令対応情報を受けつけるようにしても良い。なお、ここでは一例として、後述するテスト命令対応情報取得部115が取得したテスト命令対応情報を、テスト命令対応情報受付部101が受け付ける場合について説明する。
受け付けとは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。なお、ここで述べるプログラムとは、コンピュータの行う処理(演算・動作・通信など)の手順を指示したもののことである。
テスト命令対応情報の入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。テスト命令対応情報受付部101は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。なお、テスト命令対応情報受付部101が、テスト命令対応情報を作成する装置や、後述するテスト命令対応情報取得部115等が取得したテスト命令対応情報を受け付ける場合、このテスト命令対応情報受付部101は、入力インターフェース等と考えても良い。
命令出現情報取得部102は、複数のソースプログラムに含まれる命令パターンを示す情報である命令出現情報を取得する。ここで述べる複数のソースプログラムは、例えば、複数のテストの少なくともいずれかにおいて実行されるソースプログラムである。命令出現情報は、重複したい命令パターンを有さないものであることが好ましい。命令出現情報取得部102がどのように命令出現情報を取得するかは問わない。例えば、命令出現情報取得部102は、後述する命令パターン格納部112等の格納部に予め格納されている、複数のテストにおいて実行される複数のソースプログラムに含まれる命令パターンを示す命令出現情報を読み出したり、ユーザ等により入力される命令出現情報を受け付けてもよい。取得した命令出現情報は、例えば、図示しない記憶媒体等に蓄積される。
なお、テスト命令対応情報が、複数のテスト識別情報が示すテストにおいて実行される複数のソースプログラムに含まれる命令パターンの全てを取得したものと、複数のテスト識別情報がそれぞれ示すテストにおいて実行される1以上のソースプログラムの組に含まれる命令パターンとの対応関係を示す情報等である場合のように、テスト命令対応情報が、予め、複数のテスト識別情報が示すテストにおいて実行される複数のソースプログラムに含まれる命令パターンの全てを有するものであり、このテスト命令対応情報からテスト識別情報の組合せを決定する場合等においては、命令出現情報取得部102は、このテスト命令対応情報から、複数のテスト識別情報が示す複数のテストにおいて実行される複数のソースプログラムに含まれるに命令パターンの全てを取得しても良い。
また、命令出現情報取得部102は、例えば、テスト命令対応情報受付部101が受け付けたテスト命令対応情報を用いて、複数のテスト識別情報が示すテストにおいて実行されるソースプログラムに含まれる命令パターンを示す情報である命令出現情報を取得してもよい。例えば、命令出現情報取得部102は、テスト命令対応情報受付部101が受け付けたテスト命令対応情報が示す複数のテスト識別情報にそれぞれ対応付けられた一以上の命令パターンを全て取得して、テスト命令対応情報が示す複数のテスト識別情報に含まれる全ての命令パターンを示す命令出現情報を取得する。なお、命令パターンの全てを取得する際に、重複する命令パターンについては、一つを残して削除することが好ましい。即ち、ユニーク処理を行うようにしても良い。なお、テスト命令対応情報が対応付けている命令パターンが、命令パターンそのものである場合には、命令パターン情報同士が完全一致するか比較して重複を検出し、テスト命令対応情報が対応付けている命令パターンが、命令パターンの識別情報である場合には、命令パターンの識別情報同士が完全一致するか比較して重複を検出すればよい。
なお、テスト命令対応情報に含まれる命令パターンとは、命令パターンそのもので示す情報であっても、命令パターンの識別情報で示す情報であってもよい。
なお、ここで述べる取得とは、受け付けや読み出し等による取得も含む概念である。命令出現情報取得部102は、通常、MPUやメモリ等から実現され得る。命令出現情報取得部102の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。また、命令出現情報取得部102は、情報を受け付けたり読み出したりするための入力インターフェース等を有していても良い。
網羅テスト決定部103は、テスト命令対応情報受付部101が受け付けたテスト命令対応情報を用いて、1以上のテスト識別情報の組合せを決定する。ここで述べる決定とは、具体的には、組合せを構成する1以上のテスト識別情報を取得することである。網羅テスト決定部103は、具体的には、テスト識別情報の組合せに対応する命令パターンが、命令出現情報が示す命令パターンのうちの予め指定された比率以上の命令パターンと一致するテスト識別情報の組合せを、テスト命令対応情報を用いて決定する。テスト識別情報の組合せは、テストの組合せと考えても良い。
具体例を挙げると、網羅テスト決定部103は、テスト命令対応情報受付部101が受け付けた全てのテスト命令対応情報に含まれる全k個のテスト識別情報の中からn個(但し、nは、1からkまでの自然数)のテスト識別情報を取り出す場合の組合せを求め、テスト識別情報の組合せのそれぞれについて、テスト命令対応情報が示す当該組合せに対応付けられた命令パターンと命令出現情報が示す全ての命令パターンとを比較して、命令出現情報が示す全ての命令パターンのうちの予め指定された比率以上の命令パターンと一致する命令パターンを含んでいるか否か、即ち網羅率が予め指定された比率以上であるか否かを判断していき、所定の比率以上の命令パターンが一致するテスト識別情報の組合せを、テスト対象となるテスト識別情報の組合せに決定する処理を行う。
なお、命令出現情報が示す全ての命令パターンに対する、1以上のテスト識別情報の組合せ等に対応付けられた命令パターンのうちの、命令出現情報が示す命令パターンと一致する命令パターンの比率を、ここでは網羅率と呼ぶ。また、複数のソースプログラムに含まれる命令パターンに対する、1以上のテスト識別情報の組合せに対応したテストにおいて実行されるソースプログラムに含まれる命令パターンのうちの、複数のソースプログラムに含まれる命令パターンと一致する命令パターンの比率を、ここでは網羅率と呼ぶ。
網羅テスト決定部103は、例えば、命令出現情報が示す全ての命令パターンに対する、テスト識別情報の組合せに対応する命令パターンのうちの、命令出現情報が示す命令パターンに一致する命令パターンの比率を算出し、その算出結果を用いて、予め指定した比率以上か否かの判断を行う。
ただし、ここでの予め指定した比率以上か否かの判断とは、結果的に予め指定した比率を以上か否かの判断と同様の判断を行うことも含む概念であり、必ずしも比率を算出する必要はない。例えば、予め指定した比率が100%である場合、取得した全ての命令パターンの数が、命令出現情報が示す全ての命令パターンの数と一致する場合に、予め指定した比率以上であると判断しても良く、このような判断処理も、上述した予め指定された比率以上の命令パターンと一致する命令パターンを含んでいるか否かの判断と考える。また、複数のテスト識別情報に対応付けられている全ての命令パターンの数に対する予め指定した比率の命令パターンの数を算出し、取得した全ての命令パターンの数が、この算出した命令パターンの数以上である場合に、予め指定した比率を超えると判断しても良い。かかることは、以下の処理等においても同様である。なお、以下、命令パターンの数を命令パターン数と称す。
また、網羅テスト決定部103は、以下のようにテスト対象となるテスト識別情報の組合せを決定する処理を行ってもよい。例えば、網羅テスト決定部103は、テスト命令対応情報受付部101が受け付けたテスト命令対応情報に含まれる複数のテスト識別情報のうちの一以上のテスト識別情報の組合せについて、当該組合せを構成する全てのテスト識別情報に対応付けられた全ての命令パターンを取得する。このとき重複する命令パターンについては1つだけを取得するユニーク処理を行う。そして、取得した全ての命令パターンの数が、命令出現情報が示す全ての命令パターンのうちの予め指定された比率以上であるか否かを比率等を算出して判断し、予め指定された比率以上である場合に、そのテスト識別情報の組合せが組合せを決定する条件を満たすと判断して、そのテスト識別情報の組合せを予め指定された比率以上の命令パターンと一致する命令パターンに対応したテスト識別情報の組合せとして決定する。予め指定された比率以上でない場合は、このような決定は行わない。このような処理を、組合せを変更しながら実行することで、命令出現情報が示す全ての命令パターンのうちの予め指定された比率以上の命令パターンと一致する命令パターンに対応した1以上のテスト識別情報の組合せを決定することができる。なお、上記において予め指定した比率以上であるか否かの判断は、例えば、比率についての予め図示しない記憶媒体等に用意されたしきい値との比較等により行われる。
なお、テスト命令対応情報受付部101が受け付けた全てのテスト識別情報を用いる組合せについては、全てのテスト識別情報の組合せに含まれる全ての命令パターンと、命令出現情報が示す全ての命令パターンとが常に一致するため、上記のような組合せを決定する処理から除外してもよい。
また、上記のようなテスト識別情報の組合せが所定数、例えば1つだけ決定された時点で、決定する処理を終了しても良いし、終了しなくても良い。また、組合せが複数取得された場合、その中からさらに、予め指定された条件に応じて一の組合せを選択しても良い。例えば、テスト識別情報の組合せに対応する命令パターンのうちの、命令出現情報が示す命令パターンに一致する比率(即ち網羅率)が最も高くなるようなテスト識別情報の組合せを選択するようにしてもよい。
網羅テスト決定部103は、命令出現情報が示す全ての命令パターンと一致する命令パターンと対応付けられた1以上のテスト識別情報の組合せを検出するようにしてもよい。即ち、上述した予め指定された比率、即ち網羅率が100%となる1以上のテスト識別情報の組合せを検出してもよい。これにより、決定されたテスト識別情報の組合せに対応する命令パターンが、テスト命令対応情報受付部101が受け付けた1以上のテスト識別情報に対応する命令パターンの全てを網羅することとなる。これにより、決定されたテスト識別情報の組合せを構成する全てのテスト識別情報が示すテストを行うことで、例えば、テスト命令対応情報受付部101が受け付けた1以上のテスト識別情報に対応する全ての命令パターンについて、当該命令パターンを用いて行われたソースプログラムの変換が適切なものであるか否かの確認を行うことができる。
また、網羅テスト決定部103は、さらに、予め指定された比率以上の命令パターンと対応付けられたテスト識別情報の組合せのうちの、テスト識別情報の数が最も少なくなるテスト識別情報の組合せを決定するようにしてもよい。例えば、上記の具体例のようにして、予め指定された比率以上の命令パターンと対応付けられたテスト識別情報の組合せを検出した後、組合せを構成するテスト識別情報の数が最も少ない組合せを選択するようにしても良い。また、上述した場合のようにテスト識別情報の組合せを検出する際に、組合せを構成するテスト識別情報の数が少ないものから順番に、組合せに含まれるテスト識別情報に対応する命令パターンの数が、命令出現情報が示す全ての命令パターンのうちの予め指定された比率を超えるか否かの判断を行うようにしても良い。そして、比率を超える組合せが検出された時点で、当該検出された組合せを決定する処理を終了しても良い。あるいは、命令パターン数が所定の比率を超える組合せが決定された時点で、当該検出された組合せと同じ数のテスト識別情報の組合せについてだけ、組合せを決定する処理を継続しても良い。このとき、組合せが複数取得された場合、その中からさらに、予め指定された条件に応じて一の組合せを選択しても良い。例えば、重複した命令パターンも全てそのまま残してテスト識別情報の組合せに含まれる命令パターンを全て取得した場合の命令パターン数が、最も多い組合せを選択するようにしてもよいし、テスト識別情報の組合せに対応する命令パターンの、命令出現情報が示す命令パターンに一致する比率(即ち網羅率)が最も高くなるようなテスト識別情報の組合せを選択するようにしてもよい。
また、網羅テスト決定部103は、テスト識別情報の組合せを決定後、決定したテスト識別情報の組合せを構成する各テスト識別情報に対し、対応する命令パターン数の多い方が早い順番となるように順番を決定してもよい。ここで決定する順番は、例えば、テストが行われる順番である。例えば、決定された組合せに含まれるテスト識別情報の中から、対応する命令パターン数の多いものから順に、テスト識別情報を検出していき、当該検出した順番の早さが早いものほど、早い順番であることを示す順番を示す情報をテスト識別情報に対応付けるようにしても良い。あるいは、順番を示す情報を対応付ける代わりに、検出した順番が早い順にテスト識別情報をソートしても良い。あるいは、例えば、決定された組合せに含まれるテスト識別情報の中から、対応する命令パターン数の少ないものから順に、テスト識別情報を検出していき、当該検出した順番が早いものほど、遅い順番であることを示す順番を示す情報をテスト識別情報に対応付けるようにしても良い。
網羅テスト決定部103は、通常、MPUやメモリ等から実現され得る。網羅テスト決定部103の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
テスト別工数情報取得部104は、網羅テスト決定部103が決定したテスト識別情報の組合せを構成する全てのテスト識別情報について、予め各テスト識別情報のそれぞれに対応付けられたテスト別工数情報を取得する。テスト別工数情報とは、各テスト識別情報が示すテストを実行した際に要する工数を示す情報である。工数とは、作業工数である。工数は、テストに必要な時間と考えても良い。工数の単位等は問わない。ここで述べる工数は、テストによって検出されたバグ等を修正する工数を含んでも良い。テスト別工数情報取得部104は、例えば、後述するテスト別工数情報格納部107に、予めテスト識別情報と対応付けられて格納されているテスト別工数情報から、網羅テスト決定部103が決定したテスト識別情報の組合せを構成する全てのテスト識別情報に対応したテスト別工数情報をそれぞれ取得する。
なお、テスト別工数情報取得部104は、上記のようにテスト別工数情報を取得する代わりに、網羅テスト決定部103が決定したテスト識別情報の組合せを構成する全てのテスト識別情報について、それぞれに対応した命令パターン数を変数とした予め指定された増加関数を用いて、各テスト識別情報を実行させたテストを行う際に要する工数を示す情報であるテスト別工数情報を取得するようにしてもよい。ここで述べる増加関数は、予め指定された増加関数である。増加関数は、例えば、命令パターン数に、予め指定されている正の比率を乗算する関数である。あるいは命令パターン数の範囲に対応して予め用意された、値が増加するに従って、値が増加あるいは維持されるテスト別工数情報から、テスト識別情報に対応した命令パターン数が含まれる範囲に対応付けられたテスト別工数情報を取得しても良い。このような場合も、ここでは、増加関数を用いてテスト別工数情報を取得すると考える。この増加関数は、テスト識別情報ごとや、ソースプログラム毎に予め指定されていても良い。増加関数を示す式等は、例えば、図示しない記憶媒体等に値予め蓄積されている。
テスト別工数情報取得部104は、通常、MPUやメモリ等から実現され得る。テスト別工数情報取得部104の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
工数算出部105は、テスト別工数情報取得部104が各テスト識別情報について取得したテスト別工数情報が示す工数を加算した情報を用いて、1以上のソースプログラムのテストに要する工数を算出する。例えば、工数算出部105は、テスト別工数情報が示す工数を加算した値を、そのまま、テストに要する工数としても良いし、加算した値に、予め指定された値、例えば「1.1」等を乗算して、テストに要する工数として算出しても良い。なお、加算の際に、テスト別工数情報取得部104が算出したテスト別工数情報以外の工数を示す値を更に加算するようにしてもよい。例えば、予め指定されたテストの準備の時間や、テスト結果をまとめたりする時間の値を加算してもよい。工数算出部105は、通常、MPUやメモリ等から実現され得る。工数算出部105の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
出力部106は、網羅テスト決定部103が決定したテスト識別情報の組合せを示す情報を出力する。テスト識別情報の組合せを示す情報は、結果的にテスト識別情報の組合せを示すことができる情報であればよい。テスト識別情報の組合せを示す情報は、例えば、網羅テスト決定部103が決定したテスト識別情報の組合せを構成するテスト識別情報である。また、決定されたテスト識別情報の組合せを構成する各テスト識別情報に対応した他の識別情報の組合せ等であっても良い。
また、網羅テスト決定部103がテスト識別情報の順番を決定する場合、出力部106は、検出したテスト識別情報の組合せを、網羅テスト決定部103が決定した順番が判別できるよう出力する。例えば、テスト識別情報を示す情報、例えばテストの識別情報に、順番を示す情報、例えば数字等を付与して出力しても良い。あるいは、テストを行う順番に、テスト識別情報を示す情報をソートして出力しても良い。
また、出力部103は、網羅テスト決定部103が、順番等を決定する際に算出した各テスト識別情報についての網羅率を示す情報やテスト識別情報の組合せについての命令パターンの網羅率を示す情報を取得し、当該網羅率を示す情報を、例えばテスト識別情報の組合せを示す情報と対応付けて出力するようにしても良い。もしくはこれらの網羅率を、出力部106が算出して出力しても良い。
また、出力部103は、工数算出部105が算出した工数を出力してもよい。例えば、出力部103は、算出した工数をテスト識別情報の組合せを示す情報と対応付けて出力するようにしてもよい。
ここで述べる出力とは、ディスプレイへの表示、プロジェクターを用いた投影、プリンタへの印字、音出力、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念である。
出力部106は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。出力部106は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
テスト別工数情報格納部107には、テスト識別情報と、このテスト識別情報が示すテストを実行する際に要する工数を示す情報であるテスト別工数情報とが、対応付けられて格納されている。テスト別工数情報格納部107において、テスト識別情報とテスト別工数情報とは、直接対応付けられて格納されていても良いし、間接的に対応付けられて格納されていても良い。間接的に対応付けられているとは、例えば、それぞれに対応する識別情報同士が対応付けられていることや、例えば、それぞれに対応する識別情報同士が対応付けられていることや、一方の情報と他方の情報の識別情報とが対応付けられていること等を意味する。また、これらの情報は、物理的に同じ記憶媒体に格納されていても良いし、物理的に異なる記憶媒体に格納されていても良い。テスト別工数情報格納部107にテスト識別情報とテスト別工数情報とが蓄積される過程等は問わない。テスト別工数情報は、例えばユーザ等により予め指定される情報である。テスト別工数情報格納部107は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
テスト識別情報格納部110には、2以上の上述したようなテスト識別情報が格納されている。テスト識別情報格納部101に格納されるテスト識別情報は、例えば、命令パターンを用いて変換を行った複数のソースプログラムの検証等のために行われるテストの識別情報である。テスト識別情報格納部101にテスト識別情報が蓄積される過程等は問わない。テスト識別情報格納部101は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
ソースプログラム格納部111には、2以上の上述したようなソースプログラムが格納されている。ソースプログラム格納部111に格納されるソースプログラムは、例えば命令パターンを用いた変換対象となる命令パターンあるいは変換された命令パターンである。このソースプログラムは、テスト識別情報格納部101に格納されるテスト識別情報のいずれかが示すテストにおいて、テスト対象として実行されるソースプログラムであることが好ましい。ソースプログラム格納部111にソースプログラムが蓄積される過程等は問わない。ソースプログラム格納部111は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
命令パターン格納部112には、2以上の上述したような命令パターンが格納されている。命令パターン格納部112に格納される命令パターンは、例えば、ソースプログラム格納部111に格納されている全てのソースプログラムに含まれる命令パターンである。ただし、重複する命令パターンは、ユニーク処理により一つを残して削除されていることが好ましい。各ソースプログラムから命令パターンを取得する処理は、上述したように公知技術であるので説明は省略する。なお、各ソースプログラムから命令パターンを取得する処理は、ユーザ等により手作業で行われても良い。命令パターン格納部112に命令パターンが蓄積される過程は問わない。命令パターン格納部112は、不揮発の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
テスト管理情報格納部113には、テスト識別情報格納部110に格納されているテスト識別情報と、当該テスト識別情報が示すテストにおいて実行される、ソースプログラム格納部111に格納されているソースプログラムとを対応付けて管理するテスト管理情報が格納されている。テスト管理情報は、テスト識別情報とソースプログラムとが結果的に対応付けられる情報であれば良い。テスト管理情報は、例えば、テスト識別情報と、ソースプログラムの識別情報であるソースプログラム識別情報とを対応付けた情報である。通常、テスト識別情報と、ソースプログラムとは1対多で対応付けられている。例えば、通常、テストを実行する際に利用されるJCLの情報等に、テストで実行されるソースプログラムの識別情報等が記載されているため、このような情報から、テスト識別情報とソースプログラムとの対応関係を示す情報は取得可能である。テスト管理情報格納部113にテスト管理情報が格納される過程は問わない。テスト管理情報格納部113は、不揮発の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
パターン管理情報格納部114には、ソースプログラム格納部111に格納されているソースプログラムと、命令パターン格納部114に格納されている、当該ソースプログラムに含まれる命令パターンとを対応付けて管理するパターン管理情報が格納されている。パターン管理情報は、ソースプログラムと、命令パターンとが結果的に対応付けられる情報であれば良い。パターン管理情報は、例えば、ソースプログラム識別情報と、命令パターンとを対応付けた情報である。また、パターン管理情報は、例えば、ソースプログラム識別情報と、命令パターンの識別情報である命令パターン識別情報とを対応付けた情報であってもよい。通常、ソースプログラムと、命令パターンとは1対多で対応付けられている。ソースプログラムと命令パターンとの対応関係を示す情報は、例えば、各ソースプログラムから命令パターンを取得する処理等において取得可能である。パターン管理情報格納部114にテスト管理情報が格納される過程は問わない。パターン管理情報格納部114は、不揮発の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
テスト命令対応情報取得部115は、テスト管理情報格納部113に格納されているテスト管理情報と、パターン管理情報格納部114に格納されているパターン管理情報とを用いて、テスト識別情報と、当該テスト識別情報が示すテストにおいて実行されるソースプログラムに含まれる命令パターンとを対応付けたテスト命令対応情報を、テスト識別情報格納部110に格納されている各テスト識別情報について取得する。具体的には、テスト命令対応情報取得部115は、テスト識別情報格納部110に格納されているテスト識別情報を順次読み出し、当該テスト識別情報に対応付けられた1以上のソースプログラム識別情報を、テスト管理情報格納部113に格納されているテスト管理情報から検索等により取得する。次に、テスト命令対応情報取得部115は、取得した1以上のソースプログラムの全てに対応付けられた命令パターンを、パターン管理情報格納部114に格納されているパターン管理情報から検索等により全て取得する。そして、取得した命令パターンから、重複した命令パターンを一つを除いて削除し、取得された命令パターンを、テスト識別情報と対応付けて図示しない記憶媒体等に蓄積する。この処理と同様の処理を、テスト識別情報格納部110に格納されている他のテスト識別情報に対して順次実行することにより、テスト命令対応情報を取得することができる。この実施の形態においては、テスト命令対応情報取得部115が取得して出力するテスト命令対応情報を、例えば、テスト命令対応情報受付部101が受け付ける。テスト命令対応情報取得部115は、通常、MPUやメモリ等から実現され得る。テスト命令対応情報取得部115の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
次に、プログラムテスト決定装置1の動作の一例について図2のフローチャートを用いて説明する。
(ステップS200)テスト命令対応情報取得部115は、2以上のテスト命令対応情報を取得する。なおこの処理の一例の詳細については、後述する。
(ステップS201)テスト命令対応情報受付部101は、ステップS200において取得された2以上のテスト命令対応情報を受け付ける。なお、ユーザ等から手入力されるテスト命令対応情報を受け付けたり、記憶媒体等に記憶されているテスト命令対応情報を読み出して受けつけるようにしても良い。
(ステップS202)命令出現情報取得部102は、テスト命令対応情報が示す複数のテスト識別情報に対応する全ての命令パターンを示す命令出現情報を取得する。ここでは例として、命令パターン格納部112に格納されている全ての命令パターンを読み出す。
(ステップS203)網羅テスト決定部103は、命令出現情報が示す全ての命令パターンのうちの、予め指定された比率以上の命令パターンと一致する命令パターンと対応付けられた1以上のテスト識別情報の組合せを、テスト命令対応情報を用いて決定する。なお、この処理の一例の詳細については、後述する。
(ステップS204)網羅テスト決定部103は、ステップS203において決定したテスト識別情報の組合せを構成する各テスト識別情報について、対応する命令パターンの網羅率を算出する。例えば、ステップS202において取得した命令出現情報が示す全ての命令パターン数で、テスト命令対応情報が示す、各テスト識別情報に対応した命令パターン数を除算することで、網羅率を算出する。
(ステップS205)網羅テスト決定部103は、ステップS204において算出した網羅率を用いて、網羅率の高い順にテスト識別情報に対するテストを行う順番を決定する。決定した順番を示す情報と、テスト識別情報とを対応付けて蓄積する。
(ステップS206)テスト別工数情報取得部104は、ステップS203において決定したテスト識別情報の組合せを構成する各テスト識別情報について、各テスト識別情報に対応したテスト別工数情報を取得する。例えば、テスト別工数情報格納部107から、各テスト識別情報と対応付けられたテスト別工数情報を検索により取得する。
(ステップS207)工数算出部105は、ステップS206において取得したテスト別工数情報が示す工数を加算した値を用いて、複数のソースプログラムについてのテストに要する工数を算出する。
(ステップS208)出力部106は、ステップS203において決定したテスト識別情報の組合せを出力する。このとき、テスト識別情報の組合せの網羅率や、ステップS205において決定したテスト順番を示す情報も付加して出力する。また、ステップS206において算出した工数の値を出力する。そして処理を終了する。
次に、図2のステップS200におけるテスト命令対応情報を取得する処理の詳細について、図3のフローチャートを用いて説明する。
(ステップS301)テスト命令対応情報取得部115は、カウンターnに1を代入する。
(ステップS302)テスト命令対応情報取得部115は、n番目のテスト識別情報に対応付けられた1以上のソースプログラムを、テスト管理情報格納部113に格納されているテスト管理情報を用いて検出する。
(ステップS303)テスト命令対応情報取得部115は、カウンターmに1を代入する。
(ステップS304)テスト命令対応情報取得部115は、ステップS302において検出したソースプログラムのうちのm番目のソースプログラムと対応付けられた1以上の命令パターンを、パターン管理情報格納部114に格納されているパターン管理情報を用いて取得する。取得した命令パターンは、図示しない記憶媒体等に一時記憶する。
(ステップS305)テスト命令対応情報取得部115は、カウンターmの値を1インクリメントする。
(ステップS306)テスト命令対応情報取得部115は、ステップS302において検出したソースプログラムにm番目のソースプログラムがあるか否かを判断する。ある場合、ステップS304に戻り、ない場合、ステップS307に進む。
(ステップS307)テスト命令対応情報取得部115は、ステップS304に取得した命令パターンの全てを取得する。取得する際に、重複する命令パターンを検出し、重複する命令パターンについては一つを残して削除する。
(ステップS308)ステップS307において取得した命令パターンを、n番目のテスト識別情報と対応付けて図示しない記憶媒体等に蓄積する。
(ステップS309)テスト命令対応情報取得部115は、カウンターnの値を1インクリメントする。
(ステップS310)テスト命令対応情報取得部115は、n番目のテスト識別情報があるか否かを判断する。ある場合、ステップS302に戻り、ない場合、上位の処理に戻る。なお、ステップS308において、テスト識別情報と対応付けて蓄積された1以上の命令パターンが、テスト命令対応情報取得部115が取得したテスト命令対応情報である。
次に、図2のステップS203におけるテスト識別情報の組合せを決定する処理の詳細について、図4のフローチャートを用いて説明する。
(ステップS401)網羅テスト決定部103は、カウンターnに1を代入する。
(ステップS402)網羅テスト決定部103は、ステップS201において受け付けた一以上のテスト命令対応情報が示す複数のテスト識別情報の中からn個のテスト識別情報を取り出した場合のテスト識別情報の組合せを取得する。取得した組合せを示す情報は、例えば、図示しない記憶媒体等に蓄積する。組合せを示す情報は、例えば、組合せに含まれるテスト識別情報を対応付けた情報である。
(ステップS403)網羅テスト決定部103は、カウンターmに1を代入する。
(ステップS404)網羅テスト決定部103は、n個のテスト識別情報の組合せのうちのm番目のテスト識別情報の組合せに対応した全ての命令パターンを取得する。命令パターンの代わりに、命令パターンの識別情報を取得しても良い。
(ステップS405)網羅テスト決定部103は、ステップS202において取得した命令出現情報が示す全ての命令パターンを順番に取り出し、ステップS404において取得したn個のテスト識別情報に対応する命令パターン中に一致するものがあるか否か判断して、一致するものがある命令パターンの数をカウントする。
(ステップS406)網羅テスト決定部103は、ステップS405により得られたカウント結果が示す一致する命令パターンの数を、ステップS202において取得した命令出現情報が示す全ての命令パターン数で除算して、n個のテスト識別情報に含まれる命令パターンの、ステップS201において受け付けたテスト命令対応情報が示す複数のテスト識別情報に対応する全ての命令パターンに対する網羅率を算出する。そして、算出した網羅率が、予め指定された所定の値以上であるか否かを判断する。所定の値以上であれば、ステップS407に進み、所定の値以上でない場合、ステップS408に進む。なお、網羅率が100%であるか否かを判断する場合等においては、必ずしも網羅率を算出する必要はない。このような場合、上記の処理の代わりに、ステップS405により得られたカウント結果が示す一致する命令パターンの数が、ステップS202において取得した命令出現情報が示す全ての命令パターン数と一致するか否かの判断を行うようにしても良い。
(ステップS407)網羅テスト決定部103は、ステップS402において取得したn個のテスト識別情報の組合せを図示しない記憶媒体等に蓄積する。n個のテスト識別情報の組合せを蓄積する、ということは、n個のテスト識別情報の組合せを示す情報を蓄積することであっても良い。なお、ここでは例として、ステップS406において算出した網羅率も、n個のテスト識別情報の組合せと対応付けて図示しない記憶媒体等に蓄積する。
(ステップS408)網羅テスト決定部103は、カウンターmの値を1インクリメントする。
(ステップS409)網羅テスト決定部103は、ステップS402において取得したn個のテスト識別情報を取り出した場合の組合せの中に、m番目の組合せがあるか否かを判断する。ある場合、ステップS404に戻り、ない場合、ステップS410に進む。
(ステップS410)網羅テスト決定部103は、ステップS407において、一組以上のテスト識別情報の組合せが、図示しない記憶媒体等に蓄積されているか否かを判断する。蓄積されている場合、ステップS412に進み、蓄積されていない場合、ステップS411に進む。
(ステップS411)網羅テスト決定部103は、カウンターnの値を1インクリメントする。そして、ステップS402に戻る。
(ステップS412)網羅テスト決定部103は、ステップS407において蓄積されたテスト識別情報の組合せが複数であるか否かを判断する。複数である場合、ステップS413に進み、複数でない場合、上位の処理にリターンする。
(ステップS413)網羅テスト決定部103は、テスト識別情報の組合せと対応付けて蓄積されている網羅率同士を比較して、最も値の大きい網羅率と対応付けられているテスト識別情報の組合せを示す情報を取得する。そして、上位の処理にリターンする。
なお、ステップS405において、ステップS202において取得した命令出現情報が示す全ての命令パターンを順番に取り出し、ステップS404において取得したn個のテスト識別情報に対応した命令パターン中に一致するものがあるか否か判断して、一致するものがある命令パターンの数をカウントする処理を行う代わりに、ステップS404において取得したn個のテスト識別情報に対応した命令パターンの全てを重複がないよう取得して、取得した命令パターンの数をカウントするようにしても良い。n個のテスト識別情報に対応した命令パターンは、命令出現情報が示す命令パターンのいずれかと一致するため、この処理においてもステップS405と同じカウント値が得られる。この場合、この命令パターン数を、ステップS406においてカウント値の代わりに用いるようにすればよい。
以下、本実施の形態におけるプログラムテスト決定装置1の具体的な動作について一例を挙げて説明する。ここでは、例として、ソースプログラム格納部111に格納されている複数のソースプログラムを命令パターンを利用した変換ツールで変換した場合において、テスト識別情報の組合せを取得する処理について説明する。
図5は、ソースプログラム格納部111にプログラム識別情報と対応付けて格納されている複数のソースプログラムの一例を示す図である。
図6は、命令パターン格納部112に格納されている命令パターンを示す図である。この命令パターンは、ソースプログラム格納部111に格納されている複数のソースプログラムに含まれる全ての命令パターンを取得し、重複をなくした命令パターンであるとする。
図7は、テスト管理情報格納部113に格納されているテスト管理情報を示す図である。テスト管理情報は、「テスト識別情報」と「プログラム識別情報」という項目を有している。「テスト識別情報」は、テスト識別情報格納部110に格納されているテスト識別情報を示しており、ここでは、テスト識別情報は、テスト名であるとする。ここでのテストは、ジョブ単位で行われるものとし、テスト名は、例えば、バッチ処理を実行させるためのJCLファイル名や、オンライン処理におけるテスト対象となる画面名等であるとする。なお、ここでは、「バッチ」という文字列で始まるものは、バッチ処理に対するテストを示している。また、「画面」という文字列で始まるものは、オンライン処理における画面単位での処理に対するテストを示しているものとする。「プログラム識別情報」は、ソースプログラム格納部111に格納されているソースプログラムに対応する識別情報であるプログラム識別情報である。ここでは、便宜上、1のレコードには、1のテスト識別情報と、当該テスト識別情報が示すテストで実行される1以上のソースプログラムのプログラム識別情報が管理されているものとする。なお、テスト管理情報の全てのレコードに含まれる「テスト識別情報」の値であるテスト識別情報が、テスト識別情報格納部110に格納されている。また、このテスト管理情報の全てのレコードに含まれる「プログラム識別情報」の値から重複をなくしたプログラム識別情報に対応するソースプログラムが、ソースプログラム格納部111に格納されているものとする。
図8は、パターン管理情報格納部114に格納されているパターン管理情報を示す図である。パターン管理情報は、「プログラム識別情報」と「命令パターン」という項目を有している。「プログラム識別情報」は、図7に示した「プログラム識別情報」に相当する。「命令パターン」は、命令パターン格納部111に格納されている命令パターンである。ここでは、便宜上、1のレコードには、1のプログラム識別情報と、当該プログラム識別情報が示すソースプログラムに含まれる1以上の命令パターンが管理されているものとする。このパターン管理情報の全てのレコードに含まれる「プログラム識別情報」の値であるプログラム識別情報に対応するソースプログラムが、ソースプログラム格納部111に格納されているものとする。なお、パターン管理情報においては、命令パターンの代わりに、命令パターン格納部112に格納された命令パターンと対応付けられた命令パターン識別情報を用いるようにしても良い。
まず、例えば、ユーザがテスト識別情報の組合せを決定させる指示をプログラムテスト決定装置1に与えると、テスト命令対応情報取得部115は、図7に示したテスト管理情報と、図8に示したパターン管理情報とを用いて、テスト識別情報格納部110に格納されている各テスト識別情報について、当該テスト識別情報と、当該テスト識別情報が示すテストで実行される1以上のソースプログラムに組まれる1以上の命令パターンとを対応付けたテスト命令対応情報を取得する。
具体的には、まず、図7に示したテスト管理情報の1つめのレコードから、プログラム識別情報を取得する。ここでは、「プログラムA」および「プログラムB」を取得する。次に、取得した「プログラムA」および「プログラムB」のいずれかと一致する「プログラム識別情報」を有するレコードを図8に示したパターン管理情報において検索し、検出されたレコードの「命令パターン」の値である命令パターンを全て取得する。そして、取得した命令パターンにおいて、重複するものを検出し、重複するものは一つを残して削除する。そして、取得した1以上の命令パターンと、テスト管理情報の1つめのレコードのテスト識別情報を対応付けたテスト命令対応情報を取得する。そして、同様の処理を、2つめ以降のレコードについても順次行う。これにより、各テスト識別情報についてのテスト命令対応情報を取得することができる。
図9は、テスト識別情報格納部110に格納されている各テスト識別情報について取得したテスト命令対応情報を示す図である。テスト対応情報は、「テスト識別情報」と、「命令パターン」という項目を有している。「テスト識別情報」は、図7に示したテスト識別情報に相当し、「命令パターン」は図8に示した命令パターンに相当する。ここでは、各テーブルが、それぞれ、一のテスト識別情報に対応したテスト命令対応情報を示している。なお、これらの各テーブルを一つのテーブルにまとめたものが、以下の図10に示すテスト命令対応情報である。
図10は、テスト識別情報と、当該テスト識別情報が示すテストで実行されるソースプログラムに含まれる命令パターンとの対応関係を示すテスト命令対応情報を示す図である。このテスト命令対応情報においては、「命令パターン」という項目と、「バッチA」、「バッチB」、「バッチC」や、「画面A」、「画面B」等のテスト識別情報に対応した項目とを有している。「命令パターン」は、図8に示したパターン管理情報の「命令パターン」の項目に含まれる全ての命令パターンから重複をなくした命令パターンである。図9に示した複数のテスト識別情報に対応したテスト命令対応情報の全ての命令パターンから、重複をなくしたものと考えても良い。この「命令パターン」は、テスト識別情報格納部110に格納されているテスト識別情報が示すテストを行う際に実行されるソースプログラムの少なくともいずれか一つに含まれる命令パターンである。「バッチA」、「バッチB」、「バッチC」や、「画面A」、「画面B」等の項目名は、テスト識別情報格納部110に格納されているテスト識別情報を示している。「バッチA」、「バッチB」、「バッチC」や、「画面A」、「画面B」等の各項目の、「○」が入っている行に対応する命令パターンは、対応する項目が示すテスト識別情報が示すテストを行う際に、実行される1以上のプログラムに含まれる命令パターンであることを示している。
次に、テスト命令対応情報受付部101は、テスト命令対応情報取得部115が取得したテスト命令対応情報を受け付ける。なお、テスト命令対応情報受付部101は、実質的に、各テスト識別情報と、命令パターンとの対応関係を示すことができるものであれば、図9に示すような複数のテスト命令対応情報を受け付けても良いし、図10に示すようなテスト命令対応情報を受け付けても良い。なお、ここでは、テスト命令対応情報取得部115が取得したテスト命令対応情報を受け付けるようにしたが、外部から入力されるテスト命令対応情報を受け付けても良い。
次に命令出現情報取得部102は、ソースプログラム格納部111に格納されている複数のソースプログラムに含まれる全ての命令パターンである命令出現情報を取得する。ここでは、命令パターン格納部112に格納されている図6に示したような命令パターンの全てを取得する。これにより、命令出現情報は、図6に示した命令パターンの群と同様のものとなる。以下、ここでは便宜上、図6を命令出現情報に含まれる命令パターンを示す図としても用いるものとする。
次に、網羅テスト決定部103は、テスト命令対応情報受付部101が受け付けた全てのテスト命令対応情報に含まれる全k個のテスト識別情報の中からn個(nは、1からkまでの整数)のテスト識別情報を取り出す場合の組合せをnの値が小さなものから順に求め、nの値を設定する毎に、n個のテスト識別情報の組合せに対応する命令パターンと一致する命令出現情報が示す命令パターンの数が、命令出現情報が示す全ての命令パターンのうちの所定の比率以上であるか否か、即ち網羅率が所定の比率以上であるか否かを判断していく。そして、所定の比率以上の命令パターンが一致するテスト識別情報の組合せであって、組合せを構成するnの値が最小数となるテスト識別情報の組合せを、テスト対象となるテスト識別情報の組合せに決定する処理を行う。
具体的には以下のように処理を行う。網羅テスト決定部103は、テスト命令対応情報受付部101が受け付けたテスト命令対応情報に含まれるテスト識別情報について、n=1個のテスト識別情報を取り出す場合の組合せを取得する。そして、n=1個のテスト識別情報を取り出した組合せのうちの、m=1番目のテスト識別情報のくみあわせ、例えば「バッチA」というテスト識別情報に含まれる命令パターンをテスト命令対応情報から読み出す。具体的には、図10に示すようなテスト命令対応情報をテスト命令対応情報受付部101が受け付けたとすると、図10に示したテスト命令対応情報から「バッチA」という項目の列のうちの、値が「○」である行を検出し、当該検出された行の「命令パターン」の値を、順次取得し、記憶媒体等に一時記憶する。
そして、図6に示したような命令出現情報に含まれる命令パターンを、例えば上から順番に取り出し、この取り出した命令パターンと一致する命令パターンが、n=1個のテスト識別情報の組合せのうちのm=1番目の組合せに対応する命令パターンに存在するか否かを、順次パターンマッチングにより判断していく。そして、一致する命令パターン数をカウントする。
例えば、図6に示した命令出現情報に含まれる命令パターンの上から1行目の命令パターン「IDENTIFICATION DIVISION」と一致する命令パターンは、図10に示した「バッチA」に含まれる命令パターン内において検出される。このため、一致する命令パターンのカウント数を1カウントアップする。
一方、例えば、図6に示したような命令出現情報に含まれる命令パターンの上から11行目の命令パターン「SELECT 変数01 ASSIGN TO 変数02 ORGANIZATION SEQUENTIAL…」と一致する命令パターンが、図10に示した「バッチA」に含まれる命令パターン内において検出されない。このため、一致する命令パターンのカウント数は変更されない。
網羅テスト決定部103は、このような処理を、図6に示したような命令出現情報に含まれる全ての命令パターンについて行うことで、n=1個のテスト識別情報を取り出した組合せのうちのm=1番目のテスト識別情報の組合せに対応する命令パターンのうちの、命令出現情報に含まれる命令パターンと一致する命令パターン数のカウント結果が得られる。このカウント結果を、命令出現情報に含まれる全ての命令パターン数で除算して100を乗算することで、網羅率(%)を算出する。そして、網羅率が、予め指定された所定の値、即ちしきい値以上であるか否かを判断する。
ここでは、網羅率のしきい値が「90」で、算出された網羅率がしきい値未満であったとすると、上記と同様の処理を、m=2番目以降のテスト識別情報の組合せについて行う。そして、この処理の結果、n=1個のテスト識別情報を取り出した場合の組合せのいずれにおいても、網羅率がしきい値以上となるテスト識別情報の組合せが検出されなかったとする。
網羅テスト決定部103は、次に、n=2個のテスト識別情報を取り出す場合の組合せを取得する。そして、n=2個のテスト識別情報を取り出した組合せのうちの、m=1番目のテスト識別情報の組合せ、例えば「バッチA」というテスト識別情報と、「バッチB」というテスト識別情報とに対応する命令パターンをテスト命令対応情報から読み出す。
そして、図6に示したような命令出現情報に含まれる命令パターンを、例えば上から順番に取り出し、この取り出した命令パターンと一致する命令パターンが、n=2個のテスト識別情報の組合せのうちのm=1番目の組合せに対応する命令パターン内に存在するか否かを、順次パターンマッチングにより判断していく。そして、一致する命令パターン数をカウントする。
例えば、図6に示したような命令出現情報に含まれる命令パターンの上から11行目の命令パターン「SELECT 変数01 ASSIGN TO 変数02 ORGANIZATION SEQUENTIAL…」と一致する命令パターンは、図10に示したテスト命令対応情報の「バッチA」に対応する命令パターン内において検出されないが、図10に示したテスト命令対応情報の「バッチB」に対応する命令パターン内において検出される。このため、一致する命令パターンのカウント数を1カウントアップする。
このような処理を、網羅テスト決定部103は、図6に示したような命令出現情報に含まれる全ての命令パターンについて行うことで、n=2個のテスト識別情報を取り出した組合せのうちのm=1番目のテスト識別情報の組合せに含まれる命令パターンのうちの、命令出現情報に含まれる命令パターンと一致する命令パターン数のカウント結果が得られる。このカウント結果を、命令出現情報に含まれる全ての命令パターン数で除算して100を乗算して網羅率を算出し、網羅率が、予め指定された所定の値、即ちしきい値以上であるか否かを判断する。
ここでは、算出された網羅率がしきい値未満であったとすると、上記と同様の処理を、m=2番目以降のテスト識別情報の組合せについて行う。そして、この処理の結果、n=2個のテスト識別情報を取り出した場合の組合せのいずれにおいても、網羅率がしきい値以上となる組合せが検出されなかったとする。
以下、上記と同様の処理を、テスト命令対応情報受付部101が受け付けたテスト命令対応情報に含まれる複数のテスト識別情報のうちの、n個以上のテスト識別情報を取り出す場合の組合せについて、網羅率がしきい値以上となる組合せが検出されるまで、nの値を「3」から順次増加させながら繰り返す。
ここで、例えばn=5個のテスト識別情報を取り出す組合せのうちの、m=8番目のテスト識別情報の組合せが「バッチA」、「バッチD」、「画面a」、「画面b」、「画面d」であり、このテスト識別情報の組合せに対応する命令パターンの網羅率が92%であり、初めてしきい値である90%を超えたとする。
網羅テスト決定部103は、このテスト識別情報の組合せを示す情報を、図示しない記憶媒体等に蓄積する。また、このときの網羅率の値も、テスト識別情報の組合せに対応付けて蓄積する。
この時点で、網羅テスト決定部103は、テスト識別情報の数が最も少なく、かつテスト命令対応情報受付部101が受け付けたテスト命令対応情報に含まれる複数のテスト識別情報に含まれる命令パターン数に対する命令パターン数の比率である網羅率がしきい値以上となるテスト識別情報の組合せを取得したこととなるため、上記のような網羅率がしきい値以上であるテスト識別情報の組合せを取得する処理を終了しても良いが、ここでは、n=5個のテスト識別情報を取り出す組合せの、m=9以降のテスト識別情報の組合せについても、同様に網羅率がしきい値以上となる組合せが存在する可能性があるため、m=9以降の組合せについても、上記と同様の処理を順次繰り返し行う。
このような処理の結果、m=12番目のテスト識別情報の組合せであるテスト識別情報「バッチB」、「バッチD」、「画面a」、「画面c」、「画面d」の組合せについても、命令パターンの網羅率が91%であり、しきい値である90%を超えたとする。
網羅テスト決定部103は、複数の命令パターンの組合せが検出されたため、検出された組合せについて算出された網羅率を比較する。そして、網羅率が最も高い命令パターンの組合せを示す情報を取得する。ここでは、例えば、m=8番目のテスト識別情報の組合せ「バッチA」、「バッチD」、「画面a」、「画面b」、「画面d」の網羅率の方が高かったため、このテスト識別情報の組合せを示す情報を網羅テスト決定部103は取得する。
つぎに、網羅テスト決定部103は、m=8番目のテスト識別情報の組合せに含まれる、各テスト識別情報、即ち「バッチA」、「バッチD」、「画面a」、「画面b」、「画面d」のそれぞれについて、含まれる命令パターン数をカウントする。そして、カウント数の多いものから順番を示す情報を付与する。例えば、ここでは、カウント数の多い方から、「画面a」、「バッチA」、「画面b」、「バッチD」、「画面d」の順番であったとすると、それぞれに、順番を示す連番を付与する。この順番を示す情報が、テストが行われる順番を示す。なお、カウント数を用いる代わりに、例えば、網羅率を用いるようにしてもよい。
図11は、順番を示す情報が付与されたテスト識別情報の組合せを示す情報である。テスト識別情報の組合せを示す情報は、「テスト識別情報」と「順番」という項目を有している。「テスト識別情報」は、テスト識別情報名である。「順番」は、テスト順番を示す情報である。
図12は、テスト別工数情報格納部107に格納されているテスト別工数情報を管理するテスト別工数情報管理表である。テスト別工数情報管理表は、「テスト識別情報」と「工数」という項目を有している。「テスト識別情報」はテスト識別情報格納部110に格納されているテスト識別情報である。「工数」は、テスト識別情報が示すテストを行う際のテスト別工数情報を示す。ここでの工数の単位は「人/日」であるとする。ここでの工数の値は、ユーザ等により予め設定された値であるとする。
つぎに、テスト別工数情報取得部104は、網羅テスト決定部103が決定したテスト識別情報の組合せを構成する各テスト識別情報を検索キーとして、図12に示すテスト別工数情報管理表から、「テスト識別情報」の値がこの検索キーと一致するレコードを検出し、検出されたレコードの「工数」の値であるテスト別工数情報をそれぞれ取得する。ここでは、「バッチA」、「バッチD」、「画面a」、「画面b」、「画面d」に対応したテスト別工数情報として、「8」、「12」、「2」、「8」、「4」が取得される。
工数算出部105は、予め指定された演算式を読み出し、テスト別工数情報取得部104が取得したテスト別工数情報を、この演算式のパラメータとして代入して、網羅テスト決定部103が決定したテスト識別情報を用いたテストに要する工数を算出する。例えば、ここで読み出した演算式が、テスト別工数情報取得部104が取得した全てのテスト別工数情報が示す値と、予め指定した定数「6」とを加算して工数を算出する演算式であったとすると、工数算出部105が算出するテストの工数は、「40(日/人)」となる。なお、予め指定した定数は、テストの準備やテスト結果のまとめ等に要する時間として指定された値であるとする。
出力部106は、網羅テスト決定部103が決定したテスト識別情報の組合せを示す情報と、当該テスト識別情報のテスト順番を示す情報と、網羅率と、工数算出部105が算出した工数とを、図示しないモニタ等に表示する。
図13は、出力部106の表示例を示す図である。
また、網羅率が100%となるテスト識別情報の組合せを決定する場合、網羅テスト決定部103は、必ずしも網羅率を算出する必要はなく、命令出現情報に含まれる命令パターンと一致するテスト識別情報の組合せに対応する命令パターンの数が、命令出現情報に含まれる全ての命令パターン数と一致するか否かの判断を行うようにしても良い。このような判断により、網羅率が100%以上であるか否かが判断できる。
以上のように、本実施の形態によれば、網羅率が所定の比率以上となるとともに、テス数が最も少なくなるテスト識別情報の組合せを、テストの対象として決定することが可能となる。これにより、命令パターンによるソースプログラムの変換が適切に行われたか否かを、迅速にかつ適切に検証するためのテストの組合せを決定することができる。この結果、例えば、変換対象となるソースプログラムに対応した全てのテストを実行する必要がなくなり、テスト期間を短縮することが可能となる。
また、複数のテストに対して、網羅率の高いものから順に順番を決定し、決定した順番が判別できるように出力するようにしたことにより、テストスケジュールを短縮することができる。
例えば、命令パターンを利用した変換ツールを用いたマイグレーションにおいては、変換不備による不具合がある場合、同じ命令パターンを使用しているプログラム全てにおいてエラーとなる。即ち、同じ原因によるバグが大量に発生する。このため、テスト作業の早い段階でできるだけ多くの命令パターンについてテスト確認ができれば、変換ツールの改修、ソースプログラムの再変換を行うことにより、他の全てのソースプログラムにおいて、変換不備による不具合が大幅に減ることとなる。
また、例えば、通常のテストは、(1)テストデータ作成等の準備作業、(2)テスト実行、(3)出力結果確認、(4)不具合調査、(5)原因箇所のプログラムの修正、(6)テスト結果のまとめ、等の作業内容を含み、通常は、不具合が発生した件数分(2)から(5)の処理が繰り替えされる。従って、網羅率の高いテストから順番にテストを行うことで、命令パターンの検証による不具合の修正を早い段階でまとめて行うことができ、修正が必要な箇所の多くを網羅でき、(2)から(5)の処理を繰り返す回数を減らすことができる。
また、通常のテストにおいては、テストで検出されたいわゆるバグ等の不具合を修正すると、その修正箇所において新たな不具合が発生したり、修正した箇所同士の間で新たな不具合を発生したりしてしまう可能性がある。このため、網羅率の高いテストから順番にテストを行って最初にできるだけ多くの命令パターンについての不具合を一度に直して、修正箇所が新たに生み出す不具合も修正することで、その後の不具合の発生を減らして、作業スケジュールを短縮することができる。
また、テスト識別情報と対応付けられたテスト別工数情報を用いて、テストを行うための工数を取得するようにしたことにより、変換ツールを用いた変換結果をテストする際に必要となる作業工数の見積を適切に行うことができる。
なお、本実施の形態においては、例えば、上記の具体例のように、網羅率のしきい値を100%未満の値とすることで、テストの効率化を図ることが可能である。例えば、テスト期間の制限等により十分なテストが行えない場合や、全てのテスト識別情報が示すテストを行う前の予備的なテストを行う場合等においては、網羅率のしきい値を100%以外の値に設定して得られたテスト識別情報の組合せが示すテストを行うことで、命令パターンを用いた変換等が正常に行われているか否かのおおよその検証を、全てのテストを行うよりも短時間で行うことができる。また、このようなテストで異常が有る箇所を修正することで、主要なバグ等を早期に修正することができる。
なお、本発明は、いわゆるマイグレーション等の、命令パターンを利用してソースプログラムを変換するための変換装置や変換方法の動作検証等のテストに用いられるテスト識別情報の組合せを決定するために用いられるものに限るものではない。
例えば、複数のソースプログラムに含まれる命令パターンを変更した場合において、当該変更によってソースプログラムが正常に動作するか否かの動作検証等を行う際に実行される1以上のテストの組合せを決定する際にも利用可能である。このような場合においては、変更した命令パターンを網羅するテスト(テスト識別情報)の組合せを決定する際に、本願の構成が利用可能である。
また、例えば、新人等の経験の浅いプログラマー等が1以上の命令パターンを作成したり変更したりした場合において、作成された、あるいは変更されたソースプログラムが正常に動作するか否かの動作検証等に用いられるテストの組合せを決定する際にも利用可能である。このような場合、プログラマーによって作成された、あるいは変更された命令パターンを網羅するテスト(テスト識別情報)の組合せを決定することで、適切にテストを行うことが可能となる。
なお、上記実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
また、上記実施の形態において、一の装置に存在する2以上の通信手段(情報送信部など)は、物理的に一の媒体で実現されても良いことは言うまでもない。
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりする情報や、各構成要素が処理で用いるしきい値や数式、アドレス等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
また、上記実施の形態では、プログラムテスト決定装置がスタンドアロンである場合について説明したが、プログラムテスト決定装置は、スタンドアロンの装置であってもよく、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、出力部や受付部は、通信回線を介して入力を受け付けたり、画面を出力したりすることになる。
また、上記実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
なお、上記実施の形態におけるプログラムテスト決定装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、複数のソースプログラムに対して行われる複数のテストをそれぞれ識別するテスト識別情報と、テスト識別情報に対応するテストにおいて実行されるソースプログラムの組合せに含まれる1以上の命令パターンと、の対応関係を示す情報であるテスト命令対応情報を受け付けるテスト命令対応情報受付部と、複数のソースプログラムに含まれる命令パターンを示す情報である命令出現情報を取得する命令出現情報取得部と、1以上のテスト識別情報の組合せであって、当該テスト識別情報の組合せに対応する命令パターンが、命令出現情報が示す命令パターンのうちの予め指定された比率以上の命令パターンと一致するテスト識別情報の組合せを、テスト命令対応情報を用いて決定する網羅テスト決定部と、網羅テスト決定部が決定したテスト識別情報の組合せを示す情報を出力する出力部として機能させるためのプログラムである。
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を取得する取得部や、情報を出力する出力部などにおけるモデムやインターフェースカードなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には含まれない。
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
図14は、上記プログラムを実行して、上記実施の形態によるプログラムテスト決定装置を実現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムによって実現されうる。
図14において、コンピュータシステム900は、CD−ROM(Compact Disk Read Only Memory)ドライブ905、FD(Floppy(登録商標) Disk)ドライブ906を含むコンピュータ901と、キーボード902と、マウス903と、モニタ904とを備える。
図15は、コンピュータシステム900の内部構成を示す図である。図15において、コンピュータ901は、CD−ROMドライブ905、FDドライブ906に加えて、MPU(Micro Processing Unit)911と、ブートアッププログラム等のプログラムを記憶するためのROM912と、MPU911に接続され、アプリケーションプログラムの命令を一時的に記憶すると共に、一時記憶空間を提供するRAM(Random Access Memory)913と、アプリケーションプログラム、システムプログラム、及びデータを記憶するハードディスク914と、MPU911、ROM912等を相互に接続するバス915とを備える。なお、コンピュータ901は、LANへの接続を提供する図示しないネットワークカードを含んでいてもよい。
コンピュータシステム900に、上記実施の形態によるプログラムテスト決定装置の機能を実行させるプログラムは、CD−ROM921、またはFD922に記憶されて、CD−ROMドライブ905、またはFDドライブ906に挿入され、ハードディスク914に転送されてもよい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ901に送信され、ハードディスク914に記憶されてもよい。プログラムは実行の際にRAM913にロードされる。なお、プログラムは、CD−ROM921やFD922、またはネットワークから直接、ロードされてもよい。
プログラムは、コンピュータ901に、上記実施の形態によるプログラムテスト決定装置の機能を実行させるオペレーティングシステム(OS)、またはサードパーティプログラム等を必ずしも含んでいなくてもよい。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよい。コンピュータシステム900がどのように動作するのかについては周知であり、詳細な説明は省略する。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。