(57)【要約】      （修正有）【課題】テストパターンを網羅したブラックボックステストを実現する状態遷移テスト実行プログラムを提供する。【解決手段】状態遷移テスト実行プログラムは、検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、変数の複数の状態の状態名とを少なくとも記憶した状態定義ＤＢを作成し、特定される変数の複数の状態において、プログラムに対するランダムテストによって変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、変化後の事後状態を識別する第２の状態名と、プログラムへ入力したテストデータのうち事前状態から事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、状態遷移データベースに記憶されたテストデータを用いて、変数の状態を初期状態から事後状態まで遷移させ、遷移させた事後状態においてランダムテストを行うことを繰り返す処理をコンピュータに行わせる。【選択図】図１１
2022001982.tif 000002
【特許請求の範囲】
【請求項１】
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す
処理をコンピュータに行わせる状態遷移テスト実行プログラム。
【請求項２】
前記コンピュータは、
前記状態遷移データベースに記憶された前記第１の状態名と前記第２の状態名の対応付けに基づいて、テスト対象の事後状態から前記初期状態まで遡り、遡るごとに新たな事後状態を識別する第２の状態名に対応付けられた前記テストデータを取得してスタックに保持し、
前記初期状態まで遡ったときに、前記スタックから直前に格納した前記テストデータから順に前記プログラムに該テストデータを入力することで、前記変数の状態を前記特定の事後状態へと遷移させる請求項１記載の状態遷移テスト実行プログラム。
【請求項３】
前記コンピュータは、
前記変数の状態を変化させた前記テストデータを、前記状態遷移データベースにおける事前状態から事後状態へと遷移する遷移条件として前記状態遷移データベースに記憶し、
前記状態遷移データベースの前記遷移条件に対する変更に応じて、前記変数の状態を前記初期状態から変更された該遷移条件に対応付けられる事後状態まで遷移させ、遷移させた該事後状態において前記ランダムテストを行うことで、前記状態遷移データベースを更新する請求項２記載の状態遷移テスト実行プログラム。
【請求項４】
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す
処理をコンピュータが行う状態遷移テスト実行方法。
【請求項５】
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ遷移制御部を有し、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、状態遷移テスト実行プログラム、状態遷移テスト実行方法、及び情報処理装置に関する。
【背景技術】
【０００２】
開発したプログラムについてランダムなテストパターンを用いて状態遷移をテストする、ブラックボックステストによる検証方法が存在する。一方、近年、ソフトウェア開発の規模が拡大し、状態遷移が複雑化しているため、テストパターンを用いたブラックボックステストでは網羅的にテストパターンを生成できない。
【０００３】
入力データと出力データとの間の相関値の時系列における変化を検出することで、ブラックボックスシステムの状態遷移を推定する技術が知られている。また、メソッドの実行がメソッドの呼び出し順等の規則情報に違反することを検出した場合に、当該規則情報と検出結果との組み合せに対応するテストコードを実行することで、ブラックボックステストに関する作業効率を向上させる技術等が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第６４９４８８７号公報
【特許文献２】特開２０１３−３００１７号公報
【特許文献３】特開２０１１−７６４９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した技術では、相関値の算出方法が特定できない、時系列において相関値が変化しない等の場合には、注目する状態遷移を検知できない可能性がある。また、メソッドの呼び出し順等の規則情報を予め用意するためには、リバースエンジニアリングを行う必要がある。リバースエンジニアリングにおいて、規則の総数、規則に含まれるであろう条件の詳細度等について、規則情報をどの程度まで定めるかは、専門的な知識を持った技術者の経験及び知識に依存し、作業量も膨大である。
【０００６】
したがって、１つの側面では、テストパターンを網羅したブラックボックステストを実現することを目的とする。
【課題を解決するための手段】
【０００７】
一態様によれば、検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ、遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す処理をコンピュータに行わせる状態遷移テスト実行プログラムが提供される。
【発明の効果】
【０００８】
テストパターンを網羅したブラックボックステストを実現することができる。
【図面の簡単な説明】
【０００９】
【図１】事前状態と事後状態の対応表の例を示す図である。
【図２】情報処理装置のハードウェア構成例を示す図である。
【図３】本実施例における機能構成例を示す図である。
【図４】状態定義ＤＢの作成例を説明するための図である。
【図５】生成処理の概要を説明するための図である。
【図６】生成処理の過程を説明するための図（その１）である。
【図７】生成処理の過程を説明するための図（その２）である。
【図８】本実施例における生成処理により得られた変数「state」の状態遷移の流れを説明するための図である。
【図９】状態遷移ＤＢのデータ例を示す図である。
【図１０】遷移制御の概要を説明するための図である。
【図１１】本実施例におけるテスト実行処理の概要を説明するための図である。
【図１２】状態定義作成画面の例を示す図である。
【図１３】本実施例により得られたテスト結果を用いたリバースエンジニアリングの方法例を説明するためのフローチャート図である。
【図１４】図１３のステップＳ３１０で表示されるテスト結果画面の例を示す図である。
【図１５】条件追加画面の例を示す図である。
【図１６】再実行後に表示されるテスト結果画面の例を示す図である。
【図１７】状態遷移ＤＢの生成処理を説明するためのフローチャート図である。
【図１８】変数の遷移制御を説明するためのフローチャート図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を図面に基づいて説明する。先ず、ブラックボックステストでは、所望の変数に対して、ランダムにデータを与え、変数の変化による状態遷移を試行するランダムテストが行われる。
【００１１】
図１は、事前状態と事後状態の対応表の例を示す図である。通常、ランダムテストでは、初期状態からランダムにパターンを検証対象のプログラムに入力し、事前状態から遷移した事後状態を特定する。この既存のランダムテストでは、ある状態に対して、データの入力とプログラムの実行とを繰り返し、遷移する全ての状態を探す処理が行われる。処理を収束させる方法として、繰り返し回数、又は繰り返し処理時間等の上限が設定されている。上限に達すると（以下、「タイムアウト」という）、それまでに検出できた事後状態を事前状態として、初期状態のときと同様に、テストパターンをプログラムに入力し次に遷移する状態を特定することを繰り返す。
【００１２】
図１の例では、初期状態において特定した事後状態はＳＴ１のみであり、それ以外では、事後状態を特定することなくタイムアウトになったことを示している。また、初期状態では、あるテストパターンＴＰで事後状態ＳＴ１を検出したことを示している。
【００１３】
このように事前状態から事後状態へと変化させたテストパターンＴＰを、「遷移条件」という。遷移条件は、１又は複数のデータを指定する。データは、１つの値又は複数の値の組み合せ、クリック動作、タイマー起動又は終了、データ送受信等を疑似的に通知するイベントのコード等であってもよい。
【００１４】
そして、タイムアウト後は、プログラム又は変数を初期状態に戻し、状態が変化したときのテストパターンＴＰをプログラムに入力することで事後状態ＳＴ１に遷移させ、上述したようにランダムにテストパターンをプログラムに入力し、次の事後状態を検出する処理を繰り返す。
【００１５】
このようなランダムテストを用いたブラックボックステストでは、状態遷移を監視することにより、１つの事前状態に対して１又は複数の事後状態を検出する。そして、いずれの事後状態も検出されずにタイムアウトしたときに、ブラックボックステストは終了する。
【００１６】
ブラックボックステストでは、より多くの状態を網羅するランダムテストであることが好ましい。より好ましいランダムテストの生成には、技術者によるランダムテストの検証が行われる。
【００１７】
また、ブラックボックステストはタイムアウトにより終了することから、全ての状態を特定したか否かは確定的ではない。そのため、技術者は、リバースエンジニアリングを行い未特定の状態の有無を判定することになる。リバースエンジニアリングにより発見された状態遷移は、技術者により、図１に示すような対応表に手作業で記録される。このように、ブラックボックステスト及びリバースエンジニアリングにより得られた状態遷移の対応表は、確実性に欠けたものとなる。
【００１８】
そこで、発明者は、ソフトウェア開発規模の大きなプログラムに対し、状態遷移を網羅したテストの効率化を実現するテスト実行手法を見出した。後述される実施例におけるテスト実行手法では、更に、ＯＳＳ（Open Source Software）、開発当初の資料はもはや存在しない過去資産など、内部の動作を表す仕様書の無いプログラムであっても、簡易なリバースエンジニアリングで網羅的にテストを実施可能とする。
【００１９】
発明者により見出されたテスト実行手法は、図２に示すような情報処理装置１００により実現することができる。図２は、情報処理装置のハードウェア構成例を示す図である。図２において、情報処理装置１００は、ＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ１７と、ドライブ装置１８とを有し、バスＢに接続される。主記憶装置１２と、補助記憶装置１３と、情報処理装置１００がアクセス可能な外部記憶装置とを含めて、後述する機能ブロック図（図４）における記憶部１３０に相当する。
【００２０】
ＣＰＵ１１は、情報処理装置１００を制御するプロセッサに相当し、記憶部１３０に格納されたプログラムを実行することで、以下に説明する本実施例に係る様々な処理を実現する。入力装置１４は、ユーザによって操作され、操作に応じてデータを入力し、表示装置１５は、ユーザーインタフェースとして様々な画面を表示する。通信Ｉ／Ｆ１７は、外部装置との通信を制御する。
【００２１】
記憶媒体１９（例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等）に記憶された本実施例に係るテスト実行プログラムは、ドライブ装置１８を介して記憶部１３０にインストールされ、ＣＰＵ１１によって実行可能となる。テスト実行プログラムにより、情報処理装置１００は、「テスト実行装置」として動作する。
【００２２】
尚、本実施例に係るテスト実行プログラムを格納する記憶媒体１９はＣＤ−ＲＯＭに限定されず、コンピュータが読み取り可能な、構造（structure）を有する１つ以上の非一時的（non-transitory）な、有形（tangible）な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤ（Digital Versatile Disk）ディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００２３】
本実施例における情報処理装置１００は、テスト実行プログラムにより、図３に示すような、テスト実行装置として動作するための機能を構成する。図３は、本実施例における機能構成例を示す図である。
【００２４】
図３において、情報処理装置１００は、テスト処理部１４０と、テスト対象９とを有する。テスト処理部１４０は、情報処理装置１００にインストールされたプログラムが、情報処理装置１００のＣＰＵ１１に実行させる処理により実現される。また、記憶部１３０には、ランダムテストパターンＤＢ１３１、状態定義ＤＢ１３２、テスト対象状態ＤＢ１３３、状態遷移ＤＢ１３４、状態遷移情報７ａ、状態遷移情報７ｂ、判定結果７ｃ、遷移後状態名６ｂ等が記憶される。
【００２５】
テスト処理部１４０は、テストパターン生成部１４１と、テスト制御部１４２と、状態判定部１４３とを有する。テストパターン生成部１４１は、テスト対象９に入力するテストパターンをランダムに作成し、ランダムテストパターンＤＢ１３１に保持する。
【００２６】
テスト制御部１４２は、状態遷移ＤＢ１３４の生成処理と、作成された状態遷移ＤＢ１３４を用いてテスト対象状態に遷移させる遷移制御とを行う。
【００２７】
生成処理では、ランダムテストパターンＤＢ１３１に保持された複数のテストデータＴＰのうち、変数の状態が遷移（変化）するテストデータＴＰを含む状態遷移情報７ａを状態遷移ＤＢ１３４に記憶する。変数は、予め状態定義ＤＢ１３２に登録された変数である。言い換えると、変数の変数名は、状態定義ＤＢ１３２に存在する。変数の状態が遷移（変化）するとは、変数の値が変化することである。状態遷移情報７ａは、変数の変数名４ｖ、テストパターンＴＰの入力時の当該変数の状態を特定する事前状態名５ａ、遷移条件となるテストパターンＴＰ、及び変化後の状態を特定する事後状態名６ａを含んでいる。
【００２８】
遷移制御では、テスト制御部１４２は、生成した状態遷移ＤＢ１３４から状態遷移情報７ｂを１つ読み出し、読み出した状態遷移情報７ｂの遷移条件列ＴＣをテスト対象９に入力する。状態遷移ＤＢ１３４から読み出された状態遷移情報７ｂは、記憶部１３０に記憶される。生成処理と遷移制御における状態遷移情報を区別するために、遷移制御では状態遷移情報７ｂというものとする。状態遷移情報７ｂは、変数名４ｖ、事前状態名５ａ、遷移条件列ＴＣ、及び事後状態名６ａを含む。ここで、遷移条件列ＴＣは、生成処理において、状態が変化したときのテストパターンＴＰ（遷移条件）の列に相当する。遷移条件列ＴＣは、遷移制御により状態を遡るごとに累積されたテストパターンＴＰ（遷移条件）に相当し、１以上のテストパターンＴＰ（遷移条件）を示す。
【００２９】
状態判定部１４３は、状態遷移ＤＢ１３４の生成処理及びテスト対象状態への遷移制御において、テスト対象９における変数の状態を監視し、状態変化を検知した際の事後状態を記憶部１３０に記憶する。
【００３０】
生成処理では、状態判定部１４３は、状態遷移情報７ａに事後状態名６ａを記憶する。遷移制御では、状態判定部１４３は、記憶部１３０に事後状態を示す遷移後状態名６ｂを記憶する。生成処理及び遷移制御において、状態判定部１４３は、状態定義ＤＢ１３２を参照して、変数の値に対応する状態名を取得して、事後状態名６ａ又は遷移後状態名６ｂとして記憶部１３０に出力する。
【００３１】
遷移制御では、更に、状態判定部１４３は、テスト制御部１４２が記憶した状態遷移情報７ｂの事後状態名６ａと、遷移後状態名６ｂとを照合した結果を示す判定結果７ｃを記憶部１３０に記憶する。事後状態名６ａと、遷移後状態名６ｂとが不一致の場合、エラーを示す判定結果７ｃが記憶される。一致した場合、照合成功を示す判定結果７ｃが記憶される。
【００３２】
テスト制御部１４２は、状態判定部１４３からの通知に応じて、判定結果７ｃに応じた処理を行う。一例として、判定結果７ｃがエラーを示す場合に、表示装置１５にエラーを通知するメッセージを表示すればよい。
【００３３】
テスト対象９は、本実施例における情報処理装置１００によりテストされる仕様書のないソフトウェアである。図３では、テスト対象９は、本実施例におけるテストパターン生成部１４１と、テスト制御部１４２と、状態判定部１４３とを有する情報処理装置１００に実装された構成例を示すが、このような構成例に限定されない。テスト対象９は、別の情報処理装置に実装されていてもよい。その場合、本実施例における情報処理装置１００は、ネットワークを介してテスト対象９にアクセスし、本実施例における生成処理及び遷移制御が行われればよい。
【００３４】
ランダムテストパターンＤＢ１３１は、状態遷移ＤＢ１３４を生成する際に用いられるデータベースであり、複数のテストパターンＴＰを保持する。テストパターン生成部１４１によって生成されたテストパターンＴＰがランダムテストパターンＤＢ１３１に記憶される。生成処理において、テスト制御部１４２によって、テスト対象９に入力するテストパターンＴＰがランダムテストパターンＤＢ１３１から無作為に選択される。
【００３５】
状態定義ＤＢ１３２は、技術者等のユーザにより予め作成される、テスト対象９において、状態が変化する変数を特定する変数名と、当該変数の状態を特定する状態名とを対応付けたデータベースである。ユーザは、テスト対象９のソースコードに含まれる定義文の記述から、状態の変化する変数ごとに、当該変数に対して定義された状態を特定することで、状態定義ＤＢ１３２を作成する。状態定義ＤＢ１３２の作成例は、図４で詳述する。
【００３６】
テスト対象状態ＤＢ１３３は、ユーザによって予め作成されたデータベースであり、事後状態名が指定されている。テスト対象状態ＤＢ１３３では、状態定義ＤＢ１３２に登録された状態名のうち初期状態を示す状態名以外の１又は複数の状態名が、テストする事後状態名として指定されている。
【００３７】
状態遷移ＤＢ１３４は、生成処理により、変数に対して得られた状態遷移情報７ａを記憶したデータベースである。状態遷移ＤＢ１３４において、１つの状態遷移情報７ａは、１つのレコードに相当する。遷移制御において、状態遷移ＤＢ１３４に記憶された複数の状態遷移情報７ａから選択された情報は、上述したように状態遷移情報７ｂとして説明する。
【００３８】
図４は、状態定義ＤＢの作成例を説明するための図である。図４において、テスト対象９のソースコードのうち、定義文の一部をコード４ｆで例示している。コード４ｆでは、定義部分４ｇと、定義部分４ｈとを例示している。
【００３９】
定義部分４ｇは、列挙型の記述例を示し、STATE_A、STATE_B、STATE_C、STATE_D、STATE_E、及びSTATE_Fにより６状態を表し、それぞれに、「０」、「１」、「２」、「３」、「４」、及び「５」の値が与えられている。これらの状態が設定される変数名は、「state」であり、初期値としてSTATE_A（＝０）であることが定義されている。
【００４０】
定義部分４ｈは、define文により定数を定義した記述例を示し、STATE_X、STATE_Y、及びSTATE_Zの３状態に対し、それぞれ「0x00」、「0x01」、及び「0x02」の定数が設定されている。更に、これら３状態の１つを示す変数名は、「state_XXX」であり、STATE_X（＝0x00）により初期化されている。
【００４１】
技術者等のユーザは、このような状態を定義した記述を見つけ、状態定義Ｄ１３２を作成する。状態定義Ｄ１３２は、変数名、状態名、値、初期状態等の項目を有する。変数名は、コード４ｆから得られた、状態を示す変数の識別名が設定される。状態名は、コード４ｆから得られた状態名が示される。値は、状態名に対して定義された値が設定される。初期状態は、複数の状態名のうち初期状態を示す状態名に対して「TRUE」が設定され、初期状態以外の状態を示す状態名には「FALSE」が設定される。
【００４２】
このデータ例では、変数名として、「state」又は「state_XXX」のいずれかが設定される。状態名「state」を示すレコードは６レコード存在する。６レコードそれぞれの状態名及び値に、状態Ａ及び「０」、状態Ｂ及び「１」、状態Ｃ及び「２」、状態Ｄ及び「３」、状態Ｅ及び「４」、そして、状態Ｆ及び「５」の１つが他レコードとにおいて重複なく設定される。状態Ａ、状態Ｂ、状態Ｃ、状態Ｄ、状態Ｅ、及び状態Ｆは、それぞれ、コード４ｆの定義部分４ｇにおけるSTATE_A、STATE_B、STATE_C、STATE_D、STATE_E、及びSTATE_Fに相当する。状態名として、定義部分４ｇで定義されている識別名をそのまま用いてもよい。初期状態では、状態名「state」に対する６状態のうち、状態名「Ａ」に対応付けて「TRUE」が設定される。それ以外の状態名「Ｂ」、「Ｃ」、「Ｄ」、「Ｅ」、及び「Ｆ」には、「FALSE」が設定される。
【００４３】
また、状態名「state_XXX」を示すレコードは３レコード存在する。３レコードそれぞれの状態名及び値に、状態Ｘ及び「０」、状態Ｙ及び「１」、そして状態Ｚ及び「２」の１つが他レコードとにおいて重複なく設定される。状態Ｘ、状態Ｙ、及び状態Ｚは、それぞれ、コード４ｆの定義部分４ｈにおけるSTATE_X、STATE_Y、及びSTATE_Zに相当する。状態名として、定義部分４ｈで定義されている識別名をそのまま用いてもよい。初期状態では、状態名「state_XXX」に対する３状態のうち、状態名「Ｘ」に対応付けて「TRUE」が設定される。それ以外の状態名「Ｙ」及び「Ｚ」には、「FALSE」が設定される。
【００４４】
次に、ランダムテストパターンＤＢ１３１と状態定義ＤＢ１３２とを用いて状態遷移ＤＢ１３４を生成する生成処理の概要について説明する。図５は、生成処理の概要を説明するための図である。図５において、生成処理の開始時に、テスト制御部１４２は、テストパターン生成部１４１に、テストパターンＴＰを生成させ、ランダムテストパターンＤＢ１３１に登録させる（ステップＳ１１）。
【００４５】
テスト制御部１４２は、ランダムテストパターンＤＢ１３１から未選択のテストパターンＴＰを１つ取得し（ステップＳ１２）、取得したテストパターンＴＰをテスト対象９に入力する（ステップＳ１３）。
【００４６】
生成処理では、テスト対象９の起動前に、状態遷移情報７ａを初期化しておくことが好ましい。一例として、状態遷移情報７ａに変数名４ｖと事前状態名５ａとを設定し、テストパターンＴＰと事後状態名６ａとを空に設定する。具体的には、状態遷移情報７ａにおいて、状態定義ＤＢ１３２に登録されている変数名が変数名４ｖに設定される。また、状態定義ＤＢ１３２において変数名４ｖに対して初期状態「TRUE」に対応付けられた状態名が事前状態名５ａに設定される。
【００４７】
状態判定部１４３は、テスト対象９の動作中、変数の値が変化したか否かを所定間隔で確認する（ステップＳ１４）。変数の値の変化を検知すると、変数の状態が遷移したとみなし、状態判定部１４３は、状態定義ＤＢ１３２を参照して、変数名４ｖと検知した値の組み合せに対応付けられた状態名を取得する（ステップＳ１５）。取得した状態名は、状態遷移情報７ａの事後状態名６ａに設定される。そして、状態判定部１４３は、テスト制御部１４２に対して、状態遷移情報７ａの登録要求を行う（ステップＳ１６）。状態遷移情報７ａの登録要求に応じて、テスト制御部１４２は、状態遷移情報７ａを状態遷移ＤＢ１３４に登録する（ステップＳ１７）。
【００４８】
テスト制御部１４２は、処理中の事前状態と組み合わされる事後状態を全て検出したか否かについて、状態定義ＤＢ１３２と状態遷移ＤＢ１３４とを参照することにより判定する（ステップＳ１８）。テスト制御部１４２は、事前状態ごとに、処理中の事前状態と組み合わされる事後状態を全て検出した場合、又は、タイムアウトした場合、処理中の事前状態に対して事後状態を検出することで、状態遷移ＤＢ１３４を生成する生成処理を終了する。
【００４９】
本実施例における生成処理の過程を、状態遷移ＤＢ１３４に基づく事前状態と事後状態とを対応付けたマトリクスを用いて説明する。図６及び図７は、生成処理の過程を説明するための図である。変数名「state」の状態遷移について、時系列に図６（Ａ）、図６（Ｂ）、図７（Ａ）、及び図７（Ｂ）の順に説明する。
【００５０】
図６（Ａ）では、生成処理の開始時におけるマトリクス２ｍｔの例を示す図である。マトリクスの行と列は、状態定義ＤＢ１３２から得た状態名を示す。マトリクス２ｍｔでは、列方向には事前状態として状態名を示し、行方向には事後状態として状態名が示される。本実施例では、状態定義ＤＢ１３２を用意しておくことで、生成処理の開始時には、検出する状態を把握することが可能である。
【００５１】
この例では、状態定義ＤＢ１３２に存在する、変数名「state」に対応付けられた、状態Ａ、状態Ｂ、状態Ｃ、状態Ｄ、状態Ｅ、及び状態Ｆが、行及び列に設定され初期化されたマトリクス２ｍｔを示す。マトリクス２ｍｔは、状態定義ＤＢ１３２に基づいて状態を示したものである。初期状態（状態Ａ）が最初に示されるが、状態Ｂ〜Ｆは、必ずしも時系列順でなくてもよい。
【００５２】
図６（Ｂ）のマトリクス２ｍｔでは、事前状態に状態Ａ（初期状態）を設定して、事後状態を検出した結果を示している。テスト制御部１４２が、値「ｂ」をテスト対象９に入力したときに、状態Ｂを検出したことが示されている。値「ｂ」は遷移条件となる。また、状態Ｃ、状態Ｄ、状態Ｅ、及び状態Ｆに対応付けて示された値「なし」は、これらの状態は検出されなかったことが示されている。一例として、状態Ｃ、状態Ｄ、状態Ｅ、及び状態Ｆを検出することなくタイムアウトになった場合には、状態遷移ＤＢ１３４に存在しないため、マトリクス２ｍｔでは「なし」が示される。
【００５３】
図７（Ａ）のマトリクス２ｍｔでは、変数「state」を状態Ｂへと遷移させ、事後状態を検出した結果を示している。変数「state」について、事前状態が状態Ａのときに、遷移条件として値「ｂ」をテスト対象９に入力することで状態Ｂへと遷移させる。状態Ｂへの遷移後、無作為に選択した値をテスト対象９に入力することで事後状態を検出する。この例では、値「ｃ」のときに状態Ｃが検出され、値「ｄ」のときに状態Ｄが検出されたことが示されている。また、状態Ａ、状態Ｅ、及び状態Ｆの検出はなかった。
【００５４】
上述したように、検出された状態へとテスト対象９を遷移させた後、無作為に選択した値をテスト対象９に入力して事後状態を検出することで、状態遷移ＤＢ１３４を更新される。その結果、図７（Ｂ）に示す結果を得る。
【００５５】
図７（Ｂ）のマトリクス２ｍｔでは、事前状態が状態Ｃのとき、いずれの状態へも遷移しなかったことが示されている。事前状態が状態Ｄのとき状態Ｅのみへと遷移し、また、事前状態が状態Ｅのとき状態Ｆのみへと遷移したことが示されている。更に、事前状態が状態Ｆのときにも、いずれの状態へも遷移しなかったことが示されている。このような結果から、変数「state」は、状態Ｃ又は状態Ｆに遷移した時に最終状態となることが分かる。
【００５６】
図８は、本実施例における生成処理により得られた変数「state」の状態遷移の流れを説明するための図である。図８（Ａ）は、図７（Ｂ）のマトリクス２ｍｔに基づいて、状態が遷移した事前状態に対して、遷移条件と事後状態とを対応付けたテーブルＴＢである。テーブルＴＢには、状態が遷移しなかった事前状態について対応付けは存在しない。つまり、状態Ｄと状態Ｆに関してそれぞれを事前状態に示すデータは省略される。
【００５７】
図８（Ａ）のテーブルＴＢにおいて、事前状態及び遷移条件に設定なく、事後状態に設定された状態Ａは、初期状態であることを表す。事前状態が状態Ａのとき、遷移条件「ｂ」がテスト対象９に入力されると、変数「state」は、状態Ａから状態Ｂへと遷移することが示されている。
【００５８】
事前状態が状態Ｂのとき、遷移条件「ｃ」がテスト対象９に入力されると、変数「state」は、状態Ｂから状態Ｃへと遷移することが示されている。また、遷移条件「ｄ」がテスト対象９に入力されると、変数「state」は、状態Ｂから状態Ｄへと遷移することが示されている。即ち、変数「state」は、状態Ｂのとき、状態Ｃ又は状態Ｄへと遷移する。
【００５９】
事前状態が状態Ｃのとき、遷移条件「ｅ」がテスト対象９に入力されると、変数「state」は、状態Ｅへと遷移することが示されている。事前状態が状態Ｅのとき、遷移条件「ｆ」がテスト対象９に入力されると、変数「state」は、状態Ｆへと遷移することが示されている。
【００６０】
このようなテーブルＴＢに基づいて、図８（Ｂ）に示すような分岐図により変数「state」の状態遷移の流れを表すことが可能である。図８（Ｂ）を参照すると、状態Ａのとき、入力が遷移条件「ｂ」と一致する場合、変数「state」は状態Ｂへと遷移する。
【００６１】
状態Ｂへの遷移後、入力が遷移条件「ｃ」と一致する場合、変数「state」は状態Ｃへと遷移する。状態Ｃにおいて、入力が遷移条件「ｅ」と一致する場合、変数「state」は状態Ｅへと遷移する。更に、状態Ｅにおいて、入力が遷移条件「ｅ」と一致する場合、変数「state」は状態Ｆへと遷移する。一方、状態Ｂへの遷移後、入力が遷移条件「ｄ」と一致する場合、変数「state」は状態Ｄへと遷移する。
【００６２】
図６から図８では、変数が「state」の場合で説明したが、本実施例における生成処理において、変数を「state_XXX」として状態遷移を特定することも可能である。
【００６３】
図９は、状態遷移ＤＢのデータ例を示す図である。図９において、状態遷移ＤＢ１３４は、変数「state」及び変数「state_XXX」のそれぞれの状態遷移を記憶したデータ例を示している。図９のデータ例では、変数「state」に係る図８（Ｂ）に示すマトリクス２ｍｔでの生成処理の状態に相当する。
【００６４】
状態遷移ＤＢ１３４は、変数名、事後状態名、事前状態名、遷移条件等の項目を有する。状態遷移ＤＢ１３４には、それぞれの変数について、状態が遷移したときの事後状態名、事前状態名、遷移条件等が記憶されている。状態定義ＤＢ１３２のある状態から他の状態への変化の検知に応じて、状態遷移ＤＢ１３４へとデータが記憶される。例えば、図６（Ａ）の生成処理の開始時には、状態変化は検知されていないため、変数「state」のデータは状態遷移ＤＢ１３４に存在しない。
【００６５】
変数名は、状態定義ＤＢ１３２で定義された変数名の１つを示す。事後状態名は、遷移後の状態名を示す。事前状態名は、遷移する直前の状態名を示す。遷移条件は、生成処理において、状態が遷移したときのテスト対象９に入力された値を示す。
【００６６】
状態遷移ＤＢ１３４には、変数名に「state」を示す５レコードが存在し、変数名に「state_XXX」を示す３レコードが存在する。変数「state」については、事後状態名、事前状態名、及び遷移条件のそれぞれの値は、図８（Ａ）で説明した内容に基づくため、説明を省略する。
【００６７】
変数「state_XXX」について、事前状態が状態Ｘのときに、入力が遷移条件「ｙ」を満たすと、状態Ｙに遷移する。また、事前状態が状態Ｙのときに、入力が遷移条件「ｚ」を満たすと、状態Ｚに遷移する。更に、事前状態が状態Ｚのときに、入力が遷移条件「ｘ」を満たすと、状態Ｘに遷移する。このことから、変数「state_XXX」は、状態Ｘ−＞状態Ｙ−＞状態Ｚを経て状態Ｘに戻ることを繰り返すと考えられる。
【００６８】
図１０は、遷移制御の概要を説明するための図である。図１０において、テスト対象状態ＤＢ１３３には、予めテストする１以上の変数名と、当該変数名を持つ変数の事後状態名が記憶されている。変数名と事後状態名とは、状態遷移ＤＢ１３４に存在する情報である。一例として、図８及び図９に基づき、変数名「state」と事後状態名「Ｄ」とが対応付けられたレコードと、変数名「state」と事後状態名「Ｆ」とが対応付けられたレコードなどが記憶されている。
【００６９】
遷移制御が開始されると、テスト制御部１４２は、テスト対象状態ＤＢ１３３から１レコードを読み込んで変数名と事後状態名とを取得する（ステップＳ２０）。取得した事後状態名によりテスト対象状態が特定される。テスト制御部１４２は、状態遷移ＤＢ１３４から、取得した事後状態名に対応付けられた事前状態名と遷移条件とを取得する（ステップＳ２１）。
【００７０】
遷移制御では、テスト対象９の起動前に、状態遷移情報７ｂを初期化しておくことが好ましい。状態遷移情報７ｂにおいて、テスト対象状態ＤＢ１３３から取得した変数名と事後状態名とが、変数名４ｖと事後状態名６ａのそれぞれに設定される。また、状態遷移ＤＢ１３４から取得した事前状態名と遷移条件とが、事前状態名５ａと遷移条件列ＴＣのそれぞれに設定される。
【００７１】
ステップＳ２１では、テスト制御部１４２は、事後状態名６ａが初期状態となるまで状態を遡りながら、状態遷移ＤＢ１３４から順に遷移条件を取得し、遷移条件列ＴＣに蓄積する。具体的には、事後状態名６ａを事前状態名５ａで置き換えて、置き換え後の事後状態名６ａを用いて状態遷移ＤＢ１３４から遷移条件を取得する処理を繰り返せばよい。
【００７２】
テスト対象状態から遡り初期状態となるまでに蓄積された遷移条件列ＴＣを用いて、テスト制御部１４２は、蓄積した順とは逆順に遷移条件を１つずつ、テスト対象９へ入力する（ステップＳ２２）。
【００７３】
状態判定部１４３は、テスト対象９の動作中、変数の値が変化したか否かを所定間隔で確認する（ステップＳ２３）。変数の値の変化を検知すると、即ち、変数の状態遷移を検知すると、状態定義ＤＢ１３２を参照して、変数名４ｖと検知した値の組み合せに対応付けられた状態名を取得する（ステップＳ２４）。状態判定部１４３は、取得した状態名を示す遷移後状態名６ｂを記憶部１３０に記憶する。
【００７４】
他方で、テスト制御部１４２は、遷移条件列ＴＣに含まれる遷移条件を全て終了すると、状態判定部１４３に遷移処理の終了を通知する（ステップＳ２５）。テスト制御部１４２からの終了通知を受信すると、状態判定部１４３は、遷移後状態名６ｂが状態遷移情報７ｂの事後状態名６ａに一致するか否かを判定し、判定結果７ｃをテスト制御部１４２に通知する（ステップＳ２６）。
【００７５】
テスト制御部１４２は、判定結果７ｃが一致を示す場合には、テスト対象状態ＤＢ１３３を参照して次のテスト対象の状態名を取得し、上記同様の制御処理を繰り返す。一方、判定結果７ｃがエラー（不一致）を示す場合、テスト制御部１４２は、エラーメッセージを表示装置１５に表示させる。エラーメッセージには、変数名４ｖと事後状態名６ａとを含むようにしてもよい。
【００７６】
テスト制御部１４２は、テスト対象状態ＤＢ１３３の全ての状態名に対して遷移制御を完了すると、更に遷移させるためテストパターン生成部１４１に生成要求を行う（ステップＳ１０）。つまり、図５で説明した生成処理へと戻る。この生成処理では、マトリクス２ｍｔにおける次の事前状態から更に遷移させ、状態遷移ＤＢ１３４が更新される。
【００７７】
本実施例における情報処理装置１００では、上述した生成処理と遷移制御とを組み合わせたテスト実行処理を行う。図１１は、本実施例におけるテスト実行処理の概要を説明するための図である。
【００７８】
図１１において、テスト処理部１４０は、ユーザによるソースコードから状態定義ＤＢ１３２を作成する処理を支援する（ステップＳ２１１）。テスト処理部１４０は、図１２に示すような状態定義作成画面Ｇ９０を表示装置１５に表示させて、ユーザから状態定義ＤＢ１３２の作成に用いるデータを取得する。テスト処理部１４０は、ユーザから取得したデータを用いて状態定義ＤＢ１３２を記憶部１３０に作成する。
【００７９】
テスト処理部１４０は、全状態数Ｎと、テスト済み状態数Ｘとを初期化する（ステップＳ２１２）。テスト処理部１４０は、全状態数Ｎに状態遷移ＤＢ１３４に登録されている変数の状態の総数を設定し、状態数Ｘに遷移制御によりテスト済みとなった事前状態の数を設定する。また、テスト処理部１４０は、状態遷移ＤＢ１３４に存在する変数名を取得する。取得した変数名で識別される変数の状態が監視対象となる。
【００８０】
テスト処理部１４０は、ランダムテスト済みの状態数Ｘをチェックする（ステップＳ２１３）。テスト処理部１４０は、全状態数Ｎと、遷移制御によりテスト済みとなった状態数Ｘとを比較する。初回の処理では、テスト対象状態ＤＢ１３３にレコードは存在しないため、状態数Ｘは０を示す。初回以降は、状態遷移ＤＢ１３４に新たに追加された変数名と事前状態名とが記憶される。
【００８１】
状態数Ｘが０を示す場合（Ｘ＝０）、即ち、未だテストされていない場合、テスト処理部１４０は、事前状態を初期状態としてランダムテストにより状態遷移ＤＢ１３４を作成し（ステップＳ２１５）、状態数Ｘを１インクリメントしてステップＳ２１３へと戻る。
【００８２】
状態数Ｘが０より大きくかつ全状態数Ｎより小さい場合（０＜Ｘ＜Ｎ）、テスト処理部１４０は、作成した状態遷移ＤＢ１３４を用いて初期状態から遷移した事後状態をテスト対象状態に設定して遷移制御を行う（ステップＳ２１４）。テスト対象状態へ遷移すると、テスト処理部１４０は、テスト対象状態を事前状態としたランダムテストによる生成処理を行い（ステップＳ２１５）。すなわち、マトリクス２ｍｔにおいて、次の行の事前状態に対して事後状態への遷移がテストされる。その後、テスト処理部１４０は、状態数Ｘを１インクリメントしてステップＳ２１３へと戻り、上記同様の処理を行う。
【００８３】
また、状態Ｘが全状態数Ｎと一致する場合（Ｘ＝Ｎ）、図１３のステップ３１０へと進み、ユーザによる簡単なリバースエンジニアリングが行われる。テスト処理部１４０は、状態遷移ＤＢ１３４に基づくテスト結果を出力してもよい。テスト結果の出力例として、図７（Ａ）又は図７（Ｂ）に示したようなマトリクス２ｍｔを示すテスト結果画面Ｇ９１を表示装置１５に出力する。
【００８４】
ユーザは、マトリクス２ｍｔに対して、遷移条件を入力することができる。遷移条件を入力後、ユーザが再実行を指示すると、ユーザにより入力された遷移条件により遷移する事後状態名と遷移直前の事前状態名とが関連付けられ、状態遷移ＤＢ１３４に新たなレコードが追加される。本実施例における情報処理装置１００を用いた場合の、ユーザによるリバースエンジニアリングの例については、図１３で説明する。
【００８５】
図１２は、状態定義作成画面の例を示す図である。図１２において、状態定義作成画面Ｇ９０は、ユーザがテスト対象９のソースコードに含まれる定義文の記述を解析することにより得られた情報を収集するための画面である。状態定義作成画面Ｇ９０は、変数名入力欄９０ａ、状態入力欄９０ｂ、行追加ボタン９０ｃ、登録ボタン９０ｄ、テスト開始ボタン９０ｅ等を有する。
【００８６】
変数名入力欄９０ａは、ソースコードの定義文で定義されている状態が変化する変数名を入力する領域である。状態入力欄９０ｂは、変数名入力欄９０ａに入力した変数名に関連付ける状態名、値、及び初期状態を入力する領域である。
【００８７】
行追加ボタン９０ｃは、状態入力欄９０ｂの行を追加するためのボタンである。登録ボタン９０ｄは、状態定義ＤＢ１３２に変数名に対応付けた状態名、値、及び初期状態を示すレコードを新たに登録するためのボタンである。テスト開始ボタン９０ｅは、作成された状態定義ＤＢ１３２を用いてランダムテストを実行するためのボタンである。
【００８８】
一例として、ユーザが、変数名入力欄９０ａに変数名として「state」を入力したのち、状態入力欄９０ｂにおいて、状態名に「Ａ」、値に「０」、及び初期状態に「TRUE」を入力し、更に、状態名に「Ｂ」、値に「１」及び初期状態に「FALSE」を入力する。これらの入力後、ユーザが登録ボタン９０ｄを選択すると、状態定義ＤＢ１３２に、「state」、「Ａ」、「０」、及び「TRUE」の値を含むレコードと、「state」、「Ｂ」、「１」、及び「FALSE」の値を含むレコードとが追加される。追加する際に、レコードの重複をチェックするようにする。ユーザのテスト開始ボタン９０ｅの選択により、テスト処理部１４０は、ステップＳ２１２から処理を行う。
【００８９】
上述したように、本実施例における生成処理及び遷移制御の結果、状態遷移ＤＢ１３４の更新が収束すると、ユーザは、テスト結果に基づいて、リバースエンジニアリングを行う。ユーザは、状態遷移ＤＢ１３４を更に補充し、テストパターンを作成して、テストを実行する。テスト結果は、一例として、マトリクス２ｍｔなどで表される。
【００９０】
図１３は、本実施例により得られたテスト結果を用いたリバースエンジニアリングの方法例を説明するためのフローチャート図である。図１３において、ユーザはテスト結果を確認する（ステップＳ３１０）。一例として、ユーザは、図１４に示すように、表示装置１５にテスト結果画面Ｇ９１を表示してマトリクス２ｍｔの内容を確認する。
【００９１】
そして、ユーザは、変数ごとに遷移の仕方に特徴があるか否かを判断する（ステップＳ３１１）。特徴とは、テスト処理部１４０により結果が出力されていない箇所等に相当する。ユーザは、マトリクス２ｍｔに結果が未出力の行の存在を確認する。
【００９２】
特徴があると判断した場合（ステップＳ３１１のＹＥＳ）ユーザは、特徴から状態遷移を網羅できていない箇所を特定し、限定的なリバースエンジニアリングを行う（ステップＳ３１２）。ユーザは、マトリクス２ｍｔ内の結果が未出力の行に関して、テスト対象９のソースコードの解析、テスト対象９の実行時に取得したログの解析等のリバースエンジニアリングを行う。
【００９３】
ユーザは、リバースエンジニアリングにより得られた、マトリクス２ｍｔにおいて不足している遷移条件を与えたレコードを状態遷移ＤＢ１３４に追加して、テストを再実行する（ステップＳ３１３）。このテストの再実行の指示により、テスト処理部１４０において、追加したレコード数が全状態数Ｎに加算される。全状態数Ｎの更新後、図１１のステップＳ２１３から上述した同様の処理が行われる。
【００９４】
一方、特徴がないと判断した場合（ステップＳ３１１のＮＯ）、ユーザは、カバレッジ計測で不十分な箇所をリバースエンジニアリングする（ステップＳ３１４）。本実施例を適用した場合、カバレッジ計測は高い割合を示すためテストが不十分な箇所は小部分である。つまり、リバースエンジニアリングの作業量は大幅に削減される。
【００９５】
ユーザは、リバースエンジニアリングにより得られた状態遷移をテストするテストパターンを手動で作成し（ステップＳ３１５）、テスト対象９をテストする（ステップＳ３１６）。
【００９６】
図１４は、図１３のステップＳ３１０で表示されるテスト結果画面の例を示す図である。図１４に示すテスト結果画面Ｇ９１は、マトリクス２ｍｔ、条件追加ボタン９１ｊ等を有する。
【００９７】
テスト結果画面Ｇ９１では、状態遷移ＤＢ１３４に基づいて、事前状態から事後状態への遷移を遷移条件で関連付けたマトリクス２ｍｔが表示される。本実施例におけるテスト処理部１４０により特定された遷移条件が、マトリクス２ｍｔのセル内に示されている。
【００９８】
このマトリクス２ｍｔを参照すると、結果が設定されていない未出力セル２ｋが存在する。未出力セル２ｋから、テスト対象９を状態Ｅと状態Ｆに遷移させることなくテストが終了したことを示している。
【００９９】
このことから、ユーザは、状態Ｅ又は状態Ｆへの状態遷移に複雑な遷移条件があると推測できる。ユーザは、状態Ｅ及び状態Ｆへの遷移のうち複雑な遷移条件が存在する箇所をリバースエンジニアリングにより解析する。ユーザは、解析により得られた遷移条件を追加するため、条件追加ボタン９１ｊを選択する。条件追加ボタン９１ｊの選択に応じて、図１５に示すような条件追加画面Ｇ９２が表示装置１５に表示される。
【０１００】
図１５は、条件追加画面の例を示す図である。図１５において、条件追加画面Ｇ９２は、変数名入力欄９２ａ、状態入力欄９２ｂ、登録ボタン９２ｄ、テスト再実行ボタン９２ｅ等を有する。
【０１０１】
変数名入力欄９２ａは、状態定義ＤＢ１３２に登録済みの変数名を入力する領域である。変数名入力欄９２ａでは、状態定義ＤＢ１３２に登録済みの変数名の一覧から選択可能とする構成であってもよい。状態入力欄９２ｂは、変数名入力欄９０ａに入力した変数名に関連付ける事前状態名、事後状態名、及び遷移条件を入力する領域である。
【０１０２】
登録ボタン９２ｄは、状態遷移ＤＢ１３４に変数名に対応付けた事前状態名、事後状態名、及び遷移条件を示すレコードを新たに登録するためのボタンである。テスト再実行ボタン９２ｅは、更新された状態遷移ＤＢ１３４を用いてテストを実行するためのボタンである。
【０１０３】
一例として、ユーザは、「事前状態Ｄ、事後状態Ｅ、遷移条件ｅ」がネックになっていると考え、少なくとも遷移条件ｅを設定することで、ランダムテストを継続して行え、結果画面２ｐを満足できる可能性があると考える。そこで、ユーザは、状態入力欄９２ｂにパターンを入力し、登録ボタン９２ｄを選択することで、状態遷移ＤＢ１３５に状態遷移に係るデータを登録する。この例では、状態入力欄９２ｂにおいて、事前状態名に「Ｄ」、事後状態名に「Ｅ」、及び遷移条件に「ｅ」が入力され、更に、事前状態名に「Ｅ」、事後状態名に「Ｆ」、及び遷移条件に「ｆ」が入力され、それぞれ登録されたとする。そして、ユーザのテスト再実行ボタン９２ｅの選択により、テスト処理部１４０は、ステップＳ２１３から処理が行われる。
【０１０４】
再実行により更新された結果は、図１６に示すようなテスト結果画面Ｇ９１で示される。図１６は、再実行後に表示されるテスト結果画面の例を示す図である。図１６に示すテスト結果画面Ｇ９１では、事前状態「Ｄ」のときに事後状態「Ｅ」に遷移する遷移条件が「なし」から「ｅ」へと置き換えられている。
【０１０５】
また、図１４の未出力セル２ｋの全てに遷移条件が設定されている。具体的には、事前状態「Ｅ」の場合、事後状態「Ａ」、「Ｂ」、「Ｃ」、及び「Ｄ」への遷移条件には「なし」が設定されている。事前状態「Ｅ」から事後状態「Ｆ」への遷移条件には「ｆ」が設定されている。更に、事前状態「Ｆ」から事後状態「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、及び「Ｅ」への遷移条件には「なし」が設定されている。このことから、変数名「state」については、事前状態「Ｆ」から更なる遷移は発生しない可能性がある。
【０１０６】
このような結果を確認後、ユーザによりテスト結果画面Ｇ９１が終了すると、テスト処理部１４０によるテスト処理が終了する。
【０１０７】
上述したように、変数の状態が変化した時の、事前状態、事後状態、及び遷移条件を示す状態遷移ＤＢ１３４を生成及び更新しながら、最新の状態遷移ＤＢ１３４に基づいて、初期状態を含む特定状態への遷移が行われるか否かをテストすることができる。また、変数が特定状態へと遷移した後も、特定状態後の遷移を継続して確認できる。
【０１０８】
更に、ユーザは、結果を確認しながら、リバースエンジニアリングを行う範囲を特定できるため、効率的に作業を行える。
【０１０９】
図１７は、状態遷移ＤＢの生成処理を説明するためのフローチャート図である。図１７において、テストパターン生成部１４１は、無作為にテストパターンを生成して、生成したテストパターンをランダムテストパターンＤＢ１３１に記憶する（ステップＳ４１１）。
【０１１０】
テスト制御部１４２は、ランダムテストパターンＤＢ１３１からテストパターンを１つ取得して（ステップＳ４１２）、テストパターンをテスト対象９に入力する（ステップＳ４１３）。状態判定部１４３は、変数の状態を確認する（ステップＳ４１４）。状態判定部１４３は、変数の値を取得する。
【０１１１】
そして、状態判定部１４３は、状態定義ＤＢ１３２のいずれかの状態に遷移したか否かを判断する（ステップＳ４１５）。いずれの状態にも遷移していない場合（ステップＳ４１５のＮＯ）、状態判定部１４３は、ステップＳ４１１へと戻り、上述した同様の処理を繰り返す。
【０１１２】
一方、いずれかの状態に遷移した場合（ステップＳ４１５のＹＥＳ）、状態判定部１４３からの登録要求に応じて、テスト制御部１４２は、使用したテストパターン、事前状態、及び事後状態を、変数の変数名に対応付けて状態遷移ＤＢ１３４に登録する（ステップＳ４１６）。
【０１１３】
テスト制御部１４２は、状態定義ＤＢ１３２で示される変数の状態を全て検出したか否かを判断する（ステップＳ４１７）。全ての状態を検出した場合（ステップＳ４１７のＹＥＳ）、テスト処理部１４０は、状態遷移ＤＢ１３４の生成処理を終了する。マトリクス２ｍｔにおいて、各事前状態に対して処理済みであることが、変数の状態を全て検出したことに相当する。
【０１１４】
状態定義ＤＢ１３２に存在する変数の変数名に対応付けられた状態名が全て、状態遷移ＤＢ１３４に存在するか否かが確認される。未検出の状態が存在する場合（ステップＳ４１７のＮＯ）、テスト処理部１４０は、タイムアウトか否かを判断する（ステップＳ４１８）。タイムアウトした場合（ステップＳ４１８のＹＥＳ）、テスト制御部１４２は、この状態遷移ＤＢ１３４の生成処理を終了する。一方、タイムアウトしていない場合（ステップＳ４１８のＮＯ）、テスト制御部１４２は、ステップＳ４１１へと戻り、上述した同様の処理を繰り返す。
【０１１５】
図１８は、変数の遷移制御を説明するためのフローチャート図である。図１８において、テスト制御部１４２は、テスト対象状態ＤＢ１３３からテスト対象状態名（特定状態名）を取得する（ステップＳ５１１）。
【０１１６】
テスト制御部１４２は、状態遷移ＤＢ１３４からテスト対象状態名が事後状態名として記憶されている事前状態名と遷移条件とを取得する（ステップＳ５１２）。そして、テスト制御部１４２は、テスト対象状態名が初期状態を示すか否かを判断する（ステップＳ１５３）。テスト対象状態名が初期状態を示す場合（ステップＳ５１３のＹＥＳ）、テスト制御部１４２は、ステップＳ５１９へと進む。
【０１１７】
一方、テスト対象状態名が初期状態を示さない場合（ステップＳ５１３のＮＯ）、テスト制御部１４２は、遷移条件をスタックに保持し（ステップＳ５１４）、ステップＳ５１２で取得した事前状態名が初期状態を示すか否かを判断する（ステップＳ５１５）。図３の状態遷移情報７ｂにおける遷移条件列ＴＣがスタックに相当する。
【０１１８】
取得した事前状態名が初期状態を示さない場合（ステップＳ５１５のＮＯ）、テスト制御部１４２は、事前状態名をテスト対象状態名に設定して（ステップＳ５１６）、ステップＳ５１２へと戻り、上述した処理を繰り返すことで状態を遡り、初期状態までの遷移条件を順にスタックに記憶していく。
【０１１９】
状態を遡ることで、ステップＳ５１２で取得した事前状態名が初期状態を示す場合（ステップＳ５１５のＹＥＳ）、テスト制御部１４２は、スタックから最後に記憶された遷移条件から順に１つ取り出して（ステップＳ５１７）、テスト対象９に取得した遷移条件をテスト対象９に入力する（ステップＳ５１８）。
【０１２０】
テスト制御部１４２は、遷移条件のテスト対象９への入力後、スタックが空になったか否かを判断する（ステップＳ５１９）。スタックに未だ遷移条件が残っている場合（ステップＳ５１９のＮＯ）、テスト制御部１４２は、ステップＳ５１７へと戻り上述同様の処理を説明する。
【０１２１】
一方、スタックに遷移条件が残っていない場合（ステップＳ５１９のＹＥＳ）、テスト制御部１４２は、状態遷移が終了したと判断し、状態判定部１４３にテスト対象９の状態を確認させる。状態判定部１４３は、テスト対象９の現在の状態を取得する（ステップＳ１４３）。テスト対象９の現在の状態を示す遷移後状態名６ｂが記憶部１３０に記憶される。
【０１２２】
そして、状態判定部１４３は、取得したテスト対象９の現在の状態がテスト対象状態名と一致するか否かを判断する（ステップＳ５２１）。テスト対象９の現在の状態がテスト対象状態名と一致しない場合（ステップＳ５２１のＮＯ）、状態判定部１４３は、判定結果７ｃとしてエラーを出力する（ステップＳ５２２）。
【０１２３】
一方、テスト対象９の現在の状態がテスト対象状態名（特定状態名）と一致する場合（ステップＳ５２１のＹＥＳ）、状態判定部１４３は、判定結果７ｃとして「正常遷移」を示すデータを出力する。「正常遷移」を示す判定結果７ｃにより、テスト制御部１４２は、遷移制御を終了する。
【０１２４】
上述したように、本実施例では、ユーザから、ソースコードの定義文から、状態が変化する変数の変数名と、当該変数が遷移し得る状態の状態名と、該状態の値と、初期状態であるか否かの情報とを取得して、状態定義ＤＢ１３２が生成される。
【０１２５】
情報処理装置１００に状態定義ＤＢ１３２を用意することで、テスト対象状態（特定状態）を予め知り得ることが可能となる。すなわち、既存のランダムテストでは、事後状態が不明のまま行われるのに対して、本実施例では、予め事後状態を明確にしておくことができるため、テストする事後状態への遷移を漏れなくテストすることが可能である。
【０１２６】
本実施例における情報処理装置１００では、状態が遷移するごとに、遷移後の状態を事前状態として、予め得られた状態のいずれかへ遷移する遷移条件をランダムテストにより取得して状態遷移ＤＢ１３４を更新する。本実施例では、状態定義ＤＢ１３２に存在する有限数の状態に対してランダムテストを行えばよいため、効率的なランダムテストを実現する。
【０１２７】
また、ユーザのリバースエンジニアリングにおいても、情報処理装置１００により出力されたマトリクス２ｍｔを確認することで、リバースエンジニアリングを行う範囲を特定することが容易となる。遷移条件を特定するためのリバースエンジニアリングの作業量を大幅に削減できる。
【０１２８】
本実施例では、ソフトウェア開発規模の大きなプログラム（テスト対象９）に対するテストを漏れなく実施可能とし、かつテストを効率的に行うことができる。ＯＳＳ（Open Source Software）、開発当初の資料はもはや存在しない過去資産などの、内部の動作を表す仕様書の無いプログラムであったとしても、簡易なリバースエンジニアリングで網羅的にテストを実施可能である。
【０１２９】
ここに挙げられた全ての例及び特定の用語は、読者が、本発明及び当該技術の促進に対する本発明者により寄与された概念を理解することを助ける、教示的な目的において意図されたものであり、本発明の優位性及び劣等性を示すことに関する、本明細書の如何なる例の構成、そのような特定の挙げられた例及び条件に限定しないように解釈されるべきものである。
【０１３０】
本発明の実施形態は詳細に説明されているが、本発明の精神及び範囲から外れることなく、様々な変更、置換及び修正をこれに加えることが可能であることを理解されたい。
【０１３１】
実施例において、テストパターンがテストデータの一例である。また、テストパターン生成部１４１、テスト制御部１４２、及び状態判定部１４３による状態遷移ＤＢ１３４を生成する生成処理が生成部の一例であり、テスト制御部１４２及び状態判定部１４３による遷移制御が遷移制御部の一例である。
【０１３２】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す
処理をコンピュータに行わせる状態遷移テスト実行プログラム
（付記２）
前記コンピュータは、
前記状態遷移データベースに記憶された前記第１の状態名と前記第２の状態名の対応付けに基づいて、テスト対象の事後状態から前記初期状態まで遡り、遡るごとに新たな事後状態を識別する第２の状態名に対応付けられた前記テストデータを取得してスタックに保持し、
前記初期状態まで遡ったときに、前記スタックから、直前に格納した前記テストデータから順に前記プログラムに該テストデータを入力することで、前記変数の状態を前記特定の事後状態へと遷移させる付記１記載の状態遷移テスト実行プログラム。
（付記３）
前記コンピュータは、
前記変数の状態を変化させた前記テストデータを、前記状態遷移データベースにおける事前状態から事後状態へと遷移する遷移条件として前記状態遷移データベースに記憶し、
前記状態遷移データベースの前記遷移条件に対する変更に応じて、前記変数の状態を前記初期状態から変更された該遷移条件に対応付けられる事後状態まで遷移させ、遷移させた該事後状態において前記ランダムテストを行うことで、前記状態遷移データベースを更新する付記２記載の状態遷移テスト実行プログラム。
（付記４）
前記コンピュータは、
前記状態遷移データベースの前記遷移条件に対する変更を可能とする画面を表示装置に表示させる付記３記載の状態遷移テスト実行プログラム。
（付記５）
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す
処理をコンピュータが行う状態遷移テスト実行方法。
（付記６）
検証対象のプログラムのソースコードから得られた、状態が遷移する変数の変数名と、該変数の複数の状態それぞれの状態名と、を少なくとも記憶した状態定義データベースで特定される該変数の複数の状態において、該プログラムに対するランダムテストによって該変数の状態が変化したときの、変化前の事前状態を識別する第１の状態名と、該事前状態からの変化後の事後状態を識別する第２の状態名と、該プログラムへ入力したテストデータのうち該事前状態から該事後状態へと遷移させたテストデータとを対応付けた状態遷移データベースを参照し、該状態遷移データベースに記憶された前記テストデータを用いて、前記変数の状態を初期状態から前記事後状態まで遷移させ遷移制御部を有し、
遷移させた前記事後状態において前記ランダムテストを行うことを繰り返す情報処理装置。
【符号の説明】
【０１３３】
４ｖ        変数名
５ａ        事前状態名
６ａ        事後状態名
６ｂ        遷移後状態名
７ａ        状態遷移情報
７ｂ        状態遷移情報
９          テスト対象
ＴＣ        遷移条件列
ＴＰ        テストパターン
１００      情報処理装置
１３１      ランダムテストパターンＤＢ
１３２      状態定義ＤＢ
１３３      テスト対象状態ＤＢ
１３４      状態遷移ＤＢ
１４０      テスト処理部
１４１      テストパターン生成部
１４２      テスト制御部
１４３      状態判定部
【図１】
2022001982.tif 000003
【図２】
2022001982.tif 000004
【図３】
2022001982.tif 000005
【図４】
2022001982.tif 000006
【図５】
2022001982.tif 000007
【図６】
2022001982.tif 000008
【図７】
2022001982.tif 000009
【図８】
2022001982.tif 000010
【図９】
2022001982.tif 000011
【図１０】
2022001982.tif 000012
【図１１】
2022001982.tif 000013
【図１２】
2022001982.tif 000014
【図１３】
2022001982.tif 000015
【図１４】
2022001982.tif 000016
【図１５】
2022001982.tif 000017
【図１６】
2022001982.tif 000018
【図１７】
2022001982.tif 000019
【図１８】
2022001982.tif 000020