(57)【特許請求の範囲】
【請求項１】
ユーザとシステムの間のインタラクションの流れを示すユースケース記述に基づいて、シナリオテスト用のテスト項目を抽出する単独の異常系シナリオを任意回数実行するテスト項目生成装置であって、
入力された設計モデルから、ユースケース記述を取得する設計モデル入力手段と、
前記ユースケース記述からループ経路を含まない全てのテスト経路(以下、「ループ無し経路」と記す)を抽出し、テスト経路集合に加えるループ無しテスト経路抽出手段と、
前記ユースケース記述からループ経路を含むテスト経路(以下「ループ有り経路」と記す)を抽出し、前記テスト経路集合の前記ループ無し経路と該ループ有り経路をつなぎ合わせた新たなテスト経路を生成し、新規追加分テスト経路集合に加えるループ有りテスト経路補完手段と、
前記新規追加分テスト経路集合から、特定の異常系シナリオのみを含むテスト経路を対象異常系テスト経路として抽出し、異常系テスト経路集合に加えるフィルタリング手段と、
前記異常系テスト経路集合の各異常系テスト経路中のループ箇所を複製して実行経路記憶手段に格納するループ経路複製手段と、
を有する実行経路抽出手段と、
前記実行経路記憶手段から前記テスト経路を読み出して、該テスト経路に対するテスト項目を生成するテスト項目生成手段と、
を有することを特徴とする単独の異常系シナリオを任意回数実行するテスト項目生成装置。
【請求項２】
前記ループ有りテスト経路補完手段は、
前記ユースケース記述の矢印部分に相当するエッジのうち、前記ループ無し経路に存在しないエッジをループ経路エッジキューに加える手段と、
前記ループ経路エッジキューの先頭のエッジＸを取り出して、該エッジＸを前記ループ無しテスト経路につなげて前記新たなテスト経路を生成し、ループ経路に印を付与する処理を、該ループ経路エッジキューが空になるまで繰り返す手段と、
を含み、
前記フィルタリング手段は、
前記新規追加分テスト経路集合から、ループ経路に前記印が付与されている対象異常系エッジのみを含むテスト経路を対象異常系テスト経路として抽出する手段を含む
請求項１記載の単独の異常系シナリオを任意回数実行するテスト項目生成装置。
【請求項３】
前記ループ経路複製手段は、
ユーザから指定された回数分だけ、前記異常系テスト経路中のループ箇所を複製する手段を含む
請求項１記載の単独の異常系シナリオを任意回数実行するテスト項目生成装置。
【請求項４】
ユーザとシステムの間のインタラクションの流れを示すユースケース記述に基づいたシナリオテスト用のテスト項目を抽出するテスト項目抽出方法であって、
設計モデル入力手段が、入力された設計モデルから、ユースケース記述を取得する設計モデル入力ステップと、
ループ無しテスト経路抽出手段が前記ユースケース記述からループ経路を含まない全てのテスト経路(以下、「ループ無し経路」と記す)を抽出し、テスト経路集合に加えるループ無しテスト経路抽出ステップと、
ループ有りテスト経路補完手段が、前記ユースケース記述からループ経路を含むテスト経路(以下「ループ有り経路」と記す)を抽出し、前記テスト経路集合の前記ループ無し経路と該ループ有り経路をつなぎ合わせた新たなテスト経路を生成し、新規追加分テスト経路集合に加えるループ有りテスト経路補完ステップと、
フィルタリング手段が、前記新規追加分テスト経路集合から、特定の異常系シナリオのみを含むテスト経路を対象異常系テスト経路として抽出し、異常系テスト経路集合に加えるフィルタリングステップと、
ループ経路複製手段が、前記異常系テスト経路集合の各異常系テスト経路中のループ箇所を複製して実行経路記憶手段に格納するループ経路複製ステップと、
を含む実行経路抽出過程と、
テスト項目生成手段が、前記実行経路記憶手段から前記テスト経路を読み出して、該テスト経路に対するテスト項目を生成するテスト項目生成過程と、
を行うことを特徴とする単独の異常系シナリオを任意回数実行するテスト項目生成方法。
【請求項５】
前記ループ有りテスト経路補完ステップにおいて、
前記ユースケース記述の矢印部分に相当するエッジのうち、前記ループ無し経路に存在しないエッジをループ経路エッジキューに加え、
前記ループ経路エッジキューの先頭のエッジＸを取り出して、該エッジＸを前記ループ無しテスト経路につなげて前記新たなテスト経路を生成し、ループ経路に印を付与する処理を、該ループ経路エッジキューが空になるまで繰り返し、
前記フィルタリングステップにおいて、
前記新規追加分テスト経路集合から、ループ経路に前記印が付与されている対象異常系エッジのみを含むテスト経路を対象異常系テスト経路として抽出する
請求項４記載の単独の異常系シナリオを任意回数実行するテスト項目生成方法。
【請求項６】
前記ループ経路複製ステップにおいて、
ユーザから指定された回数分だけ、前記異常系テスト経路中のループ箇所を複製する
請求項４記載の単独の異常系シナリオを任意回数実行するテスト項目生成方法。
【請求項７】
コンピュータを、
請求項１乃至３のいずれか１項に記載のテスト項目生成装置の各手段として機能させるためのテスト項目生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単独の異常系シナリオを任意回数実行するテスト項目生成装置及び方法及びプログラムに係り、特に、ユースケース記述に基づいて、特定の単独の異常系シナリオを任意の回数実行するテスト用にテスト項目を生成するための単独の異常系シナリオを任意回数実行するテスト項目生成装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
従来のユースケース記述に基づいてシナリオテスト用のテスト項目を抽出する方法として、UMLのアクティビティ図（ユースケース記述と同じフロー構造)を入力として、ループを0回、1回通るような経路の順列を生成する方法がある（例えば、非特許文献1参照）。
【０００３】
また、画面遷移図（ユースケース記述と同じフロー構造)の各エッジを少なくとも1回は必ず通るテスト経路(テスト項目)を抽出することが可能な技術がある（例えば、特許文献1参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平9−223040号公報
【非特許文献】
【０００５】
【非特許文献１】張暁晶、星野隆. "設計モデルを用いたテスト項目抽出とテストデータ生成手法", 電子情報通信学会技術研究報告. KBSE, 知能ソフトウェア工学, Technical report of IEICE. KBSE 109(41) pp. 37-42, 20090514.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１の技術は、特定の以上系シナリオを複数回（２回以上）実行するテスト経路を抽出することができない。
【０００７】
また、特許文献1の技術は、当該技術により抽出したテスト経路に、特定の異常系シナリオのみを実行するテスト経路が含まれている保証、特定の異常系シナリオのみを複数回実行するテストケースが含まれている保証のどちらもない。
【０００８】
このように、ユースケース記述に基づいたシナリオテスト用のテスト項目抽出において、通常のテストでは、ノード網羅、エッジ網羅などよく用いられる既存の網羅基準では、他の異常系のシナリオを実行してしまったり、特定の異常シナリオを１度しか実行しなかったり、等を検出できないという問題がある。
【０００９】
本発明は、上記の点に鑑みなされたもので、特定の異常系シナリオのみを複数回実行したときに起こるエラーを検出可能なシナリオテスト用のテスト項目を生成するための単独の異常系シナリオを任意回数実行するテスト項目生成装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題を解決するため、本発明（請求項１）は、ユーザとシステムの間のインタラクションの流れを示すユースケース記述に基づいて、シナリオテスト用のテスト項目を抽出する単独の異常系シナリオを任意回数実行するテスト項目生成装置であって、
入力された設計モデルから、ユースケース記述を取得する設計モデル入力手段と、
前記ユースケース記述からループ経路を含まない全てのテスト経路(以下、「ループ無し経路」と記す)を抽出し、テスト経路集合に加えるループ無しテスト経路抽出手段と、
前記ユースケース記述からループ経路を含むテスト経路(以下「ループ有り経路」と記す)を抽出し、前記テスト経路集合の前記ループ無し経路と該ループ有り経路をつなぎ合わせた新たなテスト経路を生成し、新規追加分テスト経路集合に加えるループ有りテスト経路補完手段と、
前記新規追加分テスト経路集合から、特定の異常系シナリオのみを含むテスト経路を対象異常系テスト経路として抽出し、異常系テスト経路集合に加えるフィルタリング手段と、
前記異常系テスト経路集合の各異常系テスト経路中のループ箇所を複製して実行経路記憶手段に格納するループ経路複製手段と、
を有する実行経路抽出手段と、
前記実行経路記憶手段から前記テスト経路を読み出して、該テスト経路に対するテスト項目を生成するテスト項目生成手段と、を有する。
【００１１】
また、本発明（請求項２）は、前記ループ有りテスト経路補完手段に、
前記ユースケース記述の矢印部分に相当するエッジのうち、前記ループ無し経路に存在しないエッジをループ経路エッジキューに加える手段と、
前記ループ経路エッジキューの先頭のエッジＸを取り出して、該エッジＸを前記ループ無しテスト経路につなげて前記新たなテスト経路を生成し、ループ経路に印を付与する処理を、該ループ経路エッジキューが空になるまで繰り返す手段と、
を含み、
前記フィルタリング手段に、
前記新規追加分テスト経路集合から、ループ経路に前記印が付与されている対象異常系エッジのみを含むテスト経路を対象異常系テスト経路として抽出する手段を含む。
【００１２】
また、本発明（請求項３）は、前記ループ経路複製手段に、
ユーザから指定された回数分だけ、前記異常系テスト経路中のループ箇所を複製する手段を含む。
【発明の効果】
【００１３】
本発明によれば、ユースケース記述からループ経路を含まない経路、ループ経路を抽出し、ループ経路を含まない経路にループ経路をつなぎ新たな経路を生成することにより、ユースケース記述中のループ経路ｎ種類(L1,L2,…,Ln)をそれぞれつなぐパターン、つながないパターンの組合せの個数分、新しいテスト経路を作成できる。つまり、ループを含まない経路１つに対し、２のｎ乗通りの新しいテスト経路を生成することができる。
【００１４】
また、フィルタリングを行うことにより、任意の異常系シナリオのみを含む経路を得ることができ、特定の異常系シナリオのみを複数回実行したときに起こるエラー（ある異常系シナリオを実行するときに使用する変数Ｘが不正な値になっている場合にシステムが想定と違う動作を起こすエラー）を検出可能なテスト経路を抽出することが可能となる。
【００１５】
さらに、ループ経路を含むテスト経路において、異常系シナリオを含むループ経路をユーザが指定した回数分だけ複製してテスト経路へ挿入することにより、特定の異常系シナリオのみを複数回実行したときにこるエラーを検出可能なテスト経路を抽出することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施の形態におけるシナリオテストのテスト項目生成装置の構成図である。
【図２】本発明の一実施の形態における実行経路抽出部の構成図である。
【図３】本発明の一実施の形態における概要動作のフローチャートである。
【図４】本発明の一実施の形態におけるステップ１３０の詳細フローチャートである。
【図５】本発明の一実施の形態における入力（ユースケース記述）のデータ構造の例である。
【図６】本発明の一実施の形態におけるユースケース記述のイメージである。
【図７】本発明の一実施の形態におけるステップ２３０の詳細フローチャートである。
【図８】本発明の一実施の形態におけるステップ３２０の詳細フローチャートである。
【図９】本発明の一実施の形態におけるステップ４４０の詳細フローチャートである。
【図１０】本発明の一実施の形態におけるステップ３３０の詳細フローチャートである。
【図１１】本発明の一実施の形態におけるステップ６６０の詳細フローチャートである。
【図１２】本発明の一実施の形態における出力(テスト経路)のデータ構造の例である。
【図１３】本発明の一実施の形態におけるステップ３４０の詳細フローチャートである。
【図１４】本発明の一実施の形態におけるステップ３５０の詳細フローチャートである。
【図１５】本発明の一実施の形態におけるユースケース記述から異常経路を抽出する例である。
【図１６】本発明の一実施の形態におけるループ有りテスト経路を補完する例である。
【発明を実施するための形態】
【００１７】
以下図面と共に、本発明の実施の形態を説明する。
【００１８】
まず、最初に本明細書中で使用する用語について説明する。
【００１９】
・シナリオテスト：要求定義に基づき、ユーザが行う業務を想定してシナリオを作成して、システムが想定シナリオ通りに振舞うかを確認するテスト。
【００２０】
・テスト項目：シナリオテストにおけるテスト項目は、テストシナリオと確認観点を含む。「テストシナリオ」は、画面と操作で構成されたシーケンスであり、「確認観点」は画面遷移の正しさ、画面表示内容の正しさ、データベース破壊の有無、等がある。
【００２１】
・画面遷移図：設計ドキュメントの一種である。特定の機能内における各画面間の遷移を示す。
【００２２】
・ユースケース記述：設計ドキュメントの一種である。要求を明確化するための記法でもある。ユーザとシステム間のインタラクションの流れを示す。流れは、「基本フロー」に沿って進むが、「代替フロー」、「例外フロー」に分岐することもある。
【００２３】
・正常系シナリオ：ユースケース記述における基本フローを指す。1つ以上のエッジから構成される。
【００２４】
・異常系シナリオ：ユースケース記述における代替フロー、例外フローの総称であり、1つ以上のエッジから構成され、正常系シナリオから分岐して正常系シナリオに戻る。
【００２５】
・特定の異常系シナリオのみを複数回実行したときに起こるエラー：ある異常系シナリオを実行するときに使用する変数Ｘが不正な値になっている場合にシステムが想定と違う動作を起こすエラーがある。変数Ｘの値を改変する他の異常系シナリオを一緒に実行すると、変数Ｘが不正な値とはならず、エラーを検出できない可能性があるため、他の異常系シナリオを実行しないようにする必要がある。
【００２６】
例１）異常系シナリオ「買い物の途中でキャンセル」では、買物カゴ変数を参照するが、買物カゴ変数が正しく初期化されておらず、NULL参照エラーでプログラムが停止する場合。但し、買物カゴ変数の正しい初期かを行う別の異常系シナリオがあった場合、そこを実行しないようにする必要がある。
【００２７】
例２）異常系シナリオ「ログイン失敗」でエラーログを留め、ログイン失敗を何度も繰り返すとエラーログを記録できる限界値を超えてプログラムが停止する場合。但し、エラーログを全て削除する別の異常系シナリオがあった場合、そこを実行しないようにする必要がある。
【００２８】
・ループ経路：1つ以上のエッジから構成される。以下の2つの場合がある。
【００２９】
１）2つ以上のエッジE0, E1,…,En
（ただし、E0≠Ei（i=1,…,n）で構成され、Enの次のエッジのいずれかにE0が含まれる部分経路；
２）1つのエッジE0から構成され、E0の次のエッジにE0が含まれる部分経路；
・エッジ：ユースケース記述の矢印部分。両側（始点と終点)にノードが接続されている（但し、開始エッジのみ、始点にノードが接続されていない）。
【００３０】
・ノード：ユースケース記述内の節部分。エッジ（始点との接続)群を保持している。
【００３１】
・開始エッジ：ユースケース記述に１つ存在し、経路の開始を表すエッジ。
【００３２】
・終了エッジ：ユースケース記述に1つ以上存在し、経路の終了を表すエッジ。
【００３３】
・エッジ用スタック：ユースケース記述内で辿ったエッジを順番通りに保存するためのスタック。
【００３４】
・次展開エッジ群：次に辿るエッジ（自ノードと始点で接続しているエッジ）の候補群。
【００３５】
・次展開エッジ群用スタック：これまで辿った経路中で、まだ辿っていない次展開エッジ群を保存しておくスタックである。
【００３６】
・前エッジ群：自ノードと終点で接続しているエッジ群。
【００３７】
・現在次展開エッジ群：次展開エッジ群用スタックの最上位のもの。
【００３８】
・現在ループ経路：これまでの経路（エッジ用スタックに積まれているエッジ）において、スタック最上位のエッジから最上位に最も近い現在エッジまでの経路である。
【００３９】
・ループ出現回数：ループが経路中に何回出現したかの回数。
【００４０】
図１は、本発明の一実施の形態におけるテスト項目生成装置の構成を示す。
【００４１】
同図に示すテスト項目生成装置は、設計情報読込部１、設計モデル分析部２、実行経路抽出部３、時刻経路記憶部５、テスト項目生成部６から構成され、ユーザ端末２０に接続されている。
【００４２】
設計情報読込部１は、ユーザ端末２０から入力された設計モデル(XMＩファイル)を読み込み設計モデル分析部２に渡す。
【００４３】
設計モデル分析部２は、入力された設計モデルからユースケース記述（UML Activity）画面遷移図を抽出し設計モデル(XML形式)を生成し、実行経路抽出部３に渡す。
【００４４】
実行経路抽出部３は、図２に示すように、設計モデル入力部３１、ループ無し経路抽出部３２、ループ有りテスト経路補完部３３、フィルタリング部３４、ループ経路複製部３５、から構成される。設計モデル入力部３１からユースケース記述が入力されると、ループ無し経路抽出部３２において、ユースケース記述からループ経路を含まない全テスト経路を抽出し、ループ有りテスト経路補完部３３においてループ経路をつなぎ、フィルタリング部３４において任意の異常系シナリオのみを含むテスト経路を抽出し、ループ経路複製部３５において異常系シナリオを含むループ経路をユーザが指定した回数分だけ複製して実行経路記憶部５に格納する。
【００４５】
実行経路記憶部５は、実行経路抽出部３で抽出されたテスト経路を格納する。
【００４６】
テスト項目生成部６は、実行経路記憶部５からテスト経路を読み出してテスト項目表を生成してユーザ端末２０に出力する。
【００４７】
図３は、本発明の一実施の形態における概要動作のフローチャートである。
【００４８】
ステップ１１０）  設計情報読込部１は、ユーザ端末２０から設計ドキュメント群を読み込む。
【００４９】
ステップ１２０）  設計モデル分析部２は、読み込んだ設計ドキュメント群から設計モデル(XML形式)を生成する。ここで、設計モデル(XML形式)を生成する手法として、「XStream http://xstream.codehaus.org/tutorial.html」を用いるものとする。生成された設計モデルを実行経路抽出部３に出力する。
【００５０】
ステップ１３０）  実行経路抽出部３は、設計モデルからループ無しテスト経路、ループ経路を抽出し、異常系シナリオ（代替フロー・例外フロー)を含むループ経路を指定された数分複製してテスト経路（テスト項目）を抽出し、実行経路記憶部５に格納する。詳細な処理については図４で詳述する。
【００５１】
ステップ１４０）  テスト項目生成部６は、実行経路記憶部５からテスト経路を読み込んで、テスト項目表を生成してユーザ端末２０に出力する。
【００５２】
次に、上記の実行経路抽出部３におけるステップ１３０の処理について詳述する。
【００５３】
図４は、本発明の一実施の形態におけるステップ１３０の詳細フローチャートである。
【００５４】
ステップ２１０）  実行経路抽出部３の設計モデル入力部３１は、設計モデル分析部２で生成された設計モデル(XMLファイル)を読み込み、当該設計モデル内のユースケース記述を抽出し、ユースケース記述リストを生成し、メモリ（図示せず）に格納する。図５に示すように、ユースケース記述には、ノードＩＤ，ノード内テキスト、前エッジ群、次展開エッジ群、エッジＩＤ、始点接続ノードＩＤ、終点接続ノードＩＤ、遷移条件、種類が含まれている。図５のユースケース記述の構造イメージを図６に示す。
【００５５】
ステップ２２０）  実行経路抽出部３のループ無し経路抽出部３２は、ユースケース記述リスト読み込む。
【００５６】
ステップ２３０）  実行経路抽出部３のループ無し経路抽出部３２、ループ有りテスト経路補完部３３は、ユースケース記述リストから異常系テスト経路を抽出する。詳細な処理については図７で詳述する。
【００５７】
ステップ２４０）  実行経路抽出部3のフィルタリング部３４は、フィルタリングを行い、フィルタリング後のテスト項目の異常系経路をテスト項目としてまとめる処理を全異常系テスト経路に対して行う。
【００５８】
ステップ２５０）  フィルタリング部３４は、テスト項目群を要素としてもつテスト項目表を作成して実行経路記憶部５に格納する。
【００５９】
次に、上記のステップ２３０のユースケース記述リストから異常系テスト経路を抽出する処理について説明する。
【００６０】
図７は、本発明の一実施の形態におけるステップ２３０の詳細フローチャートである。
【００６１】
ステップ３１０）  実行経路抽出部３のループ無し経路抽出部３２は、ユースケース記述を読み込む。
【００６２】
ステップ３２０）  ループ無し経路抽出部３２は、ユースケース記述からループ無し経路を抽出し、メモリ（図示せず)上のテスト経路集合に加える。詳細な処理は図８で詳述する。
【００６３】
ステップ３３０）  ループ有りテスト経路補完部３３は、ユースケース記述からループ有りテスト経路を抽出し、メモリ（図示せず)上のテスト経路集合に加える。詳細な処理は図１０で詳述する。
【００６４】
ステップ３４０）  フィルタリング部３４は、メモリ（図示せず）からテスト経路集合を読み出し、その中から特定の異常系のシナリオのみを含むテスト経路を抽出する。詳細については図１３で詳述する。
【００６５】
ステップ３５０）  ループ経路複製部３５は、ステップ３４０で抽出された異常系テスト経路集合と、ユーザ端末２０から外部パラメータとしてループ回数を取得して、異常系テスト経路集合の各異常系テスト経路中のループ箇所をユーザ指定回数分だけ複製し、これを異常系テスト経路集合として実行経路記憶部５に格納する。詳細な処理は図１４で詳述する。
【００６６】
上記のステップ３２０における、ループ無し経路抽出部３２によるループ無し経路抽出処理について説明する。
【００６７】
図８は、本発明の一実施の形態におけるステップ３２０の詳細フローチャートである。
【００６８】
ステップ４１０）  ループ無し経路抽出部３２は、ユースケース記述から初期次展開エッジ群(初期エッジのみ追加したもの)をメモリ（図示せず）の次展開エッジ群スタックに積む。
【００６９】
ステップ４１５）  次展開エッジ群スタックが空である場合は、処理を終了し、空でない場合は、ステップ４１６に移行する。
【００７０】
ステップ４１６）  次展開エッジ群用スタックの最上位にある次展開エッジ群に要素がある場合はステップ４２０に移行し、ない場合はステップ４８０に移行する。
【００７１】
ステップ４２０）  メモリ(図示せず)の次展開エッジ群スタックの最上位にある要素（現在（次展開エッジ群）から１つエッジを得て現在エッジとする。
【００７２】
ステップ４３０）  現在エッジ群から現在エッジ群を取り除く。
【００７３】
ステップ４４０）  経路(エッジ用スタックに積まれているエッジの列)内のループ出現回数を計算する。詳細については図９で詳述する。
【００７４】
ステップ４４５）  ステップ４４０で求められたループ出現回数が０より大きい場合はステップ４１５に戻り、０以下の場合はステップ４５０に移行する。
【００７５】
ステップ４５０）  現在エッジをエッジ用スタックに積む。
【００７６】
ステップ４６０）  現在のエッジの持つ終点接続ノードＩＤに基づいて、ユースケース記述からノードを取得し、そのノードのエッジ（始点との接続）群を取得し、その取得したエッジ（始点との接続)群を、次展開エッジとして、次展開エッジ群スタックに積む。
【００７７】
ステップ４７０）  経路（エッジ用スタックに積まれているエッジの列）をテスト経路としてテスト経路集合に加え、ステップ４１５に戻る。
【００７８】
ステップ４８０）  ステップ４１６で次展開エッジ群用スタックの最上位にある次展開エッジ群に要素がない場合は、次展開エッジ群用スタックをホップする。
【００７９】
ステップ４９０）  エッジ用スタックが空でなければエッジ用スタックをホップし、処理を終了する。
【００８０】
次に、ループ無し経路抽出部３２における、上記のステップ４４０の経路(エッジ用スタックに積まれているエッジの列)内の現在ループ経路の出現回数を計算する処理について説明する。
【００８１】
図９は、本発明の一実施の形態におけるステップ４４０の詳細フローチャートである。
【００８２】
ステップ５１０）  ループ無し経路抽出部３２は、ステップ４２０で選択された現在エッジを読み込む。
【００８３】
ステップ５２０）  経路（エッジ用スタックに積まれているエッジの列）を読み込む。
【００８４】
ステップ５３０）  経路を複製し、複製した経路を探索途中経路とする。
【００８５】
ステップ５４０）  探索途中経路の先頭から一番近い現在エッジまでを現在ループ経路をとして抽出する。
【００８６】
ステップ５５０）  探索途中経路内で現在ループ経路が何回出現するか（ループ出現回数)を、文献１「R. S. Boyer; J. S. Moore (1977)."A fast string searching algorithm". Comm. ACM 20: 762-772」等の手法を用いて計算する。
【００８７】
図７のステップ３３０のループ有りテスト経路補完部３３の処理について説明する。
【００８８】
図１０は、本発明の一実施の形態におけるステップ３３０の詳細フローチャートである。
【００８９】
ステップ６１０）  ループ有りテスト経路補完部３３は、ユースケース記述を読み込む。
【００９０】
ステップ６２０）  メモリ（図示せず）からステップ３２０で生成されたテスト経路集合を読み込む。
【００９１】
ステップ６３０）  エッジを格納するループ経路エッジキューをメモリ（図示せず）上に用意する。
【００９２】
ステップ６４０）  ユースケース記述を構成するエッジのうち、テスト経路集合の中のテスト経路に存在しないエッジ、言い換えると、ループ経路中に存在するエッジを全てループ経路エッジキューに追加する。
【００９３】
ステップ６５０）  ループ経路エッジキューから１つエッジ（ループ経路エッジ)を取り出す。
【００９４】
ステップ６６０）  ループ経路エッジキューにループ経路エッジが含まれる場合は、ループ経路エッジを含むループ経路をテスト経路集合に含まれるテスト経路につなぎ、新しいテスト経路を複数作成し、これを新規追加分テスト経路集合とする。詳細な処理は図１１で詳述する。
【００９５】
ステップ６７０）  ループ経路エッジキューから、新規追加分テスト経路集合のテスト経路に含まれるエッジを全て除く。
【００９６】
ステップ６８０）  新規追加分テスト経路集合をテスト経路集合に加える。
【００９７】
ステップ６９０）  ステップ６５０において、ループ経路エッジキューにループ経路エッジが含まれていない場合は、ループ経路エッジをループ経路エッジキューに入れなおす。
【００９８】
次に、ループ有りテスト経路補完部３３における、上記のステップ６６０のループ経路エッジを含むループ経路をテスト経路につなぎ、新しいテスト経路を作成する処理について説明する。
【００９９】
図１１は、本発明の一実施の形態におけるステップ６６０の詳細フローチャートである。
【０１００】
ステップ７１０）  ループ有りテスト経路補完部３３は、ユースケース記述を読み込む。
【０１０１】
ステップ７２０）  テスト経路集合を読み込む。
【０１０２】
ステップ７３０）  ループ経路エッジキューからループ経路エッジを読み込む。
【０１０３】
ステップ７４０）  テスト経路集合から、テスト経路（あるエッジＥが経路中に存在し、エッジＥの終点接続ノードＩＤに対応するノードの次展開エッジ群にループ経路エッジが含まれる）を、前半経路用テスト経路集合として全て選び出す。
【０１０４】
ステップ７５０）  テスト経路集合からループ経路エッジに関する後半経路集合を抽出する。後半経路集合とは、ユースケース記述からループ経路エッジを始点としたテスト経路（後半経路)の集合である。
【０１０５】
ステップ７６０）  メモリ上に新規追加分テスト経路集合（最初は空）を用意する。
【０１０６】
ステップ７７０）  終了エッジに最も近いループ経路エッジから終了エッジまでの部分経路を前半経路として取り出す。
【０１０７】
ステップ７８０）  前半経路と後半経路をループ経路エッジXで接続して新しい経路（新規追加分テスト経路)を作成する。
【０１０８】
ステップ７８５）  上記で作成された新規追加分テスト経路に印を付ける。具体的には、新規追加分テスト経路とループ経路エッジを取得し、新規追加分テスト経路のループ経路エッジから、ループ経路エッジを次展開エッジ群にもつエッジまでの部分経路を構成するエッジすべてにループ経路であることの印を付ける。
【０１０９】
ステップ７９０）  新追加分テスト経路を新規追加分テスト経路集合へ加える。その結果の例を図１２に示す。
【０１１０】
上記のようにループ有りテスト経路補完部３３は、抽出したループ経路を含まないテスト経路に対し、ループ経路をつないでいくことにより新しいテスト経路（新規追加分テスト経路)を生成する。
【０１１１】
次に、フィルタリング部３４の図７のステップ３４０におけるフィルタリング処理について説明する。
【０１１２】
図１３は、本発明の一実施の形態におけるステップ３４０の詳細フローチャートである。
【０１１３】
ステップ８１０）  フィルタリング部３４は、メモリ（図示せず）からユースケース記述を読み込む。
【０１１４】
ステップ８２０）  メモリ（図示せず）からステップ３３０で出力された新規追加分テスト経路集合を読み出す。
【０１１５】
ステップ８３０）  メモリ（図示せず)上に異常系テスト経路集合を用意する。なお、初回は空集合とする。
【０１１６】
ステップ８４０）  ユースケース記述から全異常系エッジの集合(以下「異常系エッジ集合」と記す)を取得する。取得できない場合はステップ３５０に移行する。
【０１１７】
ステップ８５０）  異常系エッジ集合が空でない場合は、異常系エッジ集合から異常系エッジを対象異常系エッジとして１つ取り出す。
【０１１８】
ステップ８６０）  ステップ８２０で読み出した新規追加分テスト経路集合から対象異常系エッジのみを含むテスト経路を、対象異常系テスト経路として１つ選ぶ。ここで、条件（対象異常系エッジのみを含むテスト経路）を満たすテスト経路がない場合は、対象異常系エッジを含み、かつ、含まれる異常系エッジの数が最小であるテスト経路を選ぶ。
【０１１９】
ステップ８７０）  対象異常系テスト経路に含まれる異常系エッジを異常系エッジ集合から除く。
【０１２０】
ステップ８８０）  対象異常系テスト経路を異常系テスト経路集合に加える。但し、対象異常系エッジにループ経路の印が付いていない場合は加えない。
【０１２１】
次に、ステップ３５０のループ経路複製部３５によるループ経路を複製する処理について説明する。
【０１２２】
図１４は、本発明の一実施の形態におけるステップ３５０の詳細フローチャートである。
【０１２３】
ステップ９１０）  ループ経路複製部３５は、ステップ３４０（ステップ８８０）で生成された異常系テスト経路集合をメモリ(図示せず)から読み込む。
【０１２４】
ステップ９２０）  ユーザ指定のループ回数をユーザ端末２０から取得する。
【０１２５】
ステップ９３０）  異常系テスト経路のループ経路の印の追加箇所をユーザ指定ループ回数分複製し、実行経路記憶部５に格納する。
【０１２６】
上記のステップ２３０の異常系テスト経路の抽出処理について具体的に説明する。
【０１２７】
図１５は、本発明の一実施の形態におけるユースケース記述から異常系テスト経路を抽出する例を示す。同図において、太線の矢印は正常系エッジを示し、破線の矢印は異常系エッジを示す。
【０１２８】
ユースケース記述から、正常系シナリオ
ＡＢＣＤ
があり、異常系シナリオとして、
（１）Ｘ
（２）ＹＺ
（３）Ｗ
がある。ループ無し経路抽出部３２において、ループ無し経路として、
・ＡＢＣＤ
・ＡＢＣＷ
をテスト経路集合として抽出する(ステップ３２０)。
【０１２９】
これにより、ループ経路を含まない全テスト経路は「ループ経路に含まれない異常系シナリオ」の全ての組合せを網羅するテスト経路の最小セットになっており、複数種類の異常系シナリオの全ての組合せを網羅するテスト経路の最小セットを抽出できる。
【０１３０】
次に、ループ有りテスト経路補完部３３において、以下のループ有り経路を補完する（ステップ３３０）。
【０１３１】
・ＡＢＣＤ（ループ無し）
・ＡＢＣＷ（ループ無し）
・ＡＢＡＸＢＣＤ（ループあり）
・ＡＢＹＺＢＣＤ（ループあり）
・ＡＢＸＢＹＺＢＣＤ（ループあり）
・ＡＢＸＢＣＷ（ループあり）
・ＡＢＡＹＺＢＣＷ（ループあり）
・ＡＢＸＢＹＺＢＣＷ（ループあり）
上記の経路のうち、ＡＢＣＤは正常系シナリオであるので、フィルタリング３４により、取り除かれる(ステップ３４０)。その結果、異常系テスト経路集合として、
・Ａ⇒Ｂ⇒Ｃ⇒Ｗ（ループ無し）
・Ａ⇒Ｂ⇒Ａ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｄ（ループあり）
・Ａ⇒Ｂ⇒Ｙ⇒Ｚ⇒Ｂ⇒Ｃ⇒Ｄ（ループあり）
・Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｙ⇒Ｚ⇒Ｂ⇒Ｃ⇒Ｄ（ループあり）
・Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｗ（ループあり）
・Ａ⇒Ｂ⇒Ａ⇒Ｙ⇒Ｚ⇒Ｂ⇒Ｃ⇒Ｗ（ループあり）
・Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｙ⇒Ｚ⇒Ｂ⇒Ｃ⇒Ｗ（ループあり）
が残る。これらは、上記の（１）〜（３）の異常系シナリオ３つの全組合せであるので、以下の７パターンとなる。
【０１３２】
・（１）
・（２）
・（３）
・（１）（２）
・（２）（３）
・（１）（３）
・（１）（２）（３）
上記の７つのパターンが異常系テスト集合となり、実行経路記憶部５に格納される。
【０１３３】
次に、ループ有りテスト経路補完部３３における図８のステップ３３０のループ有りテスト経路を補完する例を示す。
【０１３４】
図１６は、本発明の一実施の形態におけるループ有りテスト経路を補完する例を示す。
【０１３５】
ユースケース記述では、以下の２つの経路がループ無しテスト経路として抽出されているものとする。
【０１３６】
・Ａ⇒Ｂ⇒Ｃ⇒Ｄ
・Ａ⇒Ｂ⇒Ｃ⇒Ｗ
ループ有りテスト経路補完部３３は、メモリ上にループ経路エッジキューを用意し、ループ無しテスト経路に存在しないエッジを全て加える。図１６の例では、ループ経路エッジキューには、
［Ｘ，Ｙ，Ｚ，Ｗ］
が追加される（ステップ６３０，６４０）。
【０１３７】
次に、ループ絵経路エッジキューの先頭のＸを取り出す(ステップ６５０)。ループ経路エッジＸを経路ＡＢＣＤ，ＡＢＣＷにつなげ、新しい経路を生成する(ステップ６６０)。図１４の例において、前半経路Ａ⇒Ｂ、後半経路Ｂ⇒Ｃ⇒Ｄ、後半経路Ｂ⇒Ｃ⇒Ｗの間にループ経路エッジＸをつなげることにより、新規追加分テスト経路
Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｄ
Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｗ
の２つが生成され、これらをテスト経路集合に加えると、
・Ａ⇒Ｂ⇒Ｃ⇒Ｄ
・Ａ⇒Ｂ⇒Ｃ⇒Ｗ
・Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｄ
・Ａ⇒Ｂ⇒Ｘ⇒Ｂ⇒Ｃ⇒Ｗ
となる。上記の処理をループ経路エッジキュー［Ｙ，Ｚ，Ｗ］のそれぞれに対して行う(ステップ６８０)。
【０１３８】
上記のループ無しテスト経路抽出部３２で抽出した各テスト経路は「ループ経路に含まれない異常系シナリオ」の組合せを網羅するテスト経路の最小セットであり、それに対して、ループ有りテスト経路補完部３３において、ループ経路に含まれる異常系シナリオを全組合せ分つなぐため、結果としてできるテスト経路は「全ての異常系シナリオ」の組合せを網羅するテスト経路の最小セットとなっている。つまり、ループ無しテスト経路抽出部３２により得られた組合せ数Ａとループ有りテスト経路補完部３３により得られた組合せ数Ｂにより、
Ａ×Ｂ＝全組合せ数
となる。これは、異常系シナリオの全組合せのテスト経路のみを抽出しているため、全順列で抽出する従来技術より、圧倒的に少ないメモリ使用量でテスト項目を得ることが可能となる。
【０１３９】
なお、図１に示すテスト項目生成装置１０の各構成要素の動作をプログラムとして構築し、テスト項目生成装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１４０】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【０１４１】
１  設計情報読込部
２  設計モデル分析部
３  実行経路抽出部
５  実行経路記憶部
６  テスト項目生成部
１０  テスト項目生成装置
２０  ユーザ端末
３１  設計モデル入力部
３２  ループ無し経路抽出部
３３  ループ有りテスト経路補完部
３４  フィルタリング部
３５  ループ経路複製部
【図１】
0005404720.tif 000002
【図２】
0005404720.tif 000003
【図３】
0005404720.tif 000004
【図４】
0005404720.tif 000005
【図５】
0005404720.tif 000006
【図６】
0005404720.tif 000007
【図７】
0005404720.tif 000008
【図８】
0005404720.tif 000009
【図９】
0005404720.tif 000010
【図１０】
0005404720.tif 000011
【図１１】
0005404720.tif 000012
【図１２】
0005404720.tif 000013
【図１３】
0005404720.tif 000014
【図１４】
0005404720.tif 000015
【図１５】
0005404720.tif 000016
【図１６】
0005404720.tif 000017