(57)【要約】【課題】関数呼出しを含む関数の処理を変更した際のテスト項目を精度よく抽出する。【解決手段】第１のプログラムは、関数部分と関数呼出し部分とを含み、メモリは、第１のプログラムをテストするためのテスト項目と、テスト項目を実行することによって実行される関数部分と、を示す値を含むテスト項目実行情報を保持し、計算機システムは、第１のプログラムのうち、第１のプログラムに基づいて生成された第２のプログラムと異なる変更部分を取得する変更部分解析部と、変更部分が実行された場合、必ず実行される関数呼出し部分を、第１のプログラムから抽出する呼出し解析部と、テスト項目実行情報に基づいて、抽出された関数呼出し部分が呼び出す関数部分が実行されるテスト項目を、変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、選択されたテスト項目の候補を出力するためのデータを生成する出力部とを有する。【選択図】図１
2013232166.tif 000002
【特許請求の範囲】
【請求項１】
計算機システムであって、
前記計算機システムは、プロセッサおよびメモリを備え、
前記メモリは、第１のプログラムを保持し、
前記第１のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第１のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記計算機システムは、
前記第１のプログラムのうち、前記第１のプログラムに基づいて生成された第２のプログラムと異なる変更部分を取得する変更部分解析部と、
前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第１のプログラムから抽出する呼出し解析部と、
前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、
前記選択されたテスト項目の候補を出力するためのデータを生成する出力部と、を有することを特徴とする計算機システム。
【請求項２】
請求項１に記載された計算機システムであって、
前記第１のプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定部は、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択することを特徴とする計算機システム。
【請求項３】
請求項１または２に記載された計算機システムであって、
前記実行判定部は、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納し、
前記出力部は、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成することを特徴とする計算機システム。
【請求項４】
請求項１または２に記載された計算機システムであって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析部は、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得することを特徴とする計算機システム。
【請求項５】
請求項１または２に記載された計算機システムであって、
前記呼出し解析部は、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第１のプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出することを特徴とする計算機システム。
【請求項６】
計算機システムによる情報処理方法であって、
前記計算機システムは、プロセッサおよびメモリを備え、
前記メモリは、第１のプログラムを保持し、
前記第１のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第１のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記方法は、
前記プロセッサが、前記第１のプログラムのうち、前記第１のプログラムに基づいて生成された第２のプログラムと異なる変更部分を取得する変更部分解析手順と、
前記プロセッサが、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第１のプログラムから抽出する呼出し解析手順と、
前記プロセッサが、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定手順と、
前記プロセッサが、前記選択されたテスト項目の候補を出力するためのデータを生成する出力手順と、を含むことを特徴とする情報処理方法。
【請求項７】
請求項６に記載された情報処理方法であって、
前記第１のプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定手順は、前記プロセッサが、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する手順を含むことを特徴とする情報処理方法。
【請求項８】
請求項６または７に記載された情報処理方法であって、
前記実行判定手順は、前記プロセッサが、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納する手順を含み、
前記出力手順は、前記プロセッサが、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成する手順を含むことを特徴とする情報処理方法。
【請求項９】
請求項６または７に記載された情報処理方法であって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析手順は、前記プロセッサが、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得する手順を含むことを特徴とする情報処理方法。
【請求項１０】
請求項６または７に記載された情報処理方法であって、
前記呼出し解析手順は、前記プロセッサが、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第１のプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出する手順を含むことを特徴とする情報処理方法。
【請求項１１】
計算機システムが備えるメモリに保持される情報処理プログラムであって、
前記計算機システムは、プロセッサを備え、
前記メモリは、第１のソフトウェアプログラムを保持し、
前記第１のソフトウェアプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、
前記メモリは、前記第１のソフトウェアプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、
前記情報処理プログラムは、前記プロセッサに、
前記第１のソフトウェアプログラムのうち、前記第１のソフトウェアプログラムに基づいて生成された第２のソフトウェアプログラムと異なる変更部分を取得する変更部分解析手順と、
前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第１のソフトウェアプログラムから抽出する呼出し解析手順と、
前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定手順と、
前記選択されたテスト項目の候補を出力するためのデータを生成する出力手順と、を実行させるための情報処理プログラム。
【請求項１２】
請求項１１に記載された情報処理プログラムであって、
前記第１のソフトウェアプログラムは、前記関数呼出し部分を含む所属関数部分を、さらに含み、
前記テスト項目実行情報は、前記関数部分を呼び出す関数呼出し部分を含む所属関数部分を示す値を、さらに含み、
前記実行判定手順は、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す関数部分と、前記抽出された関数呼出し部分を含む所属関数部分との両方が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する手順を含む情報処理プログラム。
【請求項１３】
請求項１１または１２に記載された情報処理プログラムであって、
前記実行判定手順は、前記選択されたテスト項目の候補と、前記変更部分とを含む判定結果情報を、前記メモリに格納する手順を含み、
前記出力手順は、前記選択されたテスト項目の候補と、前記変更部分と、前記抽出された関数呼出し部分とを、前記テスト項目が選択された理由として出力するためのデータを、前記判定結果情報と前記テスト項目実行情報とに基づいて生成する手順を含むことを特徴とする情報処理プログラム。
【請求項１４】
請求項１１または１２に記載された情報処理プログラムであって、
前記計算機システムは、ユーザからデータを入力されるための入力部を、さらに備え、
前記変更部分解析手順は、前記入力部を介して前記ユーザから前記変更部分を示すデータを入力されることによって、前記変更部分を取得する手順を含む情報処理プログラム。
【請求項１５】
請求項１１または１２に記載された情報処理プログラムであって、
前記呼出し解析手順は、前記変更部分を支配する前記関数呼出し部分、または、前記変更部分を後支配する前記関数呼出し部分を前記第１のソフトウェアプログラムから抽出することによって、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を抽出する手順を含む情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、特に、プログラムのテストを支援する計算機システムに関する。
【背景技術】
【０００２】
ソフトウェア開発において、開発者が既存のプログラムを修正することによって、プログラムの不良を修正する機会、または、機能を変更する機会が多い。プログラムが修正された後にプログラムがテストされる場合、開発者は、プログラムの修正前に正常に実行されていた処理が、修正後も同じ動作をするか否かを確認するため、修正前に実行されたテスト項目を修正後に再度実行し、実行結果を確認する。
【０００３】
大規模なソフトウェア開発において、このようなテストに必要なテスト項目の数は膨大である。このため、開発者が、これらのテスト項目すべてをプログラムを修正するごとに再実行するのは現実的でない。このため、修正内容に関係するテスト項目を適切に選択することが重要となる。
【０００４】
テスト項目の過去の実行情報を用いて、修正に関係するテスト項目を選択する方法が、従来から提案されている（例えば、特許文献１および特許文献２参照）。
【０００５】
特許文献１では、テスト項目の過去の実行情報とプログラム解析情報とに基づき、テストケースに優先度をつける方法が提案される。特許文献１に開示された方法は、過去に行われたテストケースについてのＳｔａｔｅｍｅｎｔ（すなわち、文）情報を保存しておき、そのＳｔａｔｅｍｅｎｔ情報と対象プログラムを解析して得られた依存関係とを組み合わせることにより、優先度をつける。
【０００６】
特許文献２では、過去の実行情報としてモジュールの通過情報を保存し、通過情報に基づいて、ソースコードの変更が行われたモジュールを通過するテスト項目を抽出する方法が提案される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２０４４０５号公報
【特許文献２】特開２０１０−１２２９５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載されたシステムは、Ｓｔａｔｅｍｅｎｔ単位の実行情報を記憶し、プログラムを実行する際に、プログラム変更部分および依存関係のある部分を通過したか（すなわち、実行したか）否かを、実行情報に基づいて判定する。しかし、Ｓｔａｔｅｍｅｎｔ単位に実行情報を取得した場合、情報取得のオーバーヘッドによってテスト実行時間（すなわち、テスト項目の優先度をつけるための時間）が増大し、また、情報記憶量の増大が問題となる。すなわち、特許文献１に記載された方法を、大規模プログラムに適用することは困難である。
【０００９】
一方で、特許文献２に記載されたシステムは、モジュール単位の実行情報を記憶することによって、大規模プログラムにおけるテスト実行時間等の問題点を解決できる。しかし、プログラムのｍａｉｎモジュールのように必ず実行されるモジュールが修正された場合、すべてのテスト項目が修正モジュールを通過するため、テスト項目を絞り込むことができない。
【００１０】
そこで、本発明は、テスト項目を選択するための時間の増大を回避しながら、より精度よくテスト項目を選択するシステムの提供を目的とする。
【課題を解決するための手段】
【００１１】
本発明の代表的な一形態によると、計算機システムであって、前記計算機システムは、プロセッサおよびメモリを備え、前記メモリは、第１のプログラムを保持し、前記第１のプログラムは、関数部分と、前記関数部分を呼び出す関数呼出し部分とを含み、前記メモリは、前記第１のプログラムをテストするためのテスト項目と、前記テスト項目を実行することによって実行される前記関数部分と、を示す値を含むテスト項目実行情報を保持し、前記計算機システムは、前記第１のプログラムのうち、前記第１のプログラムに基づいて生成された第２のプログラムと異なる変更部分を取得する変更部分解析部と、前記変更部分が実行された場合、必ず実行される前記関数呼出し部分を、前記第１のプログラムから抽出する呼出し解析部と、前記テスト項目実行情報に基づいて、前記抽出された関数呼出し部分が呼び出す前記関数部分が実行される前記テスト項目を、前記変更部分をテストするためのテスト項目の候補として、選択する実行判定部と、前記選択されたテスト項目の候補を出力するためのデータを生成する出力部と、を有する。
【発明の効果】
【００１２】
本発明の一実施例によると、テスト項目を選択するための時間の増大を回避しながら、より精度よくテスト項目を選択できる。
【図面の簡単な説明】
【００１３】
【図１】本実施例１の計算機システムを示すブロック図である。
【図２】本実施例１の計算機システムが稼働する計算機システムの構成を示すブロック図である。
【図３】本実施例１のテスト項目選択処理を示すフローチャートである。
【図４】本実施例１の関数呼出し文を特定する処理を示すフローチャートである。
【図５】本実施例１の関数呼出し表を示す説明図である。
【図６】本実施例１の呼出し解析結果登録表を示す説明図である。
【図７】本実施例１の通過関数表を示す説明図である。
【図８】本実施例１の判定結果登録表を示す説明図である。
【図９】本実施例１のテスト項目判定処理を示すフローチャートである。
【図１０】本実施例１の判定結果を表示する画面を示す説明図である。
【図１１】本実施例１のソースコードの例を示す説明図である。
【図１２】本実施例２の通過関数表を示す説明図である。
【図１３】本実施例２のテスト項目判定処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を用いて本発明の実施例について説明する。
【００１５】
本実施例は、関数単位に取得されたテスト項目の実行情報と、プログラムの静的解析とを用いて、関数呼出しを含む関数内を変更した場合、呼び出された関数に関連するテスト項目の候補を選択する。
【実施例１】
【００１６】
図１は、本実施例１の計算機システムを示すブロック図である。
【００１７】
本実施例の計算機システムは、ユーザによるプログラムのテストを支援するためのテスト支援システムである。本実施例の計算機システムは、変更前プログラム１０１、変更後プログラム１０２、プログラム変更部分解析部１０３、プログラム変更部分情報１０４、テスト項目実行情報１０５、コマンド入力装置１０６、テスト項目選択部１０７、判定結果表示部１１１、および、表示画面１１２を、少なくとも備える。
【００１８】
変更前プログラム１０１は、変更前のプログラムを示す情報である。また、変更後プログラム１０２は、変更後のプログラムを示す情報である。プログラム変更部分情報１０４は、変更前のプログラムと変更後のプログラムとの差、すなわち、変更部分を示す情報である。
【００１９】
プログラム変更部分解析部１０３は、変更前プログラム１０１と変更後プログラム１０２とに基づいて抽出された変更部分を、プログラム変更部分情報１０４に格納する処理部である。
【００２０】
テスト項目実行情報１０５は、複数のテスト項目を変更前プログラム１０１に実行した際に取得された実行情報である。テスト項目実行情報１０５は、どの関数を通過したかを示す通過関数情報を含む。テスト項目実行情報１０５は、本実施例の計算機システムの記憶装置に格納される。
【００２１】
なお、本実施例における「通過する」は、「処理する」または「実行する」と同義である。
【００２２】
コマンド入力装置１０６は、本実施例の計算機システムに対するユーザのコマンド指定を受け付けるための装置である。テスト項目選択部１０７は、本実施例に示す方法によって、テスト項目の候補を選択する処理部である。テスト項目選択部１０７は、呼出し解析部１０８、通過判定部１０９、および、テスト項目選択結果１１０を有する。
【００２３】
呼出し解析部１０８は、変更前プログラム１０１とプログラム変更部分情報１０４とに基づいて、プログラムの変更部分と関数呼出し文との関係を解析する処理部である。本実施例における関数呼出し文とは、ソースコードに含まれる関数を呼び出す文の意味である。
【００２４】
通過判定部１０９は、呼出し解析部１０８による呼出し解析結果と、テスト項目実行情報１０５とに基づいて、各テスト項目が変更部分を通過するか否かを判定する。
【００２５】
テスト項目選択結果１１０は、通過判定部１０９による判定結果示す情報である。テスト項目選択結果１１０は、本実施例の計算機システムの記憶装置に格納される。
【００２６】
判定結果表示部１１１は、テスト項目選択部１０７によって生成される結果、すなわち、テスト項目の候補を、ユーザに出力するためのデータを生成するための処理部である。
【００２７】
表示画面１１２は、テスト項目選択部１０７によって生成されたテスト項目の候補を、ユーザに表示するための装置である。なお、表示画面１１２は、ディスプレイであるが、プリンタ等の出力装置でもよい。
【００２８】
本実施例における関数とは、プログラムを実行した際に特定の処理を行う一連の処理を示す処理単位である。プログラムにおいて関数が用いられる場合、特定の処理を行う一連の処理には、一つの関数名が割り当てられる。そして、プログラムにおいて特定の処理を行うことが必要な場合、割り当てられた関数名がプログラムにおいて呼び出されることによって、特定の処理が実行される。関数は、一般的に、サブルーチン、または、サブプログラムとも呼ばれる。
【００２９】
図２は、本実施例１の計算機システムが稼働する計算機システムの構成を示すブロック図である。
【００３０】
図２に示す計算機システムは、図１に示す計算機システムを実装するための計算機システムの一例である。
【００３１】
図２に示す計算機システムは、プロセッサ２０１、ディスプレイ装置２０２、キーボード２０３、マウス２０４、主記憶装置２０５、および、外部記憶装置２０６を備える。計算機システムに備わる各装置は、バスによって接続される。
【００３２】
プロセッサ２０１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の演算装置である。プロセッサ２０１は、主記憶装置２０５に展開されたプログラムを実行する。
【００３３】
ディスプレイ装置２０２は、図１に示す表示画面１１２を実装するための装置である。すなわち、ディスプレイ装置２０２には、本実施例の計算機システムによって選択されたテスト項目の候補が出力される。
【００３４】
キーボード２０３、および、マウス２０４は、図１に示すコマンド入力装置１０６を実装するための装置である。キーボード２０３、および、マウス２０４によって、本実施例の計算機システムは、計算機システムの起動指示、テスト項目を選択する対象のプログラムの指定、および、テストする対象のテスト項目の指定等、ユーザからのコマンド入力による指定を受け付ける。
【００３５】
外部記憶装置２０６には、図１に示す計算機システムにおける、変更前プログラム１０１、変更後プログラム１０２、プログラム変更部分情報１０４、テスト項目実行情報１０５、および、テスト項目選択結果１１０が格納される。外部記憶装置２０６は、ハードディスク、または、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置であってもよい。
【００３６】
主記憶装置２０５には、図１に示す計算機システムにおける、プログラム変更部分解析部１０３、テスト項目選択部１０７、呼出し解析部１０８、通過判定部１０９、および、判定結果表示部１１１が格納される。これらの各処理部は、プロセッサ２０１によって実行される。さらに主記憶装置２０５には、これらの処理部による処理の過程において生成される、通過関数表２０７、関数呼出し表２０８、呼出し解析結果登録表２０９、および、判定結果登録表２１０が格納される。
【００３７】
以降の処理において、本実施例の計算機システムが、図２に示す計算機システムによって実装された場合の処理を示すが、本実施例の計算機システムは、いかなるシステムによって実装されてもよい。例えば、主記憶装置２０５に格納された各処理部は、集積回路等によって実装された複数の装置によって実装されてもよい。
【００３８】
また、図１および図２に示す各ブロック間を接続する情報線および制御線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての情報線および制御線を示しているとは限らない。実際にはほとんどすべての構成が相互に接続されていると考えてもよい。
【００３９】
また、主記憶装置２０５および外部記憶装置２０６に格納される各プログラムおよび各テーブル等の情報は、ＩＣカード、ＳＤカード、または、ＤＶＤ等の記録媒体に置くことができる。
【００４０】
図３は、本実施例１のテスト項目選択処理を示すフローチャートである。
【００４１】
図３に示すフローチャートは、本実施例においてテスト項目の候補を選択し、テスト項目の候補を出力するための処理の概要を示す。
【００４２】
ユーザがテスト項目の選択を本実施例の計算機システムに指示した場合、本実施例の計算機システムが起動された場合等において、図３に示すテスト項目選択処理が開始される。なお、図３に示すテスト項目選択処理の開始時、主記憶装置２０５に格納される通過関数表２０７、関数呼出し表２０８、呼出し解析結果登録表２０９、および、判定結果登録表２１０には、値が含まれていない。
【００４３】
テスト項目選択処理おいて、プログラム変更部分解析部１０３は、変更前プログラム１０１および変更後プログラム１０２を比較することによって、プログラムにおける変更部分を取得する。そして、取得された変更部分をプログラム変更部分情報１０４に格納する（３０１）。
【００４４】
なお、図３に示すテスト項目選択処理が開始されるまでに、ユーザはキーボード２０３またはマウス２０４を用いて、テスト項目を選択する対象の変更後のプログラムを変更後プログラム１０２に、変更前のプログラムを変更前プログラム１０１に入力してもよい。また、図３に示すテスト項目選択処理が開始されるまでに、本実施例の計算機システムとは異なる計算機システムから、変更前プログラム１０１に格納される情報と変更後プログラム１０２に格納される情報とが送信されてもよい。
【００４５】
プログラム変更部分解析部１０３は、ステップ３０１において、プログラムにおける変更部分を、変更された文（変更文）の集合として、プログラム変更部分情報１０４に格納する。また、プログラムに含まれる実行文（以下、単に文と記載）は、識別子として文番号があらかじめ割り当てられる。
【００４６】
また、プログラム変更部分解析部１０３は、ステップ３０１において、プログラム変更部分情報１０４に、変更前プログラム１０１の変更部分をマージさせたソースコード、すなわち、変更後プログラム１０２のソースコードを格納する。このため、プログラム変更部分情報１０４は、変更後プログラム１０２と、変更部分と、ソースコードにおける各文の文番号とを示す情報が含まれる。
【００４７】
プログラム変更部分解析部１０３は、ステップ３０１において、変更前プログラム１０１に格納されるソースコードと変更後プログラム１０２に格納されるソースコードとの差分を抽出することによって、変更部分を取得する。
【００４８】
しかし、プログラム変更部分解析部１０３は、変更前プログラム１０１のソースコードに対する変更部分を、ユーザによって入力されてもよい。この場合、計算機システムは、すべての変更部分ではなく、テストしたい変更部分を指示されることによって、ユーザがテストしたいソースコードの部分を重点的にテストするテスト項目を選択することができる。
【００４９】
ステップ３０１の後、呼出し解析部１０８は、ステップ３０１において取得された変更部分が実行された際に必ず実行される関数呼出し文を特定する（３０２）。ステップ３０２の後、通過判定部１０９は、特定された関数呼出し文に従って、所定のテスト項目がテスト項目の候補として選択されるべきかを判定する（３０３）。ステップ３０３の後、判定結果表示部１１１は、判定結果を表示する（３０４）。
【００５０】
ステップ３０２とステップ３０３とは、詳細を後述する。ステップ３０２の処理手順の詳細を、図４に示す。
【００５１】
図４は、本実施例１の関数呼出し文を特定する処理を示すフローチャートである。
【００５２】
ステップ３０１の後、呼出し解析部１０８は、変更前プログラム１０１のソースコードを参照し、変更前プログラム１０１のソースコードに含まれるすべての関数呼出し文を、関数呼出し表２０８に登録する（４０１）。
【００５３】
呼出し解析部１０８は、ステップ４０１において、変更前プログラム１０１のソースコードを参照し、他の処理を呼び出す定義を含む関数呼出し文を特定し、関数呼出し表２０８に登録してもよい。また、呼出し解析部１０８は、関数名をあらかじめ保持し、保持された関数名を呼び出す関数呼出し文を特定してもよい。
【００５４】
図５は、本実施例１の関数呼出し表２０８を示す説明図である。
【００５５】
関数呼出し表２０８は、変更前プログラム１０１に含まれる各関数呼出し文を示す情報である。関数呼出し表２０８は、呼出しＩＤ欄５０１、呼出し文欄５０２、所属関数欄５０３、および、呼出し関数欄５０４を含む。
【００５６】
呼出しＩＤ欄５０１は、プログラムに含まれる各関数呼出し文を一意に識別するための識別子を含む。呼出し文欄５０２は、関数呼出し文が含まれる文を、プログラムに含まれるすべての文において一意に識別するための文番号を含む。
【００５７】
所属関数欄５０３は、関数呼出し文が含まれる関数を一意に識別するための関数名を含む。呼出し関数欄５０４は、関数呼出し文によって呼び出される関数名を含む。
【００５８】
なお、本実施例における所属関数とは、各文が含まれる関数を意味する。
【００５９】
ステップ４０１の後、呼出し解析部１０８は、ステップ３０１において生成されたプログラム変更部分情報１０４に含まれる各変更文を参照し、プログラム変更部分情報１０４に、ステップ４０８以降の処理が未処理である変更文が含まれるか否かを判定する（４０２）。
【００６０】
ステップ４０３以降の処理が未処理である変更文が含まれる場合、呼出し解析部１０８は、ステップ４０２において、ステップ４０３以降の処理が未処理である変更文を一つ抽出する。その後、呼出し解析部１０８は、ステップ４０３へ進む。
【００６１】
未処理の変更文が含まれない場合、呼出し解析部１０８は、図４に示す処理を終了する。
【００６２】
ステップ４０３〜ステップ４０６において、呼出し解析部１０８は、抽出された変更文を解析し、解析結果を呼出し解析結果登録表２０９へ登録する。
【００６３】
図６は、本実施例１の呼出し解析結果登録表２０９を示す説明図である。
【００６４】
呼出し解析結果登録表２０９は、変更文が実行される際に必ず実行される関数呼出し文を示す情報である。呼出し解析結果登録表２０９は、変更文欄６０１と、呼出しＩＤ欄６０２とを含む。呼出し解析結果登録表２０９の各エントリには、一つの変更文に対し、複数の呼出しＩＤが登録されてもよい。
【００６５】
変更文欄６０１は、各変更文に割り当てられた文番号を含む。
【００６６】
呼出しＩＤ欄６０２は、関数呼出し文を示す識別子を含む。呼出しＩＤ欄６０２に格納される値と、関数呼出し表２０８の呼出しＩＤ欄５０１に格納される値とは、対応する。
【００６７】
呼出し解析部１０８は、ステップ４０３において、呼出し解析結果登録表２０９に新たなエントリを追加する。そして、呼出し解析部１０８は、ステップ４０２において抽出された変更文の文番号を、新たなエントリの変更文欄６０１に登録する。
【００６８】
ステップ４０４〜ステップ４０６において、呼出し解析部１０８は、ステップ４０２において抽出された変更文と、関数呼出し表２０８が示す関数呼出し文との関係を解析する。
【００６９】
ステップ４０３の後、呼出し解析部１０８は、関数呼出し表２０８に、ステップ４０５以降の処理が実行されていないエントリが含まれるか否かを判定する（４０４）。ステップ４０５以降の処理が実行されていないエントリが関数呼出し表２０８に含まれない場合、呼出し解析部１０８は、ステップ４０２に戻る。
【００７０】
ステップ４０５以降の処理を実行されていないエントリが関数呼出し表２０８に含まれると判定された場合、呼出し解析部１０８は、ステップ４０４において、ステップ４０５以降の処理が実行されていない関数呼出し表２０８のエントリを一つ抽出する。その後、呼出し解析部１０８は、ステップ４０５を実行する。
【００７１】
呼出し解析部１０８は、ステップ４０５において、関数呼出し表２０８の呼出し文欄５０２が示す関数呼出し文と、変更文との関係を解析し、変更文が実行された際に、呼出し文欄５０２が示す関数呼出し文が必ず実行されるか否かを判定する。判定の結果、変更文が実行された際に、呼出し文欄５０２が示す関数呼出し文が必ず実行される場合、呼出し解析部１０８は、ステップ４０６を実行する。
【００７２】
ステップ４０５における判定の結果、変更文が実行された際に呼出し文欄５０２が示す関数呼出し文が実行されない場合、呼出し解析部１０８は、ステップ４０４に戻り、関数呼出し表２０８に含まれる他の関数呼出し文を解析する。
【００７３】
呼出し解析部１０８は、変更前プログラム１０１に含まれるソースコードに基づいて、変更文と呼出し文欄５０２が示す関数呼出し文との関係を解析することによって、ステップ４０５における判定処理を行う。ステップ４０５における判定処理の具体例を以下に示す。
【００７４】
例えば、変更文Ｓ１が実行された際に、関数呼出し文Ｓ２が必ず実行されるための条件は、関数呼出し文Ｓ２が属する基本ブロックＢ２が、変更文Ｓ１が属する基本ブロックＢ１を支配または後支配することである。このため、呼出し解析部１０８は、ステップ４０５において変更前プログラム１０１に含まれるソースコードを解析し、変更文と関数呼出し文とに支配関係または後支配関係がある場合、変更文が実行された際に関数呼出し文が必ず実行されると判定する。
【００７５】
プログラム解析における基本ブロックに関しては、例えば、「Ａｌｆｒｅｄ  Ｖ．Ａｈｏら著、Ｃｏｍｐｉｌｅｒｓ：Ｐｒｉｎｃｉｐｌｅｓ，Ｔｅｃｈｎｉｑｕｅｓ，ａｎｄ  Ｔｏｏｌｓ（２ｎｄ  Ｅｄｉｔｉｏｎ）、２００６年」の８．４節に記載されている。
【００７６】
また、基本ブロックＢ２が基本ブロックＢ１を支配するとは、プログラムの入り口から基本ブロックＢ１に到達する経路上で必ず基本ブロックＢ２を通ることを意味する。すなわち、基本ブロックＢ２が基本ブロックＢ１を支配するとは、プログラムを実行した場合、基本ブロックＢ１が実行されるまでに実行される処理において、必ず、基本ブロックＢ２が実行されることを意味する。
【００７７】
また、基本ブロックＢ２が基本ブロックＢ１を後支配するとは、基本ブロックＢ１からプログラムの出口に達する経路上で必ず基本ブロックＢ２を通ることを意味する。すなわち、基本ブロックＢ２が基本ブロックＢ１を後支配するとは、プログラムを実行した場合、基本ブロックＢ１が実行された後に実行される処理において、必ず、基本ブロックＢ２が実行されることを意味する。
【００７８】
前述のような支配関係の解析方法については、Ａｌｆｒｅｄ  Ｖ．Ａｈｏらの文献の９．６．１節に記載され、後支配関係の解析方法については１０．４．１節に記載される。
【００７９】
また、ステップ４０５における判定処理の簡易な方法として、呼出し解析部１０８は、変更文Ｓ１と関係呼出し文Ｓ２とが同一の基本ブロックに含まれる場合、変更文Ｓ１が実行された際に関数呼出し文Ｓ２が必ず実行されると判定してもよい。
【００８０】
なお、変更文Ｓ１が関数呼出し文Ｓ２である場合、呼出し解析部１０８は、変更文Ｓ１が実行された際に関数呼出し文Ｓ２が必ず実行されると判定する。
【００８１】
本実施例の呼出し解析部１０８は、前述のような方法によって、変更前プログラム１０１に含まれる関数呼出し文が、変更文が実行される際に必ず実行される関数呼出し文であるか否かを判定することによって、変更文をテストするためのテスト項目を、精度よく選択することができる。
【００８２】
ステップ４０５において、変更文が実行された際に関数呼出し文が必ず実行される場合、呼出し解析部１０８は、判定された変更文を示す呼出し解析結果登録表２０９のエントリの呼出しＩＤ欄６０２に、ステップ４０４において抽出されたエントリの呼出しＩＤ欄５０１の値を登録する（４０６）。
【００８３】
ステップ４０５およびステップ４０６によって、関数呼出し表２０８に含まれるすべての関数呼出し文と変更文との解析が終了した場合、ステップ４０２へ戻り、呼出し解析部１０８は、ステップ４０３以降の処理が未処理の変更文に、ステップ４０３以降の処理を行う。このようにして、すべての変更文と関数呼出し文との組合せについて、解析処理を行う。
【００８４】
図４に示す処理によって、ステップ３０２が終了する。そして、図４に示す処理によって、本実施例の計算機システムは、変更文が実行される際に必ず実行される関数呼出し文を取得できる。
【００８５】
ステップ３０２の後、ステップ３０３のテスト項目判定処理が実行される。
【００８６】
ステップ３０３において、呼出し解析部１０８は、テスト項目実行情報１０５から抽出された通過関数表２０７を参照する。テスト項目実行情報１０５は、変更前プログラム１０１に対して複数のテスト項目を実行した際の実行情報を保持する。
【００８７】
図７は、本実施例１の通過関数表２０７を示す説明図である。
【００８８】
通過関数表２０７は、変更前プログラム１０１に行われたテスト項目と、各テスト項目において実行された関数とを示す。通過関数表２０７は、テスト項目欄８０１、および、通過関数欄８０２を含む。
【００８９】
テスト項目欄８０１は、テスト項目を一意に識別するための識別子を含む。通過関数欄８０２は、各テスト項目を実行した際に実行された関数を示す関数名を含む。
【００９０】
通過関数欄８０２には、複数の関数名が格納されてもよい。通過関数欄８０２に格納される値は、関数呼出し表２０８の所属関数欄５０３および呼出し関数欄５０４に格納される値に対応する。
【００９１】
図８は、本実施例１の判定結果登録表２１０を示す説明図である。
【００９２】
判定結果登録表２１０は、ステップ３０３における判定結果、すなわち、ステップ３０３によって選択されたテスト項目を示す。判定結果登録表２１０は、テスト項目欄９０１、選択結果欄９０２、および、選択理由欄９０３を含む。
【００９３】
テスト項目欄９０１は、テスト項目を一意に識別するための識別子を含む。テスト項目欄９０１に格納される値は、通過関数表２０７のテスト項目欄８０１に格納される値に対応する。
【００９４】
選択結果欄９０２は、変更後プログラム１０２をテストするためのテスト項目として選択されたか否かを示す値を含む。本実施例において、テスト項目として選択されたエントリの選択結果欄９０２は、「選択」を示す。また、テスト項目として選択されなかったエントリの選択結果欄９０２は、「非選択」を示す。
【００９５】
選択理由欄９０３は、テスト項目として選択された理由となる変更文の文番号を含む。選択理由欄９０３に格納される値は、呼出し解析結果登録表２０９の変更文欄６０１に格納される値に対応する。
【００９６】
ステップ３０３の詳細な処理手順を、図９に示す。
【００９７】
図９は、本実施例１のテスト項目判定処理を示すフローチャートである。
【００９８】
ステップ３０２の後、通過判定部１０９は、通過関数表２０７のエントリが示すテスト項目に、ステップ７０２以降の処理が実行されていないテスト項目があるか否かを判定する（７０１）。
【００９９】
ステップ７０２以降の処理が実行されていないテスト項目がある場合、通過判定部１０９は、ステップ７０１において、通過関数表２０７から一つのエントリを抽出する。そして、通過判定部１０９は、抽出されたエントリのテスト項目欄８０１の値をテスト項目ｔ１とする。その後、通過判定部１０９は、ステップ７０２に進む。
【０１００】
ステップ７０２以降の処理が実行されていないテスト項目が、通過関数表２０７にない場合、通過判定部１０９は、図９に示す処理を終了する。
【０１０１】
通過判定部１０９は、ステップ７０２において、判定結果登録表２１０に新たなエントリを追加する。そして、通過判定部１０９は、判定結果登録表２１０の新たなエントリのテスト項目欄９０１にテスト項目ｔ１の識別子を格納し、選択結果欄９０２に初期値として「非選択」を格納する。
【０１０２】
ステップ７０３以降において、通過判定部１０９は、テスト項目ｔ１を、各変更文に対するテスト項目の候補として選択するか否かを判定する。通過判定部１０９は、テスト項目ｔ１が変更文のいずれかを通過する可能性がある場合、テスト項目ｔ１を変更文に対するテスト項目の候補として選択する。
【０１０３】
ステップ７０２の後、通過判定部１０９は、ステップ７０４以降の処理が実行されていない変更文が呼出し解析結果登録表２０９に含まれるか否かを判定する（７０３）。
【０１０４】
ステップ７０４以降の処理が実行されていない変更文が、呼出し解析結果登録表２０９に含まれる場合、通過判定部１０９は、ステップ７０３において、ステップ７０４以降の処理を実行していない変更文の一つを変更文ｓ１として抽出する。その後、通過判定部１０９は、ステップ７０４に進む。
【０１０５】
呼出し解析結果登録表２０９に含まれるすべての変更文にステップ７０４以降の処理が実行済みである場合、通過判定部１０９は、ステップ７０１へ戻り、次のテスト項目の処理に進む。
【０１０６】
通過判定部１０９は、変更文ｓ１の所属関数を、プログラム変更部分情報１０４のソースコードから抽出する。そして、抽出された所属関数がテスト項目ｔ１を示す通過関数表２０７のエントリの通過関数欄８０２に含まれるか否かを判定する（７０４）。なお、呼出し解析部１０９がステップ４０６において、変更文ｓ１の所属関数を取得し、通過判定部１０９は、呼出し解析部１０９によって取得された変更文ｓ１の所属関数を用いてステップ７０４における判定を行ってもよい。
【０１０７】
抽出された所属関数がテスト項目ｔ１の通過関数欄８０２に含まれない場合、テスト項目ｔ１が実行される際に変更文ｓ１が実行される可能性は低い。このため、通過判定部１０９は、ステップ７０３に戻り、次の変更文の処理に進む。
【０１０８】
抽出された所属関数がテスト項目ｔ１の通過関数欄８０２に含まれる場合、テスト項目ｔ１が実行される際に変更文ｓ１が実行される可能性が高い。このため、通過判定部１０９は、呼出し解析結果登録表２０９の変更文ｓ１に対応する呼出しＩＤ欄６０２に値が格納されているか否かを判定する（７０５）。
【０１０９】
変更文ｓ１に対応する呼出しＩＤ欄６０２に値が格納されない場合においても、テスト項目ｔ１が実行される際に変更文ｓ１が実行される可能性があるため、通過判定部１０９は、テスト項目ｔ１を示す判定結果登録表２１０のエントリの選択結果欄９０２に「選択」を登録する（７０８）。ステップ７０８の後、選択理由欄９０３に変更文ｓ１を示す識別子を追加する（７０９）。
【０１１０】
ステップ７０５における判定の結果、変更文ｓ１に対応する呼出しＩＤ欄６０２に値が格納されている場合、通過判定部１０９は、変更文ｓ１に対応する呼出しＩＤ欄６０２に、ステップ７０７の処理が実行されていない値が含まれるか否かを判定する（７０６）。
【０１１１】
ステップ７０６の判定の結果、変更文ｓ１に対応する呼出しＩＤ欄６０２のすべての値にステップ７０７の処理が実行された場合、通過判定部１０９は、ステップ７０８に進む。
【０１１２】
ステップ７０６の判定の結果、変更文ｓ１に対応する呼出しＩＤ欄６０２に、ステップ７０７の処理が実行されていない値が含まれる場合、通過判定部１０９は、ステップ７０６において、変更文ｓ１に対応する呼出しＩＤ欄６０２の値のうち、ステップ７０７の処理が実行されていない値を、関数呼出し文ｃ１として抽出する。その後、通過判定部１０９は、ステップ７０７を実行する。
【０１１３】
通過判定部１０９は、ステップ７０７において、関数呼出し表２０８の呼出しＩＤ欄５０１が関数呼出し文ｃ１を示すエントリの呼出し関数欄５０４の値を特定する。そして、通過判定部１０９は、特定された呼出し関数欄５０４の値がテスト項目ｔ１を示す通過関数表２０７のエントリの通過関数欄８０２に含まれるか否かを判定する（７０７）。
【０１１４】
特定された呼出し関数欄５０４の値がテスト項目ｔ１を示す通過関数表２０７のエントリの通過関数欄８０２に含まれない場合、テスト項目ｔ１が実行される際、変更文ｓ１が実行される可能性は低い。このため、通過判定部１０９は、ステップ７０３に戻り、次の変更文の処理に進む。
【０１１５】
特定された呼出し関数欄５０４の値がテスト項目ｔ１を示す通過関数表２０７のエントリの通過関数欄８０２に含まれる場合、ステップ７０６に戻る。そして、ステップ７０６およびステップ７０７を繰り返すことによって、通過判定部１０９は、変更文ｓ１が実行される際に必ず実行される関数をすべて実行するテスト項目を、テスト項目の候補として抽出できる。そして、抽出されたテスト項目を示す判定結果登録表２１０のエントリの選択結果欄９０２に、ステップ７０８において「選択」を登録することができる。
【０１１６】
なお、テスト項目ｔ１を選択する条件は、テスト項目ｔ１が変更文のいずれかを通過する可能性があることである。このため、テスト項目ｔ１を選択するのみであれば、ステップ７０４において変更文ｓ１の所属関数がテスト項目ｔ１に対応する通過関数欄８０２に含まれると判定された場合、通過判定部１０９はステップ７０８を実行してもよい。
【０１１７】
しかし、本実施例における通過判定部１０９は、選択理由欄９０３に変更文を示す値を登録するため、すべての変更文に対してステップ７０５〜ステップ７０７の判定処理を行う。
【０１１８】
図９に示す処理によって、判定結果登録表２１０の選択結果欄９０２および選択理由欄９０３に値が格納される。また、図９に示す処理によって、ステップ３０３が終了する。
【０１１９】
また、図９に示す処理によって、本実施例の計算機システムは、テストにおいて実行される関数を示す通過関数表８０２に従って、テスト項目の候補を選択する。これによって、プログラムに含まれるすべての文に関する実行情報に従ってテスト項目の候補を選択するよりも、本実施例の計算機システムは、テスト項目の候補を選択するための処理時間を短くできる。また、すべての文が実行されるか否かを示す実行情報を取得するために長時間をかける必要がない。
【０１２０】
さらに、通過関数表８０２に従ってテスト項目の候補を選択することによって、モジュール単位の実行結果を用いてテスト項目の候補を選択するよりも、必要なテスト項目を精度よく選択することができる。
【０１２１】
図３に示すステップ３０４において出力される判定結果の表示画面の一例を、図１０に示す。
【０１２２】
図１０は、本実施例１の判定結果を表示する画面１０００を示す説明図である。
【０１２３】
図１０に示す画面１０００は、判定結果表示部１１１によって生成されたデータを、表示画面１１２がディスプレイ装置２０２を介して表示した画面である。判定結果表示部１１１は、ステップ３０３において生成された判定結果登録表２１０に基づいて、画面１０００を表示するためのデータをステップ３０４において生成する。
【０１２４】
本実施例の画面１０００は、テスト項目選択結果欄１０１０と、選択理由詳細欄１０２０とを含む。テスト項目選択結果欄１０１０は、判定結果登録表２１０の内容を示す領域である。
【０１２５】
選択理由詳細欄１０２０は、判定結果登録表２１０の選択理由欄９０３が示す変更文が変更文６０１に含まれる呼出し解析結果登録表２０９のエントリの、変更文６０１の値と呼出しＩＤ６０２の値とを示す領域である。なお、本実施例の選択理由詳細欄１０２０には、変更文６０１の値として、変更文６０１に相当するソースコードが表示され、呼出しＩＤ６０２の値として、読出しＩＤ６０２が示す関数呼出し文のソースコードが表示される。
【０１２６】
判定結果表示部１１１は、テスト項目選択結果欄１０１０に、テスト項目欄９０１に格納された値として、テスト項目の識別子を表示させる。また、判定結果表示部１１１は、選択結果欄９０２に格納された値が「選択」である場合、テスト項目選択結果欄１０１０に「Ｙｅｓ」を表示させ、選択結果欄９０２に格納された値が「非選択」である場合、テスト項目選択結果欄１０１０に「Ｎｏ」を表示させる。
【０１２７】
また、判定結果表示部１１１は、選択理由欄９０３が示す変更文のソースコードを、プログラム変更部分情報１０４から取得し、取得された変更文のソースコードを、テスト項目選択結果欄１０１０に表示させる。これによって、判定結果表示部１１１は、各テスト項目において通過する可能性があると判定された変更文の一覧を画面１０００に表示させる。
【０１２８】
なお、呼出し解析部１０９がステップ４０６において、変更文のソースコードを呼出し解析結果登録表２０９に格納し、判定結果表示部１１１は、呼出し解析結果登録表２０９に格納された変更文のソースコードを、テスト項目選択結果欄１０１０に表示させてよい。
【０１２９】
さらに、判定結果表示部１１１は、選択理由詳細欄１０２０に、選択された各テスト項目（すなわち、テスト項目選択結果欄１０１０において「Ｙｅｓ」が表示されたテスト項目）の選択理由の詳細を表示させる。判定結果表示部１１１は、選択された各テスト項目の通過関数（通過関数欄８０２の値に相当）を表示させ、選択されたテスト項目において実行される可能性がある各変更文と、各変更文が実行される際に必ず実行される関数呼出し文とのリストを表示させる。
【０１３０】
ユーザは、画面１０００によって、候補として選択されたテスト項目を参照することができ、変更後プログラム１０２のソースコードをテストするために用いるテスト項目を決定することができる。また、ユーザは、選択理由詳細欄１０２０を参照することによって、テスト項目が候補として選択された理由を把握することができる。本実施例における選択された理由とは、選択されたテスト項目が、いずれの変更文をテストするために選択されたテスト項目であるか、また、いずれの関数が呼び出されるために選択されたテスト項目であるかを示す理由である。
【０１３１】
以上で説明した本実施例１を、図１１に示すＣ言語で記述されたソースコードに適用した場合の処理について説明する。
【０１３２】
図１１は、本実施例１のソースコードの例を示す説明図である。
【０１３３】
図１１に示すソースコード１１００は、プログラム変更部分情報１０４に格納されるソースコードである。ソースコード１１００は、プログラム変更部分情報１０４のソースコードと、ステップ３０１において特定された変更部分を示す値とを含む。
【０１３４】
ソースコード１１００は、行欄１１０１、文番号欄１１０２、変更欄１１０３、および、ソースコード欄１１０４を含む。行欄１１０１は、ソースコードの各行を一意に識別するための識別子を含む。
【０１３５】
文番号欄１１０２は、ソースコードに含まれる文を一意に識別するための識別子を含む。文番号欄１１０２に格納される値は、関数呼出し表２０８の呼出し文欄５０２に格納される値、および、呼出し解析結果登録表２０９の変更文欄６０１に格納される値に対応する。ソースコード欄１１０４は、変更後プログラム１０２のソースコード（または、変更部分と変更前プログラム１０１とのマージ結果）を行ごとに示す。
【０１３６】
プログラム変更部分解析部１０３は、ステップ３０１において、ソースコード欄１１０４に含まれる各文について、変更の有無を解析し、解析された結果を示す値を変更欄１１０３に格納する。変更欄１１０３は、ソースコード欄１１０４に示される文が変更ありと解析された場合、「Ｙ」を格納され、ソースコード欄１１０４に示される文が変更なしと解析された場合、「Ｎ」を格納される。本例において、変更文は、文番号がＳ５である変更文Ｓ５、および、文番号がＳ８である変更文Ｓ８である。
【０１３７】
呼出し解析部１０８が、ソースコード欄１１０４に対応する変更前プログラム１０１に、図４に示すステップ４０１を実行した場合、図５に示す関数呼出し表２０８が生成されるものとする。すなわち、呼出し解析部１０８は、以下の例において、変更前プログラム１０１から、４箇所の関数呼出し文（ｆｕｎｃＡ、ｆｕｎｃＢ、および、ｆｕｎｃＣ）を抽出し、図５に示す関数呼出し表２０８を生成したものとする。
【０１３８】
呼出し解析部１０８は、図４に示すステップ４０４〜ステップ４０６において、変更文Ｓ５と、ソースコード１１００に含まれる関数呼出し文との関係を解析する。変更文Ｓ５と関数呼出し文Ｓ６とは、ソースコード１１００において、同じ基本ブロックに属する。このため、呼出し解析部１０８は、ステップ４０６において、呼出し解析結果登録表２０９の変更文Ｓ５を示すエントリの呼出しＩＤ欄６０２に、関数呼出し文Ｓ６の識別子である「Ｃ２」を格納する。
【０１３９】
また、呼出し解析部１０８は、図４に示すステップ４０４〜ステップ４０６において、変更文Ｓ８と、ソースコード１１００に含まれる関数呼出し文との関係を解析する。変更文Ｓ８と関数呼出し文Ｓ９とは、ソースコード１１００において同じ基本ブロックに属する。このため、呼出し解析部１０８は、ステップ４０６において、呼出し解析結果登録表２０９の変更文Ｓ８を示すエントリの呼出しＩＤ欄６０２に、関数呼出し文Ｓ９の識別子である「Ｃ３」を格納する。
【０１４０】
また、関数呼出し文Ｓ６の属する基本ブロックは、変更文Ｓ８の属する基本ブロックを支配するため、変更文Ｓ８が実行される前には必ず関数呼出し文Ｓ６が実行される。従って、呼出し解析部１０８は、呼出し解析結果登録表２０９の変更文Ｓ８を示すエントリの呼出しＩＤ欄６０２に、関数呼出し文Ｓ６の識別子である「Ｃ２」を格納する。
【０１４１】
以上の図４に示す処理、すなわち、ステップ３０２による処理によって、図６に示す呼出し解析結果登録表２０９が生成される。
【０１４２】
通過判定部１０９が、図９に示す処理によって、図７の通過関数表２０７に含まれる６個のテスト項目から、ソースコード１１００についてのテスト項目を選択する処理を説明する。通過判定部１０９は、まず、図９に示す処理によって、テスト項目欄８０１が「Ｔ１」であるテスト項目Ｔ１を、各変更文のテスト項目の候補として選択するか否かを判定する。
【０１４３】
通過判定部１０９は、ステップ７０４〜ステップ７０９において、テスト項目Ｔ１を変更文Ｓ５のテスト項目の候補として選択するか否かを判定する。ステップ７０４において、通過判定部１０９は、変更文Ｓ５の所属関数ｍａｉｎが、テスト項目ｔ１を示す通過関数表２０７の通過関数欄８０２に含まれると判定する。そして、通過判定部１０９は、ステップ７０５およびステップ７０６において、変更文Ｓ５に対応する呼出しＩＤ欄６０２が示す関数呼出しＣ２は、テスト項目Ｔ１に対応する通過関数欄８０２に含まれないと判定する。このため、通過判定部１０９は、テスト項目Ｔ１を変更文Ｓ５のテスト項目の候補として選択しない。
【０１４４】
さらに、ステップ７０４〜ステップ７０９において、テスト項目Ｔ１を変更文Ｓ８のテスト項目の候補として選択するか否かを判定する。しかし、変更文Ｓ８に対応する呼出しＩＤ欄６０２は関数呼出しＣ２および関数呼出しＣ３を示し、関数呼出しＣ２に対応する呼出し関数欄５０４が示すｆｕｎｃＢと、関数呼出しＣ３の呼出し関数欄５０４が示すｆｕｎｃＣとは、いずれもテスト項目Ｔ１の通過関数欄８０２に含まれない。このため、通過判定部１０９は、テスト項目Ｔ１を、変更文Ｓ８のテスト項目の候補として選択しない。
【０１４５】
次に、通過判定部１０９は、図９に示す処理によって、テスト項目Ｔ２を、各変更文のテスト項目の候補として選択するか否かを判定する。
【０１４６】
通過判定部１０９は、まず、ステップ７０４〜ステップ７０９において、テスト項目Ｔ２を変更文Ｓ５のテスト項目の候補として選択するか否かを判定する。変更文Ｓ５に対応する呼出しＩＤ欄６０２は関数呼出しＣ１を示し、関数呼出しＣ２に対応する呼出し関数欄５０４が示すｆｕｎｃＢは、テスト項目Ｔ２に対応する通過関数欄８０２に含まれる。このため、ステップ７０８とステップ７０９とにおいて、通過判定部１０９は、テスト項目Ｔ２を変更文Ｓ５のテスト項目の候補として選択し、選択理由欄９０３に「Ｓ５」を登録する。
【０１４７】
さらに、変更文Ｓ８に対応する呼出しＩＤ欄６０２には、関数呼出しＣ２および関数呼出しＣ３が含まれ、関数呼出しＣ２の呼出し関数欄５０４が示すｆｕｎｃＢと、関数呼出しＣ３の呼出し関数欄５０４が示すｆｕｎｃＣとは、テスト項目Ｔ２の通過関数欄８０２に含まれる。このため、通過判定部１０９は、テスト項目Ｔ２を変更文Ｓ８のテスト項目の候補として選択し、選択理由欄９０３に「Ｓ８」を追加する。
【０１４８】
次に、通過判定部１０９は、図９に示す処理によって、テスト項目Ｔ３を各変更文のテスト項目の候補として選択するか否かを判定する。
【０１４９】
変更文Ｓ５に対応する呼出しＩＤ欄６０２は関数呼出しＣ２を示し、関数呼出しＣ２に対応する呼出し関数欄５０４が示すｆｕｎｃＢは、テスト項目Ｔ３の通過関数欄８０２に含まれる。このため、通過判定部１０９は、テスト項目Ｔ３を変更文Ｓ５のテスト項目の候補として選択し、テスト項目Ｔ３の選択理由欄９０３に「Ｓ５」を登録する。
【０１５０】
変更文Ｓ８に対応する呼出しＩＤ欄６０２は関数呼出しＣ２および関数呼出しＣ３を示し、関数呼出しＣ２に対応する呼出し関数欄５０４が示すｆｕｎｃＢは、テスト項目Ｔ３の通過関数欄８０２に含まれる。しかし、関数呼出しＣ３の呼出し関数ｆｕｎｃＣは、テスト項目Ｔ３の通過関数欄８０２に含まれない。
【０１５１】
このため、通過判定部１０９は、ステップ７０７において、特定された呼出し関数欄５０４の値がテスト項目ｔ１を示す通過関数表２０７のエントリの通過関数欄８０２に含まれないと判定する。そして、ステップ７０３に戻り、テスト項目Ｔ３を変更文Ｓ８のテスト項目の候補として選択しない。
【０１５２】
通過判定部１０９は、テスト項目Ｔ４、テスト項目Ｔ５、および、テスト項目Ｔ６について、同様の処理を行った結果、図８に示す判定結果登録表２１０を生成する。
【０１５３】
図８に示す判定結果登録表２１０の表示例は、図１１に示す画面１０００のテスト項目選択結果欄１０１０である。テスト項目選択結果欄１０１０において、各テスト項目に対応する、図８に示す選択結果欄９０２の値が、ＹｅｓまたはＮｏによって表示される。
【０１５４】
また、図１１に示すテスト項目選択結果欄１０１０には、関連変更文として、変更文Ｓ５および変更文Ｓ８に対応する値が表示される。具体的には、テスト項目選択結果欄１０１０には、ソースコード１１００の７行目および１０行目のソースコード（ソースコード１１０４の値に対応）と行番号（行欄１１０１の値に対応）とが表示される。
【０１５５】
選択理由詳細欄１０２０には、例えば、テスト項目Ｔ２と、テスト項目Ｔ２に対応する図７に示す通過関数欄８０２の値とが表示される。また、選択理由詳細欄１０２０には、選択理由欄９０３の変更文Ｓ５および変更文Ｓ８に対応する、行番号（行欄１１０１の値に対応）、ソースコード（ソースコード１１０４の値に対応）、および、所属関数が表示される。また、図６に示す各変更文に対応する呼出しＩＤ欄６０２が示す関数呼出し文のソースコードが示される。
【０１５６】
前述の判定結果表示部１１１は、図１１に示す画面１０００のように、テスト項目の候補をディスプレイ装置２０２に表示させた。これによって、ユーザはテスト項目の候補の中から、変更後プログラム１０２のソースコードに対して行うテスト項目を決定することができる。
【０１５７】
しかし、本実施例の判定結果表示部１１１は、テスト項目の候補をテスト項目と決定し、決定されたテスト項目を、変更後のプログラムをテストするシステムに送信してもよい。これによって、ユーザの入力作業を介することなく、変更後のプログラムのテストを実行できる。
【０１５８】
実施例１によれば、テスト項目を選択するために、プログラムのソースコードから変更部分を抽出し、さらに、変更部分が実行される際に必ず実行される関数呼出しを抽出する。また、抽出された関数呼出しが呼び出す関数と、プログラムの修正前に行われたテストにおいて実行された関数とが同じであるテスト項目を、テスト項目の候補として選択する。これによって、精度よくテスト項目を選択できる。そして、これによって、テスト実行時間の増大を回避できる。
【０１５９】
実施例１によれば、テストにおいて実行される関数を示す通過関数表８０２に従って、テスト項目の候補を選択する。これによって、プログラムに含まれるすべての文に関する実行情報に従ってテスト項目の候補を選択するよりも、本実施例の計算機システムは、テスト項目の候補を選択するための処理時間および処理の負荷を低減できる。また、すべての文が実行されるか否かを示す実行情報を取得するために長時間をかける必要がない。
【０１６０】
すなわち、本実施例の計算機システムは、テスト項目を選択するための時間の増大を回避でき、さらに、処理の負荷を低減できる。
【０１６１】
さらに、通過関数表８０２に従ってテスト項目の候補を選択することによって、モジュール単位の実行結果を用いてテスト項目の候補を選択するよりも、必要なテスト項目を精度よく選択することができる。
【実施例２】
【０１６２】
以下に示す本実施例２は、テスト項目実行情報１０５が通過関数情報として関数間の呼出し関係を含む場合の、テスト項目の選択処理である。すなわち、実施例１における通過判定部１０９は、変更文が実行される際に必ず実行される関数呼出し文が、テスト項目において実行されるか否かに従ってテスト項目を選択した。しかし、実施例２における通過判定部１０９は、変更文が実行される際に必ず実行される関数呼出し文と、その関数呼出し文の所属関数との組合せが、テスト項目においてテストされているか否かに従って、テスト項目を選択する。
【０１６３】
実施例２における計算機システムは、実施例１における計算機システムと同様であるが、実施例２における主記憶装置２０７は、実施例１の通過関数表２０７の代わりに通過関数表１２００を保持する。また、実施例２における通過判定部１０９は、実施例１における通過判定部１０９が実行する処理と、一部の処理が異なる処理を実行する。すなわち、実施例２における計算機システムは、通過関数表１２００、および、通過判定部１０９以外、実施例１における計算機システムと同じ構成を有する。
【０１６４】
図１２は、本実施例２の通過関数表１２００を示す説明図である。
【０１６５】
通過関数表１２００は、テスト項目実行情報１０５に含まれる通過関数情報から抽出されたテーブルである。通過関数表１２００は、テスト項目欄１２０１、および、通過関数欄１２０２を含む。
【０１６６】
テスト項目欄１２０１は、テスト項目を一意に識別するための識別子を含む。通過関数欄１２０２は、テスト項目において実行される関数の呼出し関係を示す値を含む。
【０１６７】
実施例２の通過関数欄１２０２において、矢印は、呼出し関係を示す。具体的には、「Ａ→Ｂ」は、関数Ａから関数Ｂを呼び出したことを示す。
【０１６８】
また、「Ａ→（Ｂ，Ｃ）」のように括弧内にコンマ区切りで関数名が記載された場合、主となる関数が複数の関数を呼び出したことを示す。具体的には、「Ａ→（Ｂ，Ｃ）」は、関数Ａから関数Ｂと関数Ｃとが呼び出されたことを示す。この場合、「Ａ→Ｂ」と「Ａ→Ｃ」との２個の呼出し関係があるとみなす。
【０１６９】
実施例２における処理は、ステップ３０１、ステップ３０２、および、ステップ３０４は、実施例１と同じ処理である。ただし、ステップ３０３におけるテスト項目を選択する処理が実施例２と実施例１とで異なる。以下において、ステップ３０３における処理を示す。
【０１７０】
図１３は、本実施例２のテスト項目判定処理を示すフローチャートである。
【０１７１】
図１３に示す処理は、ステップ１３０７を除いて、図９に示す処理と同じである。すなわち、ステップ１３０１〜ステップ１３０６は、図９に示すステップ７０１〜ステップ７０６と同じであり、ステップ１３０８およびステップ１３０９は、図９に示すステップ７０８およびステップ７０９と同じである。
【０１７２】
通過判定部１０９は、ステップ１３０７において、ステップ１３０６において抽出された関数呼出しｃ１と、関数呼出しｃ１の所属関数（所属関数欄５０３の値に対応）とが、テスト項目ｔ１に対応する通過関数欄１２０２に示される呼出し関係であるか否かを判定する。そして、呼出しＩＤ欄６０２が示すすべての関数呼出しｃ１と、関数呼出しｃ１の所属関数とが、テスト項目ｔ１に対応する通過関数欄１２０２に示される呼出し関係である場合、ステップ１３０８において、テスト項目ｔ１を変更文ｓ１のテスト項目の候補として選択する。
【０１７３】
例として、図１１に示したソースコード１１００を用いた場合の、実施例２のテスト項目判定処理を以下に示す。なお、実施例２において、変更文はソースコード欄１１０４において３行目の変更文Ｓ２であるとする。
【０１７４】
変更文Ｓ２を実行した際に必ず実行される関数呼出し文は、ソースコード１１００において文Ｓ３のｆｕｎｃＡの関数呼出しである。図１２に示す各エントリのテスト項目において、ｆｕｎｃＡの関数読出しが実行されるか否かを判定するため、通過判定部１０９は、ステップ１３０７において、ｆｕｎｃＡの所属関数ｍａｉｎと、ｆｕｎｃＡとの関係（すなわち、「ｍａｉｎ→ｆｕｎｃＡ」）が、通過関数表１２００の通過関数欄１２０２に含まれるか否かを判定する。
【０１７５】
テスト項目Ｔ１およびテスト項目Ｔ２に対応する通過関数欄１２０２には、「ｍａｉｎ→ｆｕｎｃＡ」が含まれない。しかし、テスト項目Ｔ３、テスト項目Ｔ４、および、テスト項目Ｔ５に対応する通過関数欄１２０２には、「ｍａｉｎ→ｆｕｎｃＡ」が含まれる。
【０１７６】
このため、通過判定部１０９は、ステップ１３０８において、テスト項目Ｔ３、テスト項目Ｔ４、および、テスト項目Ｔ５を変更文Ｓ２のテスト項目の候補として選択する。
【０１７７】
ここで、テスト項目Ｔ６に対応する通過関数欄１２０２は、所属関数ｍａｉｎおよびｆｕｎｃＡの呼出し関係を含むが、ｆｕｎｃＡはｆｕｎｃＢから直接呼び出されている。これは、ソースコード１１００において、関数呼出し文Ｓ１１によってｆｕｎｃＡが呼び出され、呼出し文Ｓ３が実行されないことに対応する。このため、通過判定部１０９は、ステップ１３０８において、テスト項目Ｔ６を選択しない。
【０１７８】
実施例１において、図７の通過関数表２０７に示すように、テスト項目Ｔ３とテスト項目Ｔ６との通過関数欄８０２が同じであり、変更文が文Ｓ２であった場合、通過判定部１０９は、テスト項目Ｔ３とテスト項目Ｔ６との両方を、テスト項目の候補として選択する。
【０１７９】
しかし、前述の実施例２のように、通過関数欄８０２に、関数呼出し文と関数呼出し文の所属関数との呼出し関係を保持することによって、通過判定部１０９は、より精度よくテスト項目の候補を選択することができる。
【０１８０】
なお、本実施例は前述に限定されるものではなく、様々な変形例が含まれる。すなわち、前述した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【符号の説明】
【０１８１】
１０４・・・プログラム変更部分情報、１０５・・・テスト項目実行情報、１０８・・・呼出し解析部、１０９・・・通過判定部、１１１・・・判定結果表示部、２０７・・・通過関数表、２０９・・・呼出し解析結果登録表、２１０・・・判定結果登録表
【図１】
2013232166.tif 000003
【図２】
2013232166.tif 000004
【図３】
2013232166.tif 000005
【図４】
2013232166.tif 000006
【図５】
2013232166.tif 000007
【図６】
2013232166.tif 000008
【図７】
2013232166.tif 000009
【図８】
2013232166.tif 000010
【図９】
2013232166.tif 000011
【図１０】
2013232166.tif 000012
【図１１】
2013232166.tif 000013
【図１２】
2013232166.tif 000014
【図１３】
2013232166.tif 000015