(57)【特許請求の範囲】
【請求項１】
ソフトウェアのテストの実行時に得られたテスト実行ログ、および、前記テスト実行ログとテスト項目との対応付け情報を記憶する記憶部と、
前記テスト実行ログに含まれる各レコードに対し、レコードの内容に応じて、状態または遷移を表すラベルを付与するテスト実行ログ格納処理部と、
前記ラベルが付与されたテスト実行ログについて、同一内容のテスト実行ログをマージして前記記憶部に格納するテスト実行ログ群格納処理部と、
前記マージされた前記テスト実行ログに対し、前記テストの開始から終了までの経路を検索することでテスト実行パスを抽出し、該抽出したテスト実行パスと前記対応付け情報とに基づいて、消化可能なテスト項目を含むテストシナリオを抽出し、前記記憶部に格納するテストシナリオ抽出部と、
を有する、
ことを特徴とするテスト支援システム。
【請求項２】
前記テストシナリオ抽出部は、
前記マージされたテスト実行ログにおいて、前記テストの開始から終了までの前記テスト実行パスの抽出処理を繰返し実行し、
前記抽出されたテスト実行パスごとに消化可能なテスト項目を抽出し、前記対応付け情報内の消化可能なテスト項目を網羅する前記テストシナリオを抽出し、前記記憶部に格納する
ことを特徴とする請求項１に記載のテスト支援システム。
【請求項３】
前記テストシナリオ抽出部は、
前記消化可能なテスト項目を網羅する前記テストシナリオから、消化可能なテスト項目を網羅するテストシナリオが複数存在する場合、前記テストを実行する際のテスト実行時間が小さくなるテストシナリオを抽出し、前記記憶部に格納する、
ことを特徴とする請求項２に記載のテスト支援システム。
【請求項４】
前記テストシナリオの出力指示に基づき、該当テストシナリオを前記記憶部から取得し、出力するテストシナリオ出力部をさらに有する、
ことを特徴とする請求項１乃至請求項３の何れか１項に記載のテスト支援システム。
【請求項５】
ソフトウェアのテストを支援するテスト支援システムにおけるテスト支援方法であって、
テスト支援システムは、ソフトウェアのテストの実行時に得られたテスト実行ログ、および、前記テスト実行ログとテスト項目との対応付け情報を記憶する記憶部を具備し、
前記テスト支援システムにより、
前記テスト実行ログに含まれる各レコードに対し、レコードの内容に応じて、状態または遷移を表すラベルを付与し、
前記ラベルが付与されたテスト実行ログについて、同一内容のテスト実行ログをマージして前記記憶部に格納し、
前記マージされた前記テスト実行ログに対し、前記テストの開始から終了までの経路を検索することでテスト実行パスを抽出し、
前記抽出したテスト実行パスと前記対応付け情報とに基づいて、消化可能なテスト項目を含むテストシナリオを抽出し、
前記抽出したテストシナリオを前記記憶部に格納する、
ことを特徴とするテスト支援方法。
【請求項６】
前記テスト支援システムにより、
前記マージされたテスト実行ログにおいて、前記テストの開始から終了までの前記テスト実行パスの抽出処理を繰返し実行し、
前記抽出されたテスト実行パスごとに消化可能なテスト項目を抽出し、前記対応付け情報内の消化可能なテスト項目を網羅する前記テストシナリオを抽出し、前記記憶部に格納する
ことを特徴とする請求項５に記載のテスト支援方法。
【請求項７】
前記テスト支援システムにより、
前記消化可能なテスト項目を網羅する前記テストシナリオから、消化可能なテスト項目を網羅するテストシナリオが複数存在する場合、前記テストを実行する際のテスト実行時間が小さくなるテストシナリオを抽出し、前記記憶部に格納する、
ことを特徴とする請求項６に記載のテスト支援方法。
【請求項８】
前記テスト支援システムにより
前記テストシナリオの出力指示に基づき、該当テストシナリオを前記記憶部から取得し、
出力する、
ことを特徴とする請求項５乃至請求項７の何れか１項に記載のテスト支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのテストを支援する技術に関する。
【背景技術】
【０００２】
ソフトウェアの品質を確保する上で、設計書どおりに動作するか、所望の性能を有しているかなど、ソフトウェアの動作を確認するためのテストは重要な工程である。特許文献１には、ソフトウェアのプログラムを作成するプログラム作成手段と、プログラム作成の中間過程で生成されるオブジェクト間関係記述ファイルに基づいてソフトウェアの仕様情報を生成する仕様情報生成手段と、仕様情報生成手段により生成された仕様情報に基づいてシステムテストを行う際の操作手順を定めたテストシナリオを生成するテストシナリオ生成手段と、テストシナリオ実行手段等を設けることにより、ソフトウェアのプログラム作成工程からシステムテスト工程までの一連のソフトウェア開発を効率的に行うことができるソフトウェアの開発支援装置が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２２３０４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし特許文献１に記載の技術は、テストシナリオを生成するために、あらかじめソフトウェアのプログラムを作成し、プログラム作成の中間過程で生成されるオブジェクト間関係記述情報に基づいて、ソフトウェアの仕様情報を生成しておく必要がある。
【０００５】
そこで本発明は、あらかじめソフトウェアのプログラムおよび仕様情報を作成することなく、テストシナリオを生成することができるテスト支援方法およびテスト支援システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の代表的な一例は次の通りである。すなわち、本発明のテスト支援システムは、ソフトウェアのテスト実行時に得られたテスト実行ログ、および、前記テスト実行ログとテス項目との対応付け情報を記憶する記憶部と、前記テスト実行ログに含まれる各レコードに対し、レコードの内容に応じて、状態または遷移を表すラベルを付与するテスト実行ログ格納処理部と、前記ラベルが付与されたテスト実行ログについて、同一内容のテスト実行ログをマージして前記記憶部に格納するテスト実行ログ群格納処理部と、前記マージされた前記テスト実行ログに対し、前記テストの開始から終了までの経路を検索することでテスト実行パスを抽出し、該抽出したテスト実行パスと前記テスト項目対応表とに基づいて、消化可能なテスト項目を含むテストシナリオを抽出し、前記記憶部に格納するテストシナリオ抽出部とを有する。
【発明の効果】
【０００７】
本発明によれば、あらかじめソフトウェアのプログラムおよび仕様情報を作成することなく、テストシナリオを生成することができる。
【図面の簡単な説明】
【０００８】
【図１】第一の実施例におけるテスト支援システム１の構成を表す図である。
【図２】第一の実施例におけるテスト管理装置１００およびテストシナリオ出力装置１１０を実現するハードウェア構成例を示す図である。
【図３】第一の実施例におけるテスト支援システム１の動作概要を示す図である。
【図４（ａ）】第一の実施例におけるテスト実行ログ入力部１０２によるテスト実行ログ格納処理およびテスト実行ログ格納処理部１０４によるテスト実行ログ群格納処理のフローを示す図である。
【図４（ｂ）】第一の実施例におけるテスト実行ログ入力部１０２のテスト実行ログ格納処理およびテスト実行ログ格納処理部１０４のテスト実行ログ群格納処理のフローを示す図である。
【図５】ユーザインターフェイスを介してユーザから入力されるテスト実行ログ５００、および、テスト実行ログ格納部１０３に格納されるラベル付与後のテスト実行ログ５０１の一例を示す図である。
【図６】第一の実施例におけるテスト実行ログ群格納部１０５の構成の一例を示す図である。
【図７】第一の実施例におけるテスト項目対応表格納部１０７の構成の一例を示す図である。
【図８】第一の実施例におけるテストシナリオ抽出処部１０９における処理の流れの概要を示す図である。
【図９】第一の実施例におけるテストシナリオ格納部１１３の構成の一例を示す図である。
【図１０】第一の実施例におけるテストシナリオ出力部１１４によって出力されるテストシナリオの一例を示す図である。
【図１１】第二の実施例におけるテストシナリオ格納部１１３の構成の一例を示す図である。
【図１２】第一の実施例におけるテストシナリオ出力装置１１０の画面イメージの一例を示す図である。
【図１３】第一の実施例におけるテストシナリオ抽出部１０４における全テスト項目を消化するためのテストシナリオの集合を出力するための処理の一例を示す図である。
【発明を実施するための形態】
【０００９】
（第一の実施例）
【００１０】
図１は、本実施例におけるテスト支援システム１の全体構成例を表す図である。図１に示すように、テスト支援システム１は、テスト管理装置１００とテストシナリオ出力装置１１０とから構成される。テスト管理装置１００は、ユーザインターフェイス１０１と、テスト実行ログ入力部１０２およびテスト項目対応表入力部１０６の各入力部と、テスト実行ログ格納処理部１０４およびテストシナリオ抽出部１０８の各処理部と、テスト実行ログ格納部１０３、テスト項目対応表格納部１０７およびテスト実行ログ郡格納部１０５の各格納部とを有する。
【００１１】
テストシナリオ出力装置１１０は、ユーザインターフェイス１１１と、テストシナリオ出力部１１４（処理部）と、テスト項目対応表格納部１１２およびテストシナリオ格納部１１３の各格納部とを有する。
【００１２】
ここで、テスト実行ログ入力部１０２は、ユーザインターフェイス１０１を介してユーザにより入力されたテスト実行ログを受付け、テスト実行ログ格納部１０３に格納する。
【００１３】
テスト項目対応表入力部１０６は、ユーザインターフェイス１０１を介してユーザにより入力された、消化対象となるテスト項目とテスト実行ログとの対応関係を管理するテスト項目対応表を受付け、テスト項目対応表格納部１０７に格納する。テスト実行ログ格納処理部１０４は、テスト実行ログ格納部１０３に格納されたテスト実行ログを分析し、テスト実行ログ群格納部１０５の情報を更新する。テストシナリオ抽出部１０８は、テスト実行ログ郡格納部１０５からテストシナリオを抽出し、抽出したテストシナリオをテストシナリオ格納部１１３に格納する。テストシナリオ出力部１１４は、ユーザインターフェイス１１１を介してユーザにより入力されたテストシナリオ出力指示に基づき、出力指示されたテストシナリオをテストシナリオ格納部１１３から抽出し、出力する。
【００１４】
なお、テストシナリオ抽出部１０８により抽出されたテストシナリオのテストシナリオ格納部１１３への格納は、ネットワークを介して行ってもよいし、ＵＳＢメモリなどの外部記憶媒体を用いて行ってもよい。同様に、テスト管理装置１００のテスト項目対応表格納部１０７からテストシナリオ出力装置１１０のテスト項目対応表格納部１１２へのテスト項目対応表の格納処理は、ネットワークを介して行ってもよいし、ＵＳＢメモリなどの外部記憶媒体を用いて行ってもよい。
【００１５】
図２は、テスト管理装置１００およびテストシナリオ出力装置１１０を実現するハードウェア構成例を示す図である。図２に示すように、テスト管理装置１００およびテストシナリオ出力装置１１０は、各種処理や演算、コンピュータ全体の制御等を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）２０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０２と、各種プログラムおよびデータを記憶するＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の外部記憶装置２０３と、モニタやプリンタ等の出力装置２０５と、各装置間のデータの送受信を行うインターフェイス（例えば、ＢＵＳ）２０４と、を備えた、一般的なコンピュータ（電子計算機）である。
【００１６】
ＣＰＵ２０１は、外部記憶装置２０３から各種プログラムをＲＡＭ２０２にロードし、所定のプログラムを実行することにより上述の各処理部を実現する。すなわち、ＣＰＵ２０１は、ＲＡＭ２０２にロードされたプログラムを実行することにより、テスト管理装置１００のテスト実行ログ入力部１０２、テスト実行ログ格納処理部１０４、テスト項目対応表入力部１０６およびテストシナリオ抽出部１０８の各処理部と、テストシナリオ出力装置１１０のテストシナリオ出力部１１４をプロセスとして具現化する。また、テスト管理装置１００のテスト実行ログ格納部１０３、テスト実行ログ群格納部１０５およびテスト項目対応表格納部１０７と、テストシナリオ出力装置１１０のテスト項目対応表格納部１１２およびテストシナリオ格納部１１３は、ＣＰＵ２０１が実行処理した結果を記憶するＲＡＭ２０２や外部記憶装置２０３として実現される。
【００１７】
上記所定のプログラムは、予め外部記憶装置２０３に格納されていてもよいし、コンピュータが利用可能な可搬性を有する外部記憶媒体から読取装置を介して必要に応じて読み出されてもよいし、あるいは、コンピュータが利用可能な通信媒体であるネットワークまたはネットワーク上を伝搬する搬送波を利用する通信装置と接続された他のコンピュータから必要に応じてダウンロードされて外部記憶装置２０３に格納されるものであってもよい。
【００１８】
図３は、第一の実施例におけるテスト支援システム１の動作概要を示す図である。
【００１９】
開始
ステップ３０１：テスト支援システム１は、ソフトウェアのテスト実行により得られた全テスト実行ログに対して、ステップ３０２およびステップ３０３の処理を繰り返し行う。
【００２０】
ステップ３０２：テスト実行ログ入力部１０２は、入力装置２０６を介して入力されたテスト実行ログを受付け、受付けたテスト実行ログを分析し、その分析結果をテスト実行ログ格納部１０３に格納する。
【００２１】
ステップ３０３：テスト実行ログ格納処理部１０４は、テスト実行ログ格納部１０３に格納されたテスト実行ログの分析結果に基づき、テスト実行ログ郡格納部１０５の情報を更新する。
【００２２】
ステップ３０４：ステップ３０１に戻る。
【００２３】
ステップ３０５：テストシナリオ抽出部１０８は、テスト実行ログ郡格納部１０５に格納されたテスト実行ログ群を分析する。分析して得られたテストシナリオはネットワークあるいは外部記憶媒体を介してテストシナリオ格納部１１３に格納される。
【００２４】
ステップ３０６：テストシナリオ出力部１１４は、入力装置２０６を介して入力されたテストシナリオの出力指示に基づき、指示されたテストシナリオをテストシナリオ格納部１１３から抽出し、出力装置２０５に出力する。
【００２５】
終了
図４（ａ）と図４（ｂ）は、第一の実施例におけるテスト実行ログ入力部１０２によるテスト実行ログ格納処理４２０およびテスト実行ログ格納処理部１０４によるテスト実行ログ群格納処理４２１のフローを示す図である。本処理によって、各テスト実行ログに対して状態または遷移を示すラベルを付与し、また同一内容の複数のテスト実行ログをマージしてテスト実行ログ群格納部１０５に格納する。各テスト実行ログに対して状態または遷移を示すラベルを付与することで、テスト実行ログを状態と遷移から構成されるグラフ形式に変換することができる。
【００２６】
開始
[テスト実行ログ格納処理４２０（ステップ４０１から４０４）］
ステップ４０１：テスト実行ログ入力部１０２は、ユーザインターフェイス１０１を介して、ユーザにより入力されたテスト実行ログを取得する。
【００２７】
ステップ４０２：テスト実行ロブ入力部１０２は、ステップ４０１において受け付けたテスト実行ログ内の全てのレコードに対して、ステップ４０３の分析処理を行う。
【００２８】
ステップ４０３：テスト実行ログは、図５のテスト実行ログ５００に示すように、「テストログの生成年月日（ＹＹＹＹＭＭＤＤ ＨＨｍｍ） テスト対象装置名/機能 処理内容」の形式で出力される。そのため、テスト実行ロブ入力部１０２は、テスト実行ログの形式を分析し、各レコードの情報を、テストログの生成年月日、テスト対象装置名/機能、および、処理内容の単位に分割する。そしてテスト実行ロブ入力部１０２は、各レコードに対して、各レコードを一意に識別するログＩＤ、および、レコードの内容に基づき状態または遷移を表すラベルを付与するとともに、付与したログＩＤ、ラベル、テスト実行ログを分割した結果として得られた、装置/機能、および、処理内容を、テスト実行ログ格納部１０３に格納する。ラベル付与前の実行ログとラベル付与後の実行ログを図５に示す。
【００２９】
ステップ４０４：ステップ４０２に戻る。テスト実行ログ内の全てのレコードに対してステップ４０３の処理が行われると、ステップ４０５へ進む。
【００３０】
[テスト実行ログ群格納処理４２１（ステップ４０５から４１４）]
ステップ４０５：テスト実行ログ格納処理部１０４は、テスト実行ログ格納部１０３のテスト実行ログ（ラベル付与後）５０１を参照し、ラベルが「状態」を示す全レコードに対し、ステップ４０６から４０８までの処理を行う。
【００３１】
ステップ４０６：テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１からラベル５１２が「状態」となっているレコードを検索する。
【００３２】
ステップ４０７：検索の結果、検索されたレコードと同一情報を持つレコードがテスト実行ログ管理テーブル６００に有れば、ステップ４０９に進み、存在しなかった場合はステップ４０８に進む。
【００３３】
ステップ４０８： テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１に格納されたレコードの情報をテスト実行ログ管理テーブル６００に格納するとともに、当該レコードのログＩＤを状態管理テーブル６１０の実行ログ６１２に格納し、
当該ログに対してさらに「状態」を一意に識別するための状態ＩＤを付与し、これを該当レコードの状態ＩＤ６１１に格納する。なお、テスト実行ログ(ラベル付与後)５０１の内容５０１が、テスト開始を表す「ＳＴＡＲＴ」、あるいは、テスト終了を表す「ＦＡＬＳＥ」、「ＥＮＤ」である場合には、「ＳＴＡＲＴ」あるいは「ＦＡＬＳＥ」あるいは「ＥＮＤ」を表す情報を状態管理テーブル６１０の該当レコードのフラグ６１３に格納する。
【００３４】
ステップ４０９：ステップ４０５に戻る。
【００３５】
ステップ４１０：テスト実行ログ格納処理部１０４は、テスト実行ログ格納部１０３のテスト実行ログ（ラベル付与後）５０１を参照し、ラベルが「遷移」を示す全レコードに対し、ステップ４１１から４１３までの処理を行う。
【００３６】
ステップ４１１：テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１からラベル５１２が「遷移」となっているレコードを検索する。
【００３７】
ステップ４１２：検索の結果、検索されたレコードと同一情報を持つレコードが有れば、ステップ４１４に進み、存在しなかった場合はステップ４１３に進む。
【００３８】
ステップ４１３： テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１に格納されたレコードの情報をテスト実行ログ管理テーブル６００に格納するとともに、当該レコードのログＩＤに対応する状態ＩＤ６１１を状態管理テーブル６１０から抽出し、抽出した状態ＩＤおよび遷移ＩＤを遷移管理テーブル６２０に格納する。
【００３９】
ステップ４１４：ステップ４１０に戻る。
【００４０】
終了
なお、ステップ４０１において、例えば、サーバとクライアントなど複数の装置で出力された実行ログを、別々のファイルとして入力された場合には、テスト実行ログ入力部１０２は、入力されたテスト実行ログ内の時刻情報等に基づき、テスト実行ログ内の各レコードを時系列に並べ、一つのテスト実行ログに纏める。
【００４１】
また、ログを出力するテスト対象装置におけるテスト実行時のログ生成の際に、あらかじめ状態または遷移のいずれかであるかがわかるような情報を各ログレコードに対して付与しておき、ステップ４０３において、テスト実行ログ入力部１０２が、この情報を用いて各ログレコードへのラベル付与を行うようにしてもよい。また、テスト実行ログの出力内容が状態または遷移のいずれに該当するかを記載した対応表をあらかじめ作成しておき、テスト実行ログ入力部１０２が、この対応表を用いて各ログレコードに対してラベルを付与するようにしてもよい。また、テスト開始状態は、テスト実行時の初期値が異なる場合など必ずしも一つである必要はない。
【００４２】
図５は、ユーザインターフェイスを介してユーザから入力されるテスト実行ログ５００、および、テスト実行ログ格納部１０３に格納されるラベル付与後のテスト実行ログ５０１の一例を示す図である。
【００４３】
テスト実行ログは、ユーザ（テスト実施者）がテスト対象装置、あるいは、システムを操作する過程で生成されるログであり、例えば、ユーザの画面操作や、システムの動作ログ、システムのメモリ状態などテスト項目の確認のために利用可能なログである。図５に示すテスト実行ログ５００は、ユーザの画面操作ログの一例を示している。図５に示すように、テスト実行ログ５００の各レコードは、ログの生成年月日と、テスト対象装置名/機能と、処理内容とから構成されている。テスト対象装置名は、ログ生成元であるテスト対象装置あるいはテスト対象システムの名称を表し、機能はテスト対象装置あるいはテスト対象システムにおけるテストログを生成する機能を表す。
【００４４】
また、テスト実行ログ５００には、テスト実行の開始時と終了時の状態を表す情報が記載される。例えば、ＳＴＡＲＴは、テスト実行を開始したことを表し、ＥＮＤはテストに成功しテストを終了したことを表す。また図示していないが、ＦＡＬＳＥは、テスト対象装置（あるいはシステム）の実装誤りやテストの実行手順誤りにより、テストに失敗して終了したことを表す。これらのテスト開始時と終了時の状態を表す情報は、テスト実行時に各テスト実行ログに付与してもよいし、ユーザインターフェイス１０１を介してテスト実行ログを入力する際に各テスト実行ログに付与してもよい。
【００４５】
なお、テスト実行ログ５００は、システム内の複数の装置、あるいは、装置内の各機能により別々に作成してもよい。このような場合には、各レコードにログ生成時間を記載して、各レコードを時系列順にテスト実行ログ格納部１０３に格納することで、複数の装置、あるいは、各機能により作成されたログを、テストの実行順序と同じ実行順で保管する。あるいは、システムの動作上、機能Ａの後に機能Ｂが実行される等、実行順序が明らかな場合には、各レコードに出力元の機能、装置名称を記載しておくことで、レコードを時系列に並べるようにしてもよい。
【００４６】
テスト実行ログ(ラベル付与後)５０１は、テスト実行ログ入力部１０２により、テスト実行ログ５００の各レコードを分析し、分析結果にラベルとログＩＤを付与しテスト実行ログ格納部１０３に格納した結果を示す。図５に示すように、テスト実行ログ(ラベル付与後)５０１は、テスト実行ログの各レコードを一意に識別するためのログＩＤ５１０と、ログの生成元である装置/機能５１１と、当該ログの内容が状態または遷移のいずれの状態であるかを表すラベル５１２と、実際のログの内容を表す内容５１３とから構成される。
【００４７】
装置/機能５１１には、ログの生成元であるテスト対象装置や機能の名称、あるいは、識別子が格納される。例えば、テスト実行ログ(ラベル付与後)５０１において、ログＩＤが「Ｌ２」のログは、「装置Ａ」の「Ｆ１」という機能により生成されたログであることを表している。なお、テスト対象装置、あるいは、機能が一つしかない場合や、ログの内容からテスト対象装置や機能が確認可能な場合には、装置/機能５１１をテスト実行ログ(ラベル付与後)５０１のログレコードの構成要素としなくてもよい。
【００４８】
前述のとおり、テスト実行ログ５００は、「テストログの生成年月日（ＹＹＹＹＭＭＤＤ ＨＨｍｍ）  テスト対象装置名/機能  処理内容」の形式で出力される。そのため、テスト実行ログ５００のテスト実行ログ(ラベル付与後)５０１への変換にあたっては、テスト実行ログ入力部１０２により、テスト実行ログ５００の形式を分析し、各レコードの情報を、テストログの生成年月日、テスト対象装置名/機能、および、処理内容の単位に分割する。そして、テスト実行ログ入力部１０２により、各レコードに対して、各レコードを一意に識別するログＩＤと、状態または遷移を表すラベルを付与するとともに、付与したログＩＤと、ラベルと、テスト実行ログ５００を分割した結果として得られた、装置/機能、および、処理内容とを、それぞれログＩＤ５１０、ラベル５１２、装置/機能５１１、内容５１３に格納する。
【００４９】
ラベル５１２の「状態」は、例えば、ログイン画面やトップメニュー画面など画面遷移や、システムの動作モード、あるいは、処理状態など、テスト実行中におけるテスト対象システムの動作状態を表し、「遷移」は、上記「状態」に対し、ログイン画面内でのログイン名やパスワードなどの入力、ログイン完了を表すログインボタンのクリック、あるいは、システムの動作モード間の遷移や処理の流れ等、状態間の遷移、および、その遷移における処理や操作などのイベントを表している。
【００５０】
図５に例示したテスト実行ログ（ラベル付与後）５０１では、「Ｏｐｅｎ Ｗｉｎｄｏｗ :Ｌｏｇｉｎ Ｗｉｎｄｏｗ」や「Ｕｐｄａｔｅ Ｗｉｎｄｏｗ :Ｔｏｐ ｍｅｎｕ」など、次の画面に移動したことを表すログに対して、状態ラベルを付与している。これらは、状態と遷移のいずれかであるかがわかるようにテスト実行ログを出力する、あるいは、事前に生成されるログごとに、状態と遷移のいずれに分類するかを定めた対応表を用意しておき、この対応表を参照することでテスト実行ログの各レコードへのラベル付けを行えばよい。なお、テスト実行ログ（ラベル付与後）５０１には、ソフトウェアの実装誤り等によってテスト失敗となった場合のテスト実行ログや、パスワードの入力誤りによって再ログインをした場合等、テスト実行手順の誤りによって、作業手順が冗長となっているテスト実行ログ、あるいは、作業手順の誤りによって、テストそのものが失敗した場合のテスト実行ログを格納してもよい。また、テスト実行ログ(ラベル付与後)５０１は、テスト実行順序と、実行内容がわかればよい。よって、図５に示す例では、時刻情報など、今後の分析で不要となる情報は削除している。なお、時刻情報をテスト実行ログ（ラベル付与後）５０１に含める場合には、時刻情報から各状態、あるいは、遷移にかかる時間を算出し、テスト実行ログ(ラベル付与後)５０１に合せて保管するようにしてもよい。このような追加情報を保管しておくことで、後述するテストシナリオの抽出処理において、テスト実行に関わる実行時間を考慮した、テストシナリオの抽出が可能となる。
【００５１】
上記の処理は、図４（ａ）のテスト実行ログ格納処理４２０において、全てのテスト実行ログ５００の各レコードに対して実行することで、テスト実行時に得られた全てのログがラベルとともにテスト実行ログ格納部１０３に格納される。
【００５２】
図６は、テスト実行ログ群格納部１０５の構成の一例を示す図である。図６に示すように、テスト実行ログ群格納部１０５は、テスト実行ログ管理テーブル６００、状態管理テーブル６１０および遷移管理テーブル６２０から構成されている。テスト実行ログ管理テーブル６００は、テスト実行ログ（ラベル付与後）５０１の構成と同様に、ログを一意に識別するためのログＩＤ６０１、ログの生成元を表す装置/機能６０２、ラベル６０３、および、ログの内容を表す内容６０４とから構成される。同一内容の複数のテスト実行ログは、テスト実行ログ格納処理部１０４によりマージされてテスト実行ログ管理テーブル６００に格納される。すなわち、図４（ｂ）のステップ４０７とステップ４１２の処理により、検索レコードと同一情報を持つレコードが「有」と判定されれば、このレコードの情報はテスト実行ログ管理テーブル６００には格納されない。なお、装置/機能６０２は、対象となる装置、あるいは、機能が一つしかない場合や、ログから確認可能な場合には、必ずしもテスト実行ログ管理テーブル６００の構成要素としなくてもよい。また、テスト実行ログ（ラベル付与後）５０１同様、テスト実行ログ管理テーブル６００には、ソフトウェアの実装誤り等によってテスト失敗となった場合のテスト実行ログや、パスワードの入力誤りによって再ログインをした場合等、テスト実行手順の誤りによって、作業手順が冗長となっているテスト実行ログ、あるいは、作業手順の誤りによって、テストそのものが失敗した場合のテスト実行ログを格納してもよい。
【００５３】
状態管理テーブル６１０は、ラベル５１２が「状態」を表す実行ログに対して、さらにこれらを一意に識別するための状態ＩＤ６１１、当該状態に対応する実行ログのＩＤ６１２を表す実行ログ６１２、および、テストの開始、終了状態を表すフラグ６１３から構成される。
【００５４】
遷移管理テーブル６２０は、実行ログの遷移を一意に識別する遷移ＩＤ６２１、当該遷移の開始状態のＩＤを表す開始６２２、当該遷移の終了状態のＩＤを表す終了６２３、および、対応する実行ログを表す実行ログ６２４から構成される。
【００５５】
このようなテスト実行ログ管理テーブル６００、状態管理テーブル６１０、遷移管理テーブル６２０は、テスト実行ログ格納処理部１０４により、テスト実行ログ（ラベル付与後）５０１の情報に基づいて、図４に示したステップ４０５からステップ４１４までのテスト実行ログ群格納処理４２１を行うことにより作成される。
【００５６】
以下に、図４のステップ４０５からステップ４０９の処理における、テスト実行ログ管理テーブル６００と状態管理テーブル６１０への情報格納処理について、図５と図６を用いて説明する。
【００５７】
まずステップ４０６において、テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１からラベル５１２が「状態」となっているレコードを検索する。テスト実行ログ格納処理部１０４は、検索されたレコードと同一情報を持つレコードが存在する場合には（ステップ４０７で「有」）、ステップ４０９へ進む。一方、テスト実行ログ管理テーブル６００に、検索されたレコーと同一情報を持つレコードが存在しない場合には（ステップ４０７で「無」）、次のステップ４０８において、テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１に格納されたレコードの情報をテスト実行ログ管理テーブル６００に格納するとともに、そのレコードのログＩＤを状態管理テーブル６１０の実行ログ６１２に格納し、当該実行ログに対してさらに「状態」を表す状態ＩＤを付与し状態ＩＤ６１１に格納する。なお、対象となるテスト実行ログ(ラベル付与後)５０１の内容５０１が、テスト開始を表す「ＳＴＡＲＴ」、あるいは、テスト終了を表す「ＦＡＬＳＥ」、「ＥＮＤ」である場合には、テスト実行ログ格納処理部１０４は、その状態に基づいて、「ＳＴＡＲＴ」あるいは「ＦＡＬＳＥ」あるいは「ＥＮＤ」を表す情報をフラグ６１３に格納する。
【００５８】
次に、図４のステップ４１０からステップ４１４の処理における、テスト実行ログ管理テーブル６００と遷移管理テーブル６２０への情報格納処理について、図５と図６を用いて説明する。なお、以下に記載の「→」は、ログの生成順序を表すものとする。
【００５９】
まずステップ４１０において、テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１からラベル５１２が「状態」となっているレコードを検索し、「状態」（開始状態と呼ぶ）から次の「状態」（終了状態と呼ぶ）までに存在する、ラベル５１２が「遷移」となっているレコード群(遷移実行ログと呼ぶ)を抽出する。そしてテスト実行ログ格納処理部１０４は、ステップ４１１からステップ４１３において、実行ログ管理テーブル６００および遷移管理テーブル６２０への情報格納処理を行う。なお、上記の開始状態から終了状態間にある遷移実行ログの抽出処理において、遷移実行ログがない場合には、遷移実行ログがないものを「空」として、ステップ４１１からステップ４１３の処理を行う。
【００６０】
上記の処理を具体例を用いて説明する。例えば、図５と図６に示す例では、テスト実行ログ格納処理部１０４は、以下のようにして、遷移管理テーブル６２０を作成する。まずテスト実行ログ格納処理部１０４は、ステップ４１０において、テスト実行ログ(ラベル付与後)５０１の最初のレコード(ログＩＤ５１０がＬ１のレコード)から順に分析を開始する。そしてテスト実行ログ格納処理部１０４は、ステップ４１１において、テスト実行ログ(ラベル付与後)５０１の最初のレコードから、開始状態としてログＩＤ５１０が「Ｌ１」を、さらに検索を行い、終了状態としてログＩＤ５１０が「Ｌ２」のレコードを特定する。次にテスト実行ログ格納処理部１０４は、「Ｌ１」から「Ｌ２」までの間にあるログを抽出する。ここでは、「Ｌ１」から「Ｌ２」の間にログが存在しないため、遷移実行ログは「空」となる。さらに、ステップ４１３の処理において、テスト実行ログ格納処理部１０４は、状態管理テーブル６１０の実行ログ６１２を参照し、「Ｌ１」と「Ｌ２」の状態ＩＤ６１１（「Ｓ１」、「Ｓ２」）を抽出する。そしてテスト実行ログ格納処理部１０４は、遷移管理テーブル６２０の開始６２２、終了６２３および実行ログ６２４を参照し、抽出した状態ＩＤが「Ｓ１」、「Ｓ２」および当該状態の遷移実行ログ情報として「空」のレコードの有無を確認する。当該レコードが存在しない場合に（ステップ４１２で「無」）、テスト実行ログ格納処理部１０４は、ステップ４１３において、上記「Ｓ１」、「Ｓ２」を、それぞれ遷移管理テーブル６２０の開始６２２、終了６２３に格納し、遷移ＩＤとして当該レコードを一意に識別する「Ｅ１」を付与し、付与した「Ｅ１」を遷移ＩＤ６２１に格納する。なお、ここでは遷移実行ログは「空」のため、実行ログ６２４には特に情報が格納されない。
【００６１】
ステップ４１３の処理後、テスト実行ログ格納処理部１０４はステップ４１０に戻る。そして、上記同様に、ステップ４１１の処理において、テスト実行ログ格納処理部１０４は、テスト実行ログ(ラベル付与後)５０１を検索し、次の開始状態としてログＩＤが「Ｌ２」、終了状態としてログＩＤが「Ｌ６」を、遷移実行ログとして、「Ｌ２」から「Ｌ６」の間にある「Ｌ３→Ｌ４→Ｌ５」を抽出する。次にテスト実行ログ格納処理部１０４は、状態管理テーブル６１０の実行ログ６１２を参照し、「Ｌ２」と「Ｌ６」の状態ＩＤ６１１（「Ｓ２」、「Ｓ３」）を抽出する。そしてテスト実行ログ格納処理部１０４は、遷移管理テーブル６２０の開始６２２、終了６２３および実行ログ６２４を参照し、抽出した状態ＩＤの「Ｓ２」、「Ｓ３」および当該状態の遷移実行ログが「Ｌ３→Ｌ４→Ｌ５」のレコードの有無を確認する。当該レコードが存在しない場合に（ステップ４１２で「無」）、テスト実行ログ格納処理部１０４は、ステップ４１３において、上記「Ｓ２」、「Ｓ３」を、それぞれ遷移管理テーブル６２０の開始６２２、終了６２３に格納し、上記「Ｌ３→Ｌ４→Ｌ５」を実行ログ６２４に格納し、遷移ＩＤとして当該レコードを一意に識別する「Ｅ２」を付与し、付与した「Ｅ２」を遷移ＩＤ６２１に格納する（ステップ４１３）。以上のようにして、遷移管理テーブル６２０が作成される。
【００６２】
図７は、テスト項目対応表格納部１０７に格納されるテスト項目対応表７００の構成の一例を示す図である。テスト項目対応表７００は、テスト項目を一意に識別するためのテストＩＤ７０１、テスト項目の内容を表すテスト項目７０２、および、当該テスト項目７０２の確認に用いるログを表す対象ログ７０３から構成される。
【００６３】
なお、対象ログ７０３には、対応するテスト項目７０２を特定するための一つ以上の対応するログが格納される。例えば、テストＩＤ７０１が「Ｔ１」のテスト項目７０２「正規ユーザがログインできること」を確認するための対象ログ７０３には、「Ｏｐｅｎ  Ｗｉｎｄｏｗ：Ｌｏｇｉｎ  Ｗｉｎｄｏｗ」、「Ｏｐｅｎ  Ｄｉａｌｏｇ：Ｌｏｇｉｎ  Ｓｕｃｃｅｅｄ」の二つのログが格納されている。このような場合には、ログ「Ｏｐｅｎ  Ｗｉｎｄｏｗ：Ｌｏｇｉｎ  Ｗｉｎｄｏｗ」の出力後にログ「Ｏｐｅｎ  Ｄｉａｌｏｇ：Ｌｏｇｉｎ  Ｓｕｃｃｅｅｄ」が出力された場合に、上記テスト項目「正規ユーザがログインできること」が消化されたものと判断する。
【００６４】
なお、図７では対象ログ７０３において、「→」で複数のログを表しているが、例えば、順序関係を問わず二つのログの何れかが出力される「ＯＲ」形式、あるいは、双方が出力される「ＡＮＤ」形式、さらにはこれらを組み合わせた形式で格納してもよい。このような対象ログ欄の記述の拡張によって、様々なテスト項目の消化可否の判断が可能となる。
【００６５】
また、対象ログ７０３は、図５に記載のテスト実行ログ５００内の文字列の完全一致により検索可能な形式となっているが、文字列の完全一致ではなく、正規表現のようなパターンマッチングを用いてもよい。あるいは、テスト対象装置（あるいはシステム）がテスト実行ログを生成する際に、機能や処理内容ごとにログの種別を定めておき、テスト項目対応表７００にはログの種別のみを格納するようにしてもよい。
【００６６】
次に、テストシナリオ抽出部１０８における、テストシナリオ格納部１１３への登録処理について、図８を用いて、その処理の概要を説明する。
【００６７】
開始
ステップ８０１：すべてのテスト実行パス（テスト開始から終了までの経路）が得られるまで繰り返す。
【００６８】
[テスト実行ログからのシナリオ抽出処理８２０（ステップ８０２から８１０）]
ステップ８０２：テストシナリオ抽出部１０８は、状態管理テーブル６１０を検索し、ＳＴＡＲＴフラグを持つ状態を抽出する。
【００６９】
ステップ８０３：テストシナリオ抽出部１０８は、Ｅｎｄフラグに到達するまで、ステップ８０４から８１０までの処理を行う。
【００７０】
ステップ８０４：テストシナリオ抽出部１０８は、遷移管理テーブル６２０を検索し、開始６２２が、対象状態のログＩＤに一致する遷移を抽出する。
【００７１】
ステップ８０５：テストシナリオ抽出部１０８は、抽出された全ての遷移に対し、ステップ８０６から８１０までの処理を行う。
【００７２】
ステップ８０６：テストシナリオ抽出部１０８は、状態管理テーブル６２０の対象遷移の終了６２３から、遷移先の状態のログＩＤを取得する。
【００７３】
ステップ８０７：テストシナリオ抽出部１０８は、状態管理テーブル６１０から、ステップ８０６で取得したログＩＤを実行ログ欄６１２にもつ状態を取得し、フラグ６１３の内容を確認する。テストシナリオ抽出部１０８は、フラグ６１３に、“ＦＡＬＳＥ”が記載されている場合には、ステップ８１０に、それ以外の場合は、ステップ８０８に進む。
【００７４】
ステップ８０８：テストシナリオ抽出部１０８は、抽出した遷移、状態をパスに追加する。
【００７５】
ステップ８０９：テストシナリオ抽出部１０８は、分析対象の状態を遷移の終了６２３に記載された状態に更新する。
【００７６】
ステップ８１０：ステップ８０５に戻る。
【００７７】
ステップ８１１：ステップ８０３に戻る。
【００７８】
ステップ８１２：テストシナリオ抽出部１０８は、抽出されたＳＴＡＲＴからＥＮＤまでパス（テストパス）をたどり、登録された遷移、登録された遷移に関連する状態、および、対応するレコードをテストシナリオ格納部１１３に登録する。
【００７９】
ステップ８１３：テストシナリオ抽出部１０８は、テスト項目対応表格納部１１２を参照し、パスの消化可能なテスト項目を抽出する。
【００８０】
ステップ８１４：ステップ８０１に戻る
ステップ８１５：テストシナリオ抽出部１０８は、得られたテストシナリオから、全テスト項目を消化可能となるテストシナリオの集合を抽出する。
【００８１】
終了
以上の処理によって、全テスト実行ログによって消化可能なテスト項目を全て網羅する一つ以上のテストシナリオが生成される。
【００８２】
ステップ８０２の処理では、テストシナリオ抽出部１０８は、状態管理テーブル６１０の情報を分析し、フラグ欄６１３が「ＳＴＡＲＴ」となる状態を検索する。例えば、図６の状態管理テーブル６１３では、テストシナリオ抽出部１０８は、フラグ欄６１３に「ＳＴＡＲＴ」と記述されたレコードとして状態ＩＤ「Ｓ１」を抽出する。
【００８３】
次に、ステップ８０４において、テストシナリオ抽出部１０８は、遷移管理テーブル６２０を検索し、開始６２２に状態ＩＤが、上記処理によって得られた状態ＩＤと一致する全てのレコードを抽出する。例えば、上記状態ＩＤが「Ｓ１」の状態に対しては、遷移ＩＤが「Ｅ１」となる遷移を抽出する。なお、図６は、一部のみを例示しているため、抽出される遷移は「Ｅ１」のみであるが、開始欄６２２に状態ＩＤ「Ｓ１」が記載された、全遷移を抽出する。
【００８４】
次にステップ８０６において、テストシナリオ抽出部１０８は、抽出した遷移の終了６２３を参照し、状態管理テーブル６１０の状態ＩＤ欄６１１を参照し、該当する状態を抽出する。例えば、上記遷移ＩＤが「Ｅ１」の遷移に対しては、終了６２３に状態ＩＤ「Ｓ２」が記載されているため、状態管理テーブル６１０より、状態ＩＤが「Ｓ２」である状態を抽出する。
【００８５】
さらにステップ８０７において、テストシナリオ抽出部１０８は、抽出された状態のフラグ６１３を参照し、「ＦＡＬＳＥ」の記載がある場合には、ステップ８１０に進み、パスの検索を終了する。これは、フラグ６１３に「ＦＡＬＳＥ」の記載がある場合には、そのテスト実行は、手順誤り、あるいは、ソフトウェアの実装誤り等の理由によって、テスト実行に失敗したことを表しているため、テストシナリオとして抽出しないようにするためである。
【００８６】
一方、ステップ８０７において、フラグ６１３に「ＦＡＬＳＥ」の記載がない場合には、テストシナリオ抽出部１０８は、ステップ８０８に進み、得られた遷移をパスに追加する。上記の例では、状態管理テーブル６１０の状態ＩＤ６１１が「Ｓ２」のレコードには、フラグ６１３に記載がないため、状態「Ｓ１」、遷移「Ｅ１」、状態「Ｓ２」がパスに加えられる。テストシナリオ抽出部１０８は、さらに状態「Ｓ２」に移り（ステップ８０９）、ステップ８０３に戻ることで、状態管理テーブル６１０のフラグ６１３に「ＥＮＤ」の記載があるまで、上記ステップ８０４からステップ８０８までの処理を行う。
【００８７】
上記処理の繰り返しによって得られる、テスト開始（状態管理テーブル６１０のフラグ６１３に「ＳＴＡＲＴ」が記載された状態）から、テスト終了（状態管理テーブル６１０内のフラグ６１３に「ＥＮＤ」が記載された状態）までに得られた状態と遷移を、テスト実行パスとして登録する（ステップ８１２）。例えば、上記の例では、Ｓ１→Ｅ１→Ｓ２→…のような状態と遷移が、実行パスとして抽出、登録される。
【００８８】
次に、テストシナリオ抽出部１０８は、抽出されたテスト実行パスに対し、テスト項目対応表７００を参照し、抽出されたパスに対し、消化可能なテスト項目を抽出する。
【００８９】
これには、図７のテスト項目対応表格納部１０７に格納されたテスト項目対応表７００を用いて、以下のようにすればよい。
【００９０】
まず、前記抽出されたテスト実行パスは、状態ＩＤ，および、遷移ＩＤのシーケンシャルなデータとして構成される。そこで、テストシナリオ抽出部１０８は、テスト実行パス内の状態ＩＤ、および、遷移ＩＤより、状態管理テーブル６１０の実行ログ６１２、および、遷移管理テーブル６２０の実行ログ６２４を参照し、対応するログＩＤを抽出する。
【００９１】
テストシナリオ抽出部１０８は、テスト実行ログ管理テーブル６００のログＩＤ６０１を参照し、抽出されたログＩＤから対応するテスト実行ログのレコードを検索し、検索されたレコードの内容６０４を参照することで、上記テスト実行パスに対応するテスト実行ログを再生成する。
【００９２】
テストシナリオ抽出部１０８は、再生成されたテスト実行ログを用いて、テスト項目対応表７００のテスト項目それぞれに対し、対象ログ７０３の内容から、再生成されたテスト実行ログが、各テスト項目を消化可能か否かを確認する。各テスト項目が消化可能か否かは、前述のとおり、テスト項目対応表７００の対象ログ７０３を参照し、再生成されたテスト実行ログの内容に完全に一致するか否か、あるいは、パターンマッチングにより、一致するか否かを確認することで、消化可能か否かを判断すればよい。なお、対象ログ欄７００に記載の全ての条件を満たす（ログが一致する）場合には、消化可能とする。
【００９３】
得られた結果は、例えば図９のテストシナリオ管理テーブル９００に示すように、シナリオＩＤ９０１と、シナリオ９０２と、消化可能なテスト項目９０３のリストの組で管理すればよい。
【００９４】
ステップ８０１からステップ８１４による上記処理（ステップ８０５からステップ８１０）の繰返しによって、テスト実行ログ群格納部１０５に格納されているテスト実行ログに対し、全てのテスト実行パスを抽出し、抽出されたテスト実行パス、それぞれに対し、消化可能なテスト項目が抽出される。
【００９５】
次に、テストシナリオ抽出部１０８は、ステップ８１５において、抽出されたテスト実行パスをテストシナリオとして、消化可能なテスト項目を網羅するテストシナリオの組合せを抽出する。
【００９６】
ここで、ステップ８１５におけるテストシナリオの抽出は、例えば、ステップ８１４までに生成されたテストシナリオごとに消化可能なテスト項目をチェックする。次にステップ８１４までに生成されたテストシナリオの全ての組合せに対し、消化可能なテスト項目を確認し、消化可能なテスト項目を網羅するテストシナリオセットを出力する。
【００９７】
このとき、消化可能なテスト項目を網羅するテストシナリオのセットが複数ある場合には、テストシナリオの数が最小となるようなテストシナリオのセットを出力する、あるいは、テストシナリオ内の状態、あるいは、遷移数の合計を計算し、その合計値が最小となるようなテストシナリオのセットを出力するようにしてもよい。また、あるいは、テスト実行ログ(ラベル付与後)５００を作成する際、テスト実行に関わるコスト（テスト実行時間）を保存している場合には、各テストシナリオの実行時間を計算し、実行時間が最小となるテストシナリオのセットを生成してもよい。
【００９８】
以上のように、生成されたテストシナリオを用いて、なるべく効率的にテストを実施するためには、消化可能なテスト項目を網羅するテストシナリオのセットを出力する際に、テストシナリオのコスト（シナリオ数や実行時間等）を小さくすることが望ましい。
【００９９】
図１３は、テストシナリオ抽出部１０４における全テスト項目を消化するためのテストシナリオの集合を出力するための処理の一例を示す図である。
【０１００】
開始
ステップ１３０１：テストシナリオ抽出部１０４は、抽出された全テストシナリオをテストシナリオ候補として記憶する。
【０１０１】
ステップ１３０２：テストシナリオ抽出部１０４は、テスト項目対応表７００を参照し、全テスト項目を未消化テスト項目として記憶する。
【０１０２】
ステップ１３０３：テストシナリオ抽出部１０４は、未消化テスト項目が空になるまで、ステップ１３０４からステップ１３０６の処理を行う。
【０１０３】
ステップ１３０４：テストシナリオ抽出部１０４は、テストシナリオ候補として記憶された全テストシナリオの内、未消化テスト項目を最も多く含むテストシナリオを抽出する。
【０１０４】
ステップ１３０５：テストシナリオ抽出部１０４は、ステップ１３０４で抽出されたテストシナリオを出力テストシナリオに登録し、テストシナリオ候補から削除する。
【０１０５】
ステップ１３０６：テストシナリオ抽出部１０４は、ステップ１３０４で抽出されたテストシナリオに対応するテスト項目を未消化テスト項目から削除する。
【０１０６】
ステップ１３０７：ステップ１３０３に戻る
ステップ１３０８：テストシナリオ抽出部１０４は、ステップ１３０５において出力テストシナリオを、全テスト項目が消化可能なテストシナリオの集合として出力する。
【０１０７】
終了
テスト実行ログからのシナリオ抽出処理８２０によって、テスト実行パスと各テスト実行パスが消化可能なテスト項目の対応が得られる。ステップ１３０１では、テストシナリオ抽出部１０４は、ステップ８１４までに得られたテスト実行パスと消化可能なテスト項目をテストシナリオの候補として記憶する。また、ステップ１３０２では、テストシナリオ抽出部１０４は、全テスト項目を未消化テスト項目として記憶する。ステップ１３０１、および、ステップ１３０２は、ステップ１３０３からステップ１３０７の初期化処理に相当する。
【０１０８】
ステップ１３０３からステップ１３０７は、全テスト項目を消化可能なテストシナリの集合を出力するためのメイン処理となっている。ステップ１３０４からステップ１３０６では、テストシナリオ抽出部１０４は、テストシナリオ候補の中から、未消化テスト項目をもっとも多く消化するテスト項目を抽出し(ステップ１３０４)、抽出されたテストシナリオを出力結果に加える(ステップ１３０５)と共に、テストシナリオ候補、および、対応するテスト項目を未消化テスト項目から削除する(ステップ１３０５、および、ステップ１３０６)。そして、テストシナリオ抽出部１０４は、ステップ１３０４からステップ１３０６までの処理を、未消化のテスト項目がなくなるまで、すなわち、全テスト項目が消化可能となるまで繰り返し行う。
【０１０９】
ステップ１３０４の処理によって、テストシナリオ候補の中から、消化可能なテスト項目を最も多く消化可能なテストシナリオが選ばれるため、これによって、出力されるテストシナリオの数を少なくすることが可能となる。
【０１１０】
なお、ステップ１３０４において、全テストシナリオ候補が未消化テスト項目を含まない場合には、処理を中断してもよい。これは、ステップ８１４までに得られたテストシナリオでは、テスト項目対応表７００に格納された全テスト項目を消化できない場合に生じる。
【０１１１】
また、ステップ１３０４において、消化可能なテスト項目の数が最大となるテストシナリオが複数存在する場合には、そのうちの一つをランダムに選ぶ、または、前記テストシナリオの実行コスト等を参照し、テストシナリオの実行コストが少ないテストシナリオを選ぶなどしてもよい。
【０１１２】
上記の処理は、ステップ８１４を実現するための一例であり、実際の処理は上記と異なってもよい。
【０１１３】
上記ステップ８１５の説明では、抽出されたテストシナリオの全組合せに対して、最小となるテストシナリオのセットを出力する処理の一例について説明したが、上記の処理と異なってもよい。また、上記では、テスト実行ログからのシナリオ抽出処理８２０後に、ステップ８１５を行ったが、テストシナリオ実行ログからのシナリオ抽出処理８２０内で、消化可能なテスト項目の見積もりを行い、直接テストシナリオを抽出するようにしてもよい。
【０１１４】
さらに、上記の説明では、ステップ８１５の処理は、テストシナリオ抽出部１０８において行われる処理として説明したが、ステップ８１３までの処理をテストシナリオ抽出処理部１０９の処理としてもよい。この場合、ステップ８１４の処理は、テストシナリオ出力部１１４の処理として行われることとなる。
【０１１５】
図８のステップ８０１は、全てのテスト実行パスが得られるまで、処理を繰り返している。しかしながら、生成されるテスト実行パスが多い場合には、テストシナリオを抽出するための処理に時間がかかる場合がある。そのような場合には、例えば、一定数のテスト項目が消化可能になるまで、あるいは、事前に定めて特定のテスト項目が消化可能になるまでテスト実行パスを抽出するようにしてもよい。
また、生成するテストシナリオ数の上限を予め定めておき、生成されたテストシナリオが上限に達するまで、テスト実行パスを抽出するようにしてもよい。
【０１１６】
なお、各テスト実行パスにおいて、消化可能なテスト項目をチェックするには、前述のテスト項目対応表７００内の対象ログ７０３の内容を参照し、対象ログに記載されている内容から、テスト実行パス内の各状態、遷移に紐づけられたテスト実行ログの内容と比較することで判断すればよい。
【０１１７】
図８におけるテストシナリオの抽出処理８２０は、テスト実行ログ群格納部１０５に格納されているテスト実行ログが、状態管理テーブル６１０と遷移管理テーブル６２０によりグラフ形式で管理可能であるため、グラフ理論の経路検索や集合被覆問題等を解くためのアルゴリズムを用いることも可能である。
【０１１８】
図９は、テストシナリオ格納部１１３に格納されたテストシナリオ管理テーブル９００の構成の一例を示す図である。図９に示すように、テストシナリオ管理テーブル９００は、テストシナリオを一意に特定するためのシナリオＩＤ９０１、テストシナリオを表すシナリオ９０２、および、消化可能なテスト項目を表すテスト項目欄９０３から構成されている。
【０１１９】
また、テストシナリオレコード管理テーブル９１０は、テスト実行ログ(ラベル付与後)５０１と同様に、対応するテスト実行ログの各レコードを一意に特定するためのログＩＤ９１１、ログ生成元の装置、機能を表す装置/機能９１２、状態、遷移、いずれかの種別を表すラべル９１３、および、ログの内容９１４から構成されている。なお、装置/機能９１２は、対象となる装置、あるいは、機能が一つしかない場合や、ログから確認可能な場合には、必ずしもテストシナリオレコード管理テーブル９１０の構成要素としなくてもよい。
【０１２０】
図９のテストシナリオ９０２には、図８に示したテストシナリオ抽出処理８２０から得られた結果が格納される。
【０１２１】
図９に示すように、テストシナリオ管理テーブル９００には、テストシナリオごとに消化可能なテスト項目がテスト項目９０３に格納されている。これによって、例えば、ソフトウェアの再開発時に影響するテスト項目、あるいは、再テストを実施したいテスト項目を指定することで、対象となるテスト項目を含むテストシナリオの抽出が可能となる。
【０１２２】
図１０は、図８の処理によって生成されるテストシナリオの一例を示している。なお、図１０に記載のテストシナリオは、図９のテストシナリオ管理テーブル９００内のシナリオＩＤ９０１がＰ１となるテストシナリオの一部であり、シナリオ９０２に記載されたログＩＤの順序に従い、テストシナリオレコード管理テーブル９１０のログＩＤ９１１を参照し、一致するログＩＤを持つ内容欄９１４の内容を繋ぎ合わせることで、テストシナリオを構成する。
【０１２３】
図８の出力結果から、図９、図１０に格納する情報について、以下に説明する。
【０１２４】
以下では、図８の出力結果の一つとして、「Ｓ１」→「Ｅ１」→「Ｓ２」→「Ｅ２」→「Ｓ３」→…なるテスト実行パスが得られた場合を例として説明する（状態ＩＤ，および、遷移ＩＤは、図６を参照）。
【０１２５】
このとき、図６の状態管理テーブル６１０の状態ＩＤ６１１と実行ログ６１２を参照することで、Ｓ１に対し「Ｌ１」、「Ｓ２」より「Ｌ２」、「Ｓ３」より「Ｌ６」が得られる。同様に遷移テーブル６２０の遷移ＩＤ６２１と実行ログ６２４を参照することで、「Ｅ２」に対し「Ｌ３→Ｌ４→Ｌ５」が得られる（「Ｅ１に」対しては、実行ログ６２４が空欄のため、得られるログはない）。上記の得られた結果を、テスト実行パスにしたがって並べれば、下記となる。
【０１２６】
・Ｓ１：Ｌ１
・Ｅ１：
・Ｓ２：Ｌ２
・Ｅ２：Ｌ３→Ｌ４→Ｌ５
・Ｓ３：Ｌ６
：
上記より、実行ログのみを抽出すれば、テストシナリオ管理テーブル９００のシナリオ９０２に格納する「Ｌ１→Ｌ２→Ｌ３→Ｌ４→Ｌ５→Ｌ６→…」となる。
【０１２７】
さらに、テストシナリオレコード管理テーブル９１０を参照し、上記のテストシナリの各ログＩＤ（Ｌ１，Ｌ２、Ｌ３、Ｌ４、Ｌ５、Ｌ６、…）に対し、内容９１４を参照することで、下記が得られる。
【０１２８】
Ｌ１：ＳＴＡＲＴ
Ｌ２：Ｏｐｅｎ  Ｗｉｎｄｏｗ：Ｌｏｇｉｎ  Ｗｉｎｄｏｗ
Ｌ３：Ｉｎｐｕｔ  Ｔｅｘｔ  “ｕｓｅｒ０１”  ｉｎ  “ＩＤ”
Ｌ４：Ｉｎｐｕｔ  Ｔｅｘｔ  “ｕｓｅｒ０１” in “Ｐａｓｓｗｏｒｄ” 
Ｌ５：Ｃｌｉｃｋ：ＯＫ 
Ｌ６：Ｏｐｅｎ  Ｄｉａｌｏｇ：Ｌｏｇｉｎ  Ｓｕｃｃｅｅｄ 
：
上記より、内容９１４のみを出力することで、図１０に示すテストシナリオ１０００が得られる。
【０１２９】
なお、図１０に例示したテストシナリオ１０００では、内容９１４のみをテストシナリオに出力した例を示したが、装置/機能９１２の内容も併せて出力してもよい。
【０１３０】
また、内容９１４の内容をそのままテストシナリオとして出力しているが、テストシナリオ１０００に出力する際に、ユーザが見やすいように変換して出力してもよい。例えば、ログＩＤ９１１が「Ｌ４」の内容９１４には、「Ｉｎｐｕｔ Ｔｅｘｔ  “Ｕｓｅｒ０１” ｉｎ  “Ｐａｓｓｗｏｒｄ”」と記載されているが、これを「“Ｐａｓｓｗｏｒｄ”欄に“Ｕｓｅｒ０１”を入力する。」等に変換して出力してもよい。このような変換は、あらかじめ実行ログごとに、変換方法を定めた変換表を用意しておき、テストシナリオ１０００を出力する際、変換表の内容に基づき、内容９１４を変換して出力すればよい。
【０１３１】
上記の変換は、ユーザが見やすく整形するのではなく、テスト自動実行プログラムが読込み可能な形式に整形してもよい。これによって、再テストを行う際、テスト自動実行プログラムによるテスト操作の自動化が可能となる。
【０１３２】
さらに、テスト実行ログの出力時にテストデータが分離可能である場合には、これらの値が変更可能な変数として出力するようにしてもよい。例えば、図１０のテストシナリオ１０００では、４行目の“ｕｓｅｒ０１”はユーザによる入力であり、“ＵｓｅｒＩｄ”は画面上の構成要素を表すＩＤとなっている。
【０１３３】
このとき、“ｕｓｅｒ０１”を“％ＵＳＥＲ＿ＮＡＭＥ％”など、ユーザ入力部等の変数であることがわかるようにテスト実行ログを生成することで、テストシナリオ作成時に、テストデータに相当する箇所を、テスト実行時に差し替えて利用できるようにしてもよい。このような操作は、例えば、前述のテストシナリオを実行スクリプトとして生成し、テスト実行を行う際、テストデータに相当する箇所を、任意に差し替えてテスト実行を行う場合などに有効である。
【０１３４】
また、図１０では、テストの実施内容のみを出力したが、テスト項目９０３に記載されたテストＩＤを元に、テスト項目対応表７００を参照し、テストシナリオごとに確認可能なテスト項目の一覧、あるいは、テスト項目の確認箇所をテストシナリオ内に併記して出力してもよい。
【０１３５】
図１２は、テストシナリオ出力部１１４が提供するユーザインターフェイス１１１のＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）の構成の一例を示す図である。
【０１３６】
図１２に示すＧＵＩには、ファイル、設定、および、ヘルプからなる共通メニュー領域１２０１、テスト項目一覧を表示するテスト項目一覧領域１２０２、テストシナリオの一覧を表示するテストシナリオ一覧領域１２０３、および、テストシナリオを表示するテストシナリオ領域１２０４の各表示領域から構成される。
【０１３７】
また、各表示領域には、テスト項目一覧に対する操作メニュー（テスト項目一覧操作メニュー１２１０）、テストシナリオ一覧に対する操作メニュー（テストシナリオ一覧操作メニュー１２１１）、および、テストシナリオに対する操作メニュー（テストシナリオ操作メニュー１２１２）の各メニュー領域から構成されている。
【０１３８】
共通メニュー領域１２０１内のファイルメニューは、例えば、テストシナリオ出力装置１１０が、複数のテスト対象システムに対するテストシナリオ格納部１１３を有する場合に、該当するテストシナリオ格納部１１３を特定する場合に用いる。あるいは、テスト観点が異なるなど、テストシナリオ抽出の対象となるテストシナリオのセットが複数存在する場合に、対象となるテストシナリオのセットのみを特定する場合に用いる。
【０１３９】
また、設定メニューは、各領域内の表示内容の変更や、テストシナリオをファイル出力する際のフォーマットの指定などの設定を行うためのメニューであり、ヘルプは、ソフトウェアの利用方法に関する説明やコピーライトの表示を行うためのメニューである。
【０１４０】
次に、テスト項目一覧領域１２０２は、テスト項目対応表７００から、テストＩＤ７０１とテスト項目７０２のリストを表示する領域である。ここで、テスト項目一覧領域１２０２内のチェック欄は、テスト実行ログの分析の結果、消化したテスト項目に対し、チェックをつけるための欄である。これによって、例えば、テスト工程中に本ツールの未消化のテスト項目の確認にも利用することが可能となる。
【０１４１】
テスト項目一覧操作メニュー１２１０には、テスト項目一覧領域１２０２に関連する操作メニューが具備されている。図１２に記載のテスト項目確認メニューは、選択中のテスト項目がある場合に、対応する対象ログ７０３の内容をダイアログ表示する。また、チェック済項目確認メニュー、未チェック項目確認メニューは、それぞれ、テスト実行ログの分析の結果、消化可能なテスト項目（すなわち、チェック欄に“レ”記載のテスト項目）、未消化のテスト項目（すなわち、チェック欄に“レ”未記載のテスト項目）のみをテスト項目一覧領域１２０２に表示するためのメニューである。
【０１４２】
また、関連シナリオ表示メニューは、テスト項目一覧領域１２０２内の選択中のテスト項目を含むテストシナリオ一覧をテストシナリオ一覧領域１２０３に強調表示するためのメニューである。これは、下記のようにすればよい。
【０１４３】
まず、テストシナリオ管理テーブル９００を参照し、選択中のテスト項目のテストＩＤを含むテストシナリオを抽出する。そして、抽出されたテストシナリオのシナリオＩＤ９０１を元に、テストシナリオ一覧１２０３の対応するテストシナリオの罫線を太枠表示する、あるいは、背景色を変更する、などして、選択されたテスト項目を含むテストシナリオを強調表示する。
【０１４４】
次に、テストシナリオ一覧領域１２０３は、テストシナリオ管理テーブル９００に格納されているテストシナリオの一覧を表示するための領域である。テストシナリオ一覧領域１２０３には、シナリオを一意に特定するシナリオＩＤ，および、シナリオによって消化可能なテスト項目ＩＤを記載するテスト項目のほか、チェック欄、有効欄、および、コメント欄からなる。
【０１４５】
シナリオＩＤ欄、および、テスト項目欄は、テストシナリオ管理テーブル９００より、シナリオＩＤ９０１、および、テスト項目９０３を取得し、表示する。
【０１４６】
また、コメント欄は、ユーザからの入力を受付け各テストシナリオに対し、テストの実施内容や留意点等のコメントを追記するための欄である。また、チェック欄、テストシナリオを実行したかどうかを入力するための欄であり、有効欄は、生成されたテストシナリオが実際のテストシナリオとして利用可能か否かの判定結果を入力するための欄である。
【０１４７】
本実施例では、テストシナリオはテスト実行ログの分析結果から自動的に生成される。そのため、例えばテスト項目対応表７００の対象ログ７０３の記述が不十分な場合には、生成されたテストシナリオが、必ずしも有効なテストシナリオとなるとは限らない場合がある。そこで、図１２の例では、有効欄を設けることで、無効なテストシナリオがわかるようにしている。
【０１４８】
テストシナリオ一覧領域１２０３を操作するためのメニューである、テストシナリオ一覧操作メニュー１２１１には、シナリオ表示、テスト項目確認、および、シナリオ再生成の各操作メニューが具備されている。
【０１４９】
シナリオ表示メニューは、テストシナリオ一覧領域１２０３の選択中の列を、テストシナリオ表示領域１２０４に表示するためのメニューであり、テスト項目確認は、選択中のテストシナリオに対し、テスト項目に記載のテストＩＤに対応するテスト項目の一覧をダイアログ等で表示するためのメニューである。
【０１５０】
シナリオ表示メニューは、選択中のテストシナリオを、前述の図９から図１０への変換処理を用いればよい。また、テスト項目確認メニューにおける、テスト項目の確認は、前述の関連シナリオ表示とは逆に以下のように処理すればよい。
【０１５１】
まず、テストシナリオ一覧領域１２０３内の選択中のテストシナリオを抽出し、テスト項目欄に記載された全テストＩＤを抽出する。次に抽出したテストＩＤから、テスト項目一覧領域１２０２内のＩＤを参照し、抽出したテストＩＤと一致するテスト項目を、罫線を太枠表示する、あるいは、背景色を変更するなどして、強調表示する。
【０１５２】
シナリオ再生成メニューは、前述の有効欄が未チェック、すなわち、無効なテストシナリオがある場合に、無効なテストシナリオに変わるテストシナリオを再生成するためのメニューである。なお、本処理を行うためには、テストシナリオ格納部１１３に、テストシナリオ抽出部１０８内で抽出された全テストシナリオを保存するようにすればよい。
【０１５３】
あるいは、テストシナリオ抽出部１０８、および、テスト実行ログ郡格納部１０５を、テストシナリオ出力装置１１０に含める、あるいは、テスト管理装置１００、テストシナリオ出力装置１１０を一つの装置として、構成してもよい。
【０１５４】
テストシナリオ領域１２０４には、選択されたテストシナリオの内容を表示するための領域である。また、テストシナリオ領域に具備された操作メニュー（テストシナリオ操作メニュー１２１２）は、表示中のテストシナリオをファイルとして出力するためのシナリオ出力メニューがある。
【０１５５】
シナリオ出力メニューを選択することで、表示中のテストシナリオを、例えばテスト手順書、あるいは、テスト自動実行スクリプトとしてファイルに出力する。なお、このような出力処理は、テストシナリオ一覧操作メニュー１２１１に一括出力メニューを設け、選択中、あるいは、有効なテストシナリオを全て出力するようにしてもよい。
【０１５６】
なお、図１２に記載のＧＵＩは本発明を実現するソフトウェアの一例を示したものであり、必ずしも図１２に記載のＧＵＩである必要はない。
（第二の実施例）
【０１５７】
第一の実施例では、テストシナリオ抽出部１０８において抽出されたテストシナリオを、直接テストシナリオ格納部１１３に格納する方法について説明した。第二の実施例では、テストシナリオ抽出部１０８において抽出されたテストシナリオを、テスト実行ログ群格納部１０５と同様に、状態と遷移に分けて管理する方法について説明する。これにより、テストシナリオ出力装置１１０におけるテストシナリオ出力部１１４による、テストシナリオ１０００を生成する際に、テストシナリオの再構成が可能となる。
【０１５８】
図１１は、第二の実施例におけるテストシナリオ格納部１１３の構成の一例を示す図である。第二の実施例におけるテストシナリオ格納部１１３は、テストシナリオレコード管理テーブル１１００、状態管理テーブル１１１０、遷移管理テーブル１１２０、および、テスト項目確認箇所管理テーブル１１３０の各テーブルから構成される。
【０１５９】
テストシナリオレコード管理テーブル１１００は、対応するテスト実行ログのレコードを一意に特定するログＩＤ１１０１、ログの送信元の装置/機能を管理する装置/機能１１０２、状態、遷移いずれかの種別を管理するラベル１１０３、および、テスト実行ログのレコード内容を格納する内容１１０４から構成される。なお、装置/機能１１０２は、図９と同様、対象となる装置、あるいは、機能が一つしかない場合や、ログから確認可能な場合には、必ずしもテストシナリオレコード管理テーブル１１００の構成要素としなくてもよい。
【０１６０】
状態管理テーブル１１１０は、状態を一意に識別するための状態ＩＤ１１１１、対応するテスト実行ログのレコードを格納する実行ログ１１１２、テストの開始状態、終了状態を格納するフラグ１１１３から構成され、状態管理テーブル１１２０は、遷移を一意に格納する遷移ＩＤ１１２１、遷移の開始もととなる状態を格納する開始１１２２、遷移の終了状態を管理する終了１１２３、および、対応するテスト実行ログのレコードを格納する実行ログ１１２４から構成される。さらに、テスト項目確認箇所管理テーブル１１３０は、消化可能なテスト項目を特定するためのテストＩＤ１１３１、および、テスト項目が消化可能か否かを判断するための状態、あるいは、遷移を管理するための確認箇所１１３２から構成される。
【０１６１】
本テーブルは、第一の実施例に記載したテストシナリオ格納部１１３への登録処理において、抽出されたテスト実行パス上に存在する状態管理テーブル６１０、および、遷移管理テーブル６２０の全レコード、および、レコード内の実行ログ(状態管理テーブル６１０の実行ログ６１３、遷移管理テーブル６２０の実行ログ６２４)に対応するテスト実行ログ管理テーブル６００内の各レコードを、テストシナリオ管理テーブル１１００、状態管理テーブル１１１０、および、遷移管理テーブル１１２０にコピーすればよい。
【０１６２】
あるいは、テスト実行パス上の実行ログを再度状態と遷移の状態に分類し、ステップ４０５から４１４と同様の処理を行うことで生成してもよい。
【０１６３】
また、テスト項目確認箇所管理テーブル１１３０は、テスト項目対応表７００より対象ログを抽出し、状態管理テーブル１１１０、および、遷移管理テーブル１１２０内の実行ログから対応するテスト実行ログのレコードを参照することで生成されるようにすればよい。
【０１６４】
例えば、図７のテスト項目対応表７００のテストＩＤ７０１がＴ１のテスト項目７０２（正規ユーザがログインできること）に対しては、以下のようにテスト項目確認箇所管理テーブル１１３０が作成される。まず、テスト項目対応表７００の対象ログ７０３より、対象ログとして「Ｏｐｅｎ  Ｗｉｎｄｏｗ:Ｌｏｇｉｎ Ｗｉｎｄｏｗ」、 「Ｏｐｅｎ  Ｄｉａｌｏｇ  :Ｌｏｇｉｎ Ｓｕｃｃｅｅｄ 」を得る。次に、テストシナリオレコード管理テーブル１１００の内容１１０４より、上記得られた対応ログと同じ内容を持つログを抽出する。図１１の場合、「Ｏｐｅｎ  Ｗｉｎｄｏｗ:Ｌｏｇｉｎ Ｗｉｎｄｏｗ」に対し、L２が、「Ｏｐｅｎ  Ｄｉａｌｏｇ  :Ｌｏｇｉｎ Ｓｕｃｃｅｅｄ 」に対し、Ｌ６が抽出される。次に、状態管理テーブル１１１０、および、遷移管理テーブル１１２０を検索し、上記抽出したログＩＤを実行ログ欄１１１２、および、１１２４にもつ状態、遷移の状態ＩＤ、あるいは、遷移ＩＤ１１２１を抽出し、Ｌ２に対しＳ２、Ｌ６に対し、Ｓ３を得る。テストＩＤ７０１欄のＴ１をテスト項目確認箇所１１３０のテストＩＤ欄１１３１に、テスト項目対応表７００の対象ログ欄７０３を前記得られた状態ＩＤ（または、遷移ＩＤ）に置き換えた内容(Ｓ２→Ｓ３)を確認箇所欄１１３２に登録する。
【０１６５】
なお、第一の実施例と同様、テスト項目対応表７００の対象ログ７０３から、テストシナリオレコード管理テーブル１１００の内容欄１１０４を抽出する処理は、ログ内容の完全一致だけでなく、正規表現のようなパターンマッチングを用いてもよい。また、上記の状態管理テーブル１１１０、および、遷移管理テーブル１１２０からの状態ＩＤ，遷移ＩＤの抽出において、複数の状態、あるいは、遷移が抽出された場合には、これらを全てテスト項目確認箇所管理テーブル１１３０に登録する。例えば、上記において、Ｌ６に対し、Ｓ３、Ｓ１０が抽出されたとする。この場合には、例えば、確認箇所欄１１３２に、Ｓ２→（Ｓ３ ＯＲ Ｓ１０）→…のように、ＯＲ記号を用い、Ｓ３，Ｓ１０いずれかの場合に、テスト項目が消化可能であることを示すようにすればよい。
【０１６６】
テスト項目確認箇所管理テーブル１１３０を作成しておくことにより、図１１からテストシナリオを生成する際、どのテスト項目が確認可能であるかの確認が容易になる。これは、テスト項目が消化可能か否かを判断する際、テストシナリオ管理テーブル１１００の内容欄１１０４とテスト項目対応表７００の対象ログ欄７０３を、逐次確認するのではなく、テスト項目確認箇所管理テーブル１１３０の確認箇所欄１１３２のみを確認することで、どのテスト項目が消化可能を判断することが可能となるためである（テスト項目対応表７００、および、テストシナリオレコード管理テーブル１１００の参照が不要となるだけでなく、内容欄確認のための、ログ一致、不一致の確認処理が不要となる）。
【０１６７】
第一の実施例では、テストシナリオ格納部１１３は、テストシナリオ抽出部１０８で抽出されたテストシナリオそれぞれを格納していた。第二の実施例では、抽出されたテストシナリオを、テスト実行ログ群格納部１０５と同様に、状態と遷移に、分類して保管する。
【０１６８】
これによって、テストシナリオ格納部１１３内において、各テストシナリオ内の状態、遷移の重複の排除が可能となり、必要となるデータサイズを小さく抑えることが期待できる。また、状態管理テーブル１１１０、および、遷移管理テーブル１１２０を利用した、テストシナリオの再抽出を行うことで、テストシナリオ出力部１１４によるテストシナリオ出力時に、テストシナリオの再構成が容易となる。
【０１６９】
例えば、状態管理テーブル１１１０内の状態ＩＤの内、フラグ１１１３が「ＳＴＡＲＴ」となるラベル１１１３から、状態管理テーブル１１１０、および、遷移管理テーブル１１２０を用いて、状態管理テーブル１１１０内で、フラグ１１１３が「ＥＮＤ」となるまで、検索を行い、ステップ８０３から８１０の処理と同様に、抽出された状態、および、遷移からテスト実行パスを構成する。
【０１７０】
この時、追加入力としてテスト項目を指定し、上記テスト実行パス構成時に、追加入力されたテスト項目を必ず通りテスト実行パスをテストシナリオとして抽出する。このようにすることで、ソフトウェアの改修時に再テストが必要となるテスト項目に関連するテストシナリオの抽出等、が可能となる。
【０１７１】
また、上記追加入力として指定されたテスト項目に対し、上記テスト実行パスの生成とは反対に、指定されたテスト項目を含まないようにテスト実行パスを抽出し、テストシナリオとしてもよい。この場合、例えば、ソフトウェアの改修によって、関連するテスト項目が変更になった場合等、不要なテスト項目を実施しないようなテストシナリオを抽出することが可能となる。
【０１７２】
以上の説明では、第一の実施例、第二の実施例ともに画面操作、および、画面遷移を例として説明したが、本発明は、画面に関わるテスト以外に活用してもよい。
【０１７３】
例えば、第一の実施例のテスト項目対応表７００では、画面表示項目結果を確認するテスト項目を例示したが、データベースや内部処理を確認するためのテスト項目を含んでもよい。
【０１７４】
また、例えば、列車の進路制御システムでは、進路制御システムの制御処理をテストするために対象となる路線図上で、列車の走行パターン（ダイヤ）を作成し、テストを行う。この時、列車の走行パターンによって消化可能なテスト項目は異なるため、複数の走行パターンを作成することで、消化すべきテスト項目を全て消化可能になるまでテストを行う。
【０１７５】
本実施例においては、上記列車走行パターンをテストシナリオとみなし、進路制御システムが生成するテスト実行ログとテスト項目を対応付ける、テスト項目対応表を作成することで、同様にテストシナリオの生成に用いてもよい。
【０１７６】
以上のように、本発明は画面操作、遷移に関わらずテスト実行ログからのテストシナリオの抽出に利用してよい。
【０１７７】
以上本発明の実施例について具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、図１ではテスト管理装置１００とテストシナリオ出力装置１１０の二つの装置からなるテスト支援システムを例示したが、テスト管理装置１００とテストシナリオ出力装置１１０を一つの装置で実現してもよい。また、上記実施例では、テスト実行ログをユーザ入力によって与えられる場合を例にとり説明したが、テスト対象装置、あるいは、システムにより生成されたテスト実行ログを、直接テスト管理装置１００のテスト実行ログ入力部１０２へ入力するようにしてもよい。また、例えば、仮想化やクラウド環境等、テスト対象装置、あるいは、システムがネットワーク上に構築されている場合には、生成されたテスト実行ログを自動的にテスト管理装置１００に送付するようにしてもよい。
【０１７８】
また、上記処理部は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【０１７９】
１００・・・テスト管理装置、１０１、１１１・・・ユーザインターフェイス、１０２・・・テスト実行ログ入力部、１０３・・・テスト実行ログ格納部、１０４・・・テスト実行ログ格納処理部、１０５・・・テスト実行ログ群格納部、１０６・・・テスト項目対応表入力部、１０７、１１２・・・テスト項目対応表格納部、１０８・・・テストシナリオ抽出部、１１３・・・テストシナリオ格納部、１１４・・・テストシナリオ出力部、２０１・・・ＣＰＵ、２０２・・・ＲＡＭ、２０３・・・外部記憶装置、２０４・・・インターフェイス、２０５・・・表示装置、２０６・・・入力装置。
【図１】
0006397800.tif 000002
【図２】
0006397800.tif 000003
【図３】
0006397800.tif 000004
【図４（ａ）】
0006397800.tif 000005
【図４（ｂ）】
0006397800.tif 000006
【図５】
0006397800.tif 000007
【図６】
0006397800.tif 000008
【図７】
0006397800.tif 000009
【図８】
0006397800.tif 000010
【図９】
0006397800.tif 000011
【図１０】
0006397800.tif 000012
【図１１】
0006397800.tif 000013
【図１２】
0006397800.tif 000014
【図１３】
0006397800.tif 000015