(57)【要約】【課題】複数の部品を含むシステムに対するテストケースを小さいサイズで生成する。【解決手段】本発明の装置は、システムに対するプロパティ記述を変換したオートマトンにおいてシステムの部品毎に部品の入力アクション以外の他アクションに対する射影演算を行って部分オートマトンを得る分割部と、各部分オートマトンを並行結合して合成オートマトンを生成する並行合成部と、合成オートマトンにおいてオートマトンと矛盾する禁止遷移を特定する禁止遷移計算部と、合成オートマトンにおける初期状態から到達不能な遷移のうち禁止遷移以外のすべてを除去し、禁止遷移の入力アクション以外の他アクションのうち射影演算しても禁止遷移を含む複数の遷移が同一状態から発生しないものに前記射影演算を行って差分オートマトンを得る差分計算部と、部分オートマトンおよび差分オートマトンと複数の部品の部品モデルに基づきテストケースを生成するテストケース生成部と、を備える。【選択図】図１
2011065576.tif 000002
【特許請求の範囲】
【請求項１】
互いに結合された複数の部品を含むシステムに対する入力アクションの発生順序の制約を記述したプロパティ記述を、複数の状態と、前記入力アクションと、前記入力アクションの発生に起因して生じる状態遷移とを含むオートマトンに変換するオートマトン変換部と、
前記複数の部品のそれぞれに対する入力アクションを個別に示した部品構成情報毎に、前記システムに対する入力アクションのうち、対応する部品に対する入力アクション以外のすべての他入力アクションに対する射影演算を前記オートマトンに行うことにより部分オートマトンを得る分割部と、
各前記部分オートマトンを並行結合することにより、各前記部分オートマトンの状態を組み合わせた合成状態と、各前記部分オートマトンに含まれる入力アクションの和集合と、前記入力アクションの発生に起因する前記合成状態間の状態遷移とを含む合成オートマトンを生成する並行合成部と、
前記合成オートマトンおよび前記オートマトン間で同じアクションをもつ状態遷移を１つずつ選択して組み合わせることにより合成された遷移関係を取得し、前記合成された遷移関係において初期状態から到達不能な遷移と到達可能な遷移とを特定し、前記到達不能な遷移のうち前記到達可能遷移のうちの1つと遷移元に含まれる合成状態が一致する遷移を特定し、前記合成オートマトンにおいて前記特定した遷移と遷移元および遷移先に含まれる合成状態が一致する状態遷移である禁止遷移を特定する禁止遷移計算部と、
前記合成オートマトンにおける初期状態から到達不能な遷移のうち前記禁止遷移以外のすべての到達不能遷移を除去し、前記禁止遷移の入力アクション以外のすべての他入力アクションのそれぞれ毎に前記他入力アクションに対する射影演算を行ったときに同一状態から少なくとも前記禁止遷移を含む複数の遷移が生じる場合は当該射影演算を無効化し生じない場合は有効化することを繰り返すことにより差分オートマトンを得る、差分計算部と、
前記部分オートマトンおよび前記差分オートマトンと、前記複数の部品のそれぞれ毎に、複数の状態と、入力アクションの発生に起因する状態間の遷移と、前記遷移の際に発生する出力アクションとを表す部品モデルとに基づき、前記システムに対するテストケースを生成するテストケース生成部と、
を備えたテストケース生成装置。
【請求項２】
任意に与えられた2つのオートマトンが双模倣の関係にあるか否かを判定する判定部と、
(A)前記禁止遷移計算部で前記禁止遷移が複数特定されたとき、前記禁止遷移のうちまだ選択されていない1つの禁止遷移を選択し、
(B)選択した禁止遷移に対して前記差分計算部による処理を行って前記差分オートマトンを取得し、
(C)前記差分計算部により得られたすべての差分オートマトンと、前記合成オートマトンまたは複数の前記部分オートマトンとを並行結合し、並行結合により得られたオートマトンと前記オートマトンとが双模倣の関係にあるかを前記判定部により判定し、双模倣の関係にあるときは前記部分オートマトンとこれまでに取得された前記差分オートマトンとを前記プロパティ変換部に送出し、
(D)双模倣の関係にないと判断されたときは(A)〜(C)を再度行う
連係制約計算部と、
をさらに備えたことを特徴とする請求項1に記載のテストケース生成装置。
【請求項３】
前記テストケース生成部は、
各前記部品に対応する各前記部品モデルの遷移を、各前記部品に対応する前記部分オートマトンにより制限し、各制限された部品モデルの遷移をすべて網羅するように順次辿ることにより各前記部品毎に複数の入力アクションを含むテストケースを生成し、
各前記制限された部品モデルを並行結合し、並行結合されたモデルの遷移を前記差分オートマトンにより制限し、制限された部品モデルの遷移をすべて網羅するように順次辿ることにより各前記部品の組合せテスト用の複数の入力アクションを含むテストケースを生成する
ことを特徴とする請求項1または2に記載のテストケース生成装置。
【請求項４】
前記部分オートマトンと前記差分オートマトンをプロパティ記述に変換するプロパティ変換部をさらに備え、
前記テストケース生成部は、前記部分オートマトンと前記差分オートマトンが変換されたプロパティ記述を用いて処理を行う
ことを特徴とする請求項1ないし3のいずれか一項に記載のテストケース生成装置。
【請求項５】
コンピュータにおいて実行するテストケース生成方法であって、
コンピュータが、
互いに結合された複数の部品を含むシステムに対する入力アクションの発生順序の制約を記述したプロパティ記述を、複数の状態と、前記入力アクションと、前記入力アクションの発生に起因して生じる状態遷移とを含むオートマトンに変換するオートマトン変換ステップと、
前記複数の部品のそれぞれに対する入力アクションを個別に示した部品構成情報毎に、前記システムに対する入力アクションのうち、対応する部品に対する入力アクション以外のすべての他入力アクションに対する射影演算を前記オートマトンに行うことにより部分オートマトンを得る分割ステップと、
各前記部分オートマトンを並行結合することにより、各前記部分オートマトンの状態を組み合わせた合成状態と、各前記部分オートマトンに含まれる入力アクションの和集合と、前記入力アクションの発生に起因する前記合成状態間の状態遷移とを含む合成オートマトンを生成する並行合成ステップと、
前記合成オートマトンおよび前記オートマトン間で同じアクションをもつ状態遷移を１つずつ選択して組み合わせることにより合成された遷移関係を取得し、前記合成された遷移関係において初期状態から到達不能な遷移と到達可能な遷移とを特定し、前記到達不能な遷移のうち前記到達可能遷移のうちの1つと遷移元に含まれる合成状態が一致する遷移を特定し、前記合成オートマトンにおいて前記特定した遷移と遷移元および遷移先に含まれる合成状態が一致する状態遷移である禁止遷移を特定する禁止遷移計算ステップと、
前記合成オートマトンにおける初期状態から到達不能な遷移のうち前記禁止遷移以外のすべての到達不能遷移を除去し、前記禁止遷移の入力アクション以外のすべての他入力アクションのそれぞれ毎に前記他入力アクションに対する射影演算を行ったときに同一状態から少なくとも前記禁止遷移を含む複数の遷移が生じる場合は当該射影演算を無効化し生じない場合は有効化することを繰り返すことにより差分オートマトンを得る、差分計算ステップと、
前記部分オートマトンおよび前記差分オートマトンと、前記複数の部品のそれぞれ毎に、複数の状態と、入力アクションの発生に起因する状態間の遷移と、前記遷移の際に発生する出力アクションとを表す部品モデルに基づき、前記システムに対するテストケースを生成するテストケース生成ステップと、
を実行することを特徴とするテストケース生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウエアまたはソフトウエアを含むシステムのテストにおけるテストケース数の爆発を抑制して適切なテスト工数を見込む設計を行うためのテストケース生成装置ならびにその方法に関する。
【背景技術】
【０００２】
LSI設計や組込ソフトウエア設計において短時間開発を実現する1つの手段として、時相論理(LTL，PSL等)に代表される制約をアサーションとして仕様内に記述し、この仕様を利用して設計や検証を行うアサーションベース設計/検証手法が着目されている(例えば非特許文献1を参照。)。アサーションベース設計では、アサーションはシステムの構成部品毎の性質(プロパティ)として定義され、この部品付属のプロパティをシステムに埋め込み、設計過程で部品のプロパティに違反しないかどうかを検証しながら設計を行っている。
【０００３】
一方、部品に対する入力に関わる環境の動作制約をプロパティとして表現すればこのプロパティを、部品に対するテストケースのサイズを制限することに用いて、テストケースの削減を図ることができる。これは環境側には、動作制約が動作のプロパティとして強制されることを意味する。部品に対する環境側の制限をAssume、環境に対する部品側の動作制限をGuaranteeと呼ばれ、Assume-Guarantee型の推論技術とされる(非特許文献2を参照)。
【０００４】
プロパティまたはアサーションは、時相論理式で記述される場合が多いが、時相論理は、状態遷移機械であるオートマトンに変換できることが知られている。
【０００５】
例えば、時相論理の一種である線形時相論理(LTL:Linear Temporal Logic)については、これを状態遷移機械の一種である交替性オートマトン(Alternating Automata)に変化する技術が確立されている(例えば、下記「非特許文献3」を参照)。さらに、交替性オートマトンを線形時相論理に変換する技術も確立されている(例えば非特許文献3および非特許文献4を参照)。
【０００６】
またプロパティは、プロセス代数を用いたプロセス定義式で定義される場合もある(非特許文献5を参照)
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】「アサーションベース設計」原書2版，Harry D.Foster・Adam C.Krolnik・David J. Lacey著，東野  輝夫・岡野  浩三・中田  明夫  監訳，丸善書店
【非特許文献２】Henzinger, T. A., Qadeer, S., and Rajamani, S. K. 1998. You Assume, We Guarantee: Methodology and Case Studies. In Proceedings of the 10th international Conference on Computer Aided Verification (June 28 - July 02, 1998). A. J. Hu and M. Y. Vardi, Eds. Lecture Notes In Computer Science, vol. 1427. Springer-Verlag, London, 440-451.
【非特許文献３】"An Automata-Theoretic Approach to Linear Temporal Logic", MY Vardi - Logics for Concurrency: Structure Versus Automata, 1996,Springer-Verlag Inc.
【非特許文献４】"Deeper Connections between LTL and Alternating Automata", Pelanek, R. and Strejcek, J.,Proc. of Conference on Implementation and Application of Automata (CIAA 2005)
【非特許文献５】Reactive Systems: Modeling, Specification and Verification 、Luca Aceto他、ISBN: 978-0521875462
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一方、複数の部品からなるシステムに対するテストケース生成では、従来の方法では、まず、各部品の遷移系からシステム全体の遷移系をもとめ、この全体遷移系の遷移を、システムに与えられたプロパティにより制限し、制限した遷移系に基づきテストケースの生成を行う。この方法では、内部部品の個数が多くなったり各内部部品の状態数が大きくなったりすると、いわゆる状態爆発によりテストケースのサイズおよび計算量が莫大になる問題がある。
【０００９】
本発明は、複数の部品を含むシステムに対するテストケースをできるだけサイズを小さくして生成することを可能にしたテストケース生成装置およびその方法を提供する。
【課題を解決するための手段】
【００１０】
本発明の一態様としてのテストケース生成装置は、
互いに結合された複数の部品を含むシステムに対する入力アクションの発生順序の制約を記述したプロパティ記述を、複数の状態と、前記入力アクションと、前記入力アクションの発生に起因して生じる状態遷移とを含むオートマトンに変換するオートマトン変換部と、
前記複数の部品のそれぞれに対する入力アクションを個別に示した部品構成情報毎に、前記システムに対する入力アクションのうち、対応する部品に対する入力アクション以外のすべての他入力アクションに対する射影演算を前記オートマトンに行うことにより部分オートマトンを得る分割部と、
各前記部分オートマトンを並行結合することにより、各前記部分オートマトンの状態を組み合わせた合成状態と、各前記部分オートマトンに含まれる入力アクションの和集合と、前記入力アクションの発生に起因する前記合成状態間の状態遷移とを含む合成オートマトンを生成する並行合成部と、
前記合成オートマトンおよび前記オートマトン間で同じアクションをもつ状態遷移を１つずつ選択して組み合わせることにより合成された遷移関係を取得し、前記合成された遷移関係において初期状態から到達不能な遷移と到達可能な遷移とを特定し、前記到達不能な遷移のうち前記到達可能遷移のうちの1つと遷移元に含まれる合成状態が一致する遷移を特定し、前記合成オートマトンにおいて前記特定した遷移と遷移元および遷移先に含まれる合成状態が一致する状態遷移である禁止遷移を特定する禁止遷移計算部と、
前記合成オートマトンにおける初期状態から到達不能な遷移のうち前記禁止遷移以外のすべての到達不能遷移を除去し、前記禁止遷移の入力アクション以外のすべての他入力アクションのそれぞれ毎に前記他入力アクションに対する射影演算を行ったときに同一状態から少なくとも前記禁止遷移を含む複数の遷移が生じる場合は当該射影演算を無効化し生じない場合は有効化することを繰り返すことにより差分オートマトンを得る、差分計算部と、
前記部分オートマトンおよび前記差分オートマトンと、前記複数の部品のそれぞれ毎に、複数の状態と、入力アクションの発生に起因する状態間の遷移と、前記遷移の際に発生する出力アクションとを表す部品モデルに基づき、前記システムに対するテストケースを生成するテストケース生成部と、
を備える。
【発明の効果】
【００１１】
本発明により、複数の部品を含むシステムに対するテストケースをできるだけサイズを小さくして生成することが可能になる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態としてのテストケース生成装置の典型的な構成を示す図。
【図２】本発明の実施形態におけるモデルの構成図。
【図３】オートマトン変換部の動作説明図。
【図４】分割部の動作説明図。
【図５】分割部の処理の流れを示すフローチャート。
【図６】連係制約計算部の処理の流れを示すフローチャート。
【図７】並行合成部の動作説明図。
【図８】並行合成部の処理の流れを示すフローチャート。
【図９】禁止遷移計算部の動作説明図。
【図１０】禁止遷移計算部の処理の流れを示すフローチャート。
【図１１】差分計算部の動作説明図。
【図１２】差分計算部の処理の流れを示すフローチャート。
【図１３】クルーズ制御部に対する差分計算部の動作例を示す図。
【図１４】エンジン制御部に対する差分計算部の動作例を示す図。
【図１５】判定部の動作説明図。
【図１６】プロパティ変換部の動作説明図。
【図１７】テストケース生成部の処理の流れを示すフローチャート。
【発明を実施するための形態】
【００１３】
図1は本発明の実施形態におけるテストケース生成装置の典型的な構成を示すブロック図である。
【００１４】
プロパティJは、互いに結合された複数の部品を含むシステムに対する入力アクションの発生順序の制約をプロセス定義式または時相論理式等により記述したものである。プロパティJはたとえば外部のデータ記憶装置に記憶されていてもよいし、ユーザが入力手段を介して入力してもよい。外部の記憶装置は、たとえばハードディスク、メモリ装置、光ディスク等である。
【００１５】
オートマトン変換部11は、プロパティJを外部の記憶装置または入力手段を介して読み出し、読み出したプロパティJを、複数の状態と、前記入力アクションと、前記入力アクションの発生に起因する状態遷移とを含むオートマトンT(以降、元々のオートマトンと称することもある)に変換する。
【００１６】
部品構成情報Uは、複数の部品のそれぞれに入力し得る入力アクションの内容を個別に示したものである。部品構成情報Uはたとえば外部のデータ記憶装置に記憶されていてもよいし、ユーザが入力手段を介して入力してもよい。外部の記憶装置は、たとえばハードディスク、メモリ装置、光ディスク等である。
【００１７】
分割部12は、部品構成情報Uを外部の記憶装置または入力手段から読み出し、またオートマトン変換部11により得られたオートマトンTを読み込む。分割部12は、上記複数の部品のそれぞれ毎に、前記システムに対する全入力アクションのうち、当該部品に対する入力アクション以外のすべての他入力アクションに対する射影演算を前記オートマトンTに行う。これにより複数の部品のそれぞれ毎に、オートマトンTから該当する他入力アクションおよび当該他入力アクションの状態遷移が削除された部分オートマトン(当該部品単体に対する入力アクションの制約を表す)を得る。
【００１８】
連係制約計算部13は並行合成部21と、判定部22と、禁止遷移計算部23と、差分計算部24と、更新部25と、一時記憶部26とを備える。
【００１９】
一時記憶部26は、分割部12により得られた各部品の部分オートマトン、および後述する更新部25により渡される差分オートマトンを内部に記憶する。
【００２０】
並行合成部21は、複数の部品に対応する部分オートマトンを並行結合することにより、複数の合成状態と、これらの部品に対する入力アクションと、当該入力アクションの発生に起因する状態遷移とを含む合成オートマトンを生成する。一時記憶部26内のすべての部分オートマトンを結合してもよいし、並行結合する対象となる部品を指定してもよい。指定は、ユーザにより入力手段を介して行ってもよいし、対象部品を記述したデータを与えることによって行ってもよい。また並行合成部21は、判定部22の指示に応じて、上記合成オートマトンと差分オートマトンを合成して新たに合成オートマトンを得る処理も行う。
【００２１】
判定部22は、並行合成部21により得られた合成オートマトンと、オートマトンTとが双模倣(後述)の関係にあるか否かを判定し、双模倣であるときは、一時記憶部26のデータをプロパティ変換部14に送出し、双模倣でないときは、禁止遷移計算部23に処理を移行する。
【００２２】
禁止遷移計算部23は、合成オートマトンの状態遷移とオートマトンTの状態遷移とを合成することにより合成された遷移関係を取得し、合成された遷移関係において初期状態から到達不能な遷移(NOGOOD)と到達可能な遷移(GOOD)とを特定する。そして、到達不能な遷移のうち到達可能遷移のうちの1つと遷移元に含まれる合成状態が一致する遷移を特定し、合成オートマトンにおいて当該特定した遷移と遷移元および遷移先に含まれる合成状態が一致する状態遷移である禁止遷移(NG遷移)を特定する。禁止遷移計算部23は合成オートマトンにおける禁止遷移にラベル付けを行い、これにより禁止遷移付きオートマトンを得る。
【００２３】
差分計算部24は、合成オートマトンにおける初期状態から到達不能な遷移のうち着目する禁止遷移以外のすべての到達不能遷移を除去し、禁止遷移の入力アクション以外のすべての他入力アクションのそれぞれ毎に当該他入力アクションに対する射影演算を行ったときに同一状態から少なくとも禁止遷移を含む複数の遷移が生じる場合は当該射影演算を無効化し生じない場合は有効化することを繰り返すことにより差分オートマトンを得る。この差分オートマトンは、当該禁止遷移を抑制する最大の部分オートマトンであるといえる。
【００２４】
更新部25は、差分計算部24により得られた差分オートマトンを一時記憶部26に追加することにより一時記憶部26を更新し、判定部22に更新を通知する。
【００２５】
判定部22は、更新部25により更新通知を受けると、並行合成部21に対して、各部分オートマトンおよび差分オートマトンの並行結合演算（あるいは最新の合成オートマトンと差分オートマトンとの並行結合演算）を指示し、並行結合により生成された合成オートマトンを並行合成部21から受け取る。判定部22は、合成オートマトンと元々のオートマトンとが双模倣の関係(後述)にあるか否かを判定する。判定部22は、両者が双模倣の関係にあるときは(判定結果=OK)、一時記憶部26内の部分オートマトンおよび差分オートマトンをプロパティ変換部14に出力するように制御する。双模倣の関係にないときは(判定結果=NG)、まだ着目していないNG遷移に対する差分オートマトンを計算するように差分計算部24に指示する。
【００２６】
連係制約計算部13は、並行合成部21、判定部22、禁止遷移計算部23、差分計算部24、更新部25を連動させて、元々のオートマトンTと、分割部12で得た部分オートマトンとの差分を表す差分オートマトンを取得するための制御を行う。具体的に、連係制約計算部13は、(A)差分計算部24に対してまだ選択(着目)していない1つの禁止遷移の選択を指示し、(B)選択した禁止遷移に対して差分計算部24による処理を行って差分オートマトンを取得し、(C)これまで得られた差分オートマトンと、合成オートマトンまたは複数の部分オートマトンとを並行合成部21により並行結合し、並行結合により得られたオートマトンとオートマトンTとが双模倣の関係にあるかを判定部22により判定し、双模倣の関係にあるときは部分オートマトンとこれまでに取得された差分オートマトンとをプロパティ変換部14に送出し、(D)双模倣の関係にないと判断されたときは(A)〜(C)を再度行う。
【００２７】
プロパティ変換部14は、一時記憶部26から送られた部分オートマトンと差分オートマトンを、時相論理式等によるプロパティ記述に変換し、当該プロパティ記述を記憶装置15に格納する。
【００２８】
テストケース生成部16は、システムにおける複数の部品のそれぞれ毎に、複数の状態と、入力アクションの発生に起因する状態間の遷移と、前記遷移の際に発生する出力アクションとを記述したモデル（部品モデル）を読み込む。テストケース生成部16は、記憶装置15における部分オートマトンと差分オートマトン（またはそれぞれに対応するプロパティ記述）と、各モデルとに基づき、システムに対する複数の入力アクションを含むテストケースを生成する。
【００２９】
たとえばテストケース生成部16は、上記複数の部品のそれぞれのモデルの遷移を各部品に対応する部分オートマトン（または対応するプロパティ記述）により制限し、各制限されたモデルの遷移をすべて網羅するように順次辿ることにより各部品のそれぞれに対して複数の入力アクションを含むテストケースを生成する。また各制限されたモデルを並行結合し、並行結合されたモデルの遷移を差分オートマトン（または対応するプロパティ記述）により制限し、制限されたモデルの遷移をすべて網羅するように順次辿ることにより、各部品の組合せテストのための、複数の入力アクションを含むテストケースを生成する。これらにより得られたすべてのテストケースが上記システムに対するテストケースに相当する。
【００３０】
以下、具体例を用いて、図1の装置についてさらに詳細に説明する。
【００３１】
<モデルの説明>
図2は、図1の装置が対象とするシステムのモデルを表している。
【００３２】
このモデルは、互いに結合されたクルーズ制御部(CruiseController)31およびエンジン制御部(エンジン制御部)41を含む。クルーズ制御部31およびエンジン制御部41はそれぞれ部品モデルに相当する。
【００３３】
クルーズ制御部31とエンジン制御部41はアクションeon,eoff,activate,deactivateを介して互いに結合され、また外部からそれぞれ入力アクションが入力される。
【００３４】
クルーズ制御部31に対する外部からの入力アクションはCruiseとBrakeであり、エンジン制御部41に対する外部からの入力アクションはEngineOnとEngineOffである。
【００３５】
またeon,eoffはエンジン制御部41の出力アクションであると同時にクルーズ制御部31の入力アクションである。activate,deactivateはクルーズ制御部31の出力アクションであると同時にエンジン制御部41の入力アクションである。
【００３６】
クルーズ制御部31とエンジン制御部41の動作は、ここではオートマトンとして定義されており、図2では"アクション？"が入力アクションを、"アクション!"が出力アクションを表している。内側に数字が記入された○は状態を表し、2つの○間の矢印は、該当するアクションによる状態遷移を表している。入力アクションはハッチングの付されていない○の状態で発生し、出力アクションはハッチング付きの○の状態で発生する。ハッチング付き○の状態では、入力アクションは発生せず、該当する出力アクションのみが発生して、次の状態に遷移する。クルーズ制御部31とエンジン制御部41の各モデル（オートマトン）は、複数の状態と、入力アクションの発生に起因する状態間の遷移と、遷移の際に発生する出力アクションとを含んでいる。
【００３７】
<オートマトン変換部11>
図3はオートマトン変換部11の動作例を示している。
【００３８】
オートマトン変換部11は、入力アクション={EngineOn,EngineOff,Cruise,Brake}のプロパティJを外部の記憶装置またはユーザ入力手段から読み出し、プロパティJをオートマトンTに変換する。プロパティJはプロセス定義式の形式(「非特許文献5」参照)で記述されている。
【００３９】
プロセス定義式は、プロセス代数において、イベントに対するプロセスの動作仕様を
"P=T(P1,P2,..)"
形式の再帰方程式で表現したものである。
【００４０】
ここでP,P1,P2,...はプロセス変数であり、Tはイベントを係数とするプロセス変数の多項式である。
【００４１】
オートマトン<S,S0,A,δ>は、状態集合S、初期状態S0∈S、アクション集合A、遷移関数δ:S×A→Sにより、アクションに対するプロセスの動作仕様を定義する形式である。
【００４２】
プロセス変数を状態、イベントをアクションに対応づけることにより、プロセス定義式をオートマトン形式に変換することができる。
【００４３】
本実施例では、以下のプロセス定義式により記述されたプロパティJが、EngineOn,EngineOff,Cruise,Brakeイベントに対するプロセス動作の仕様として与えられる。X,Y,Zがプロセス変数である。
o---------------------------------------o
X = EngineOn.Y
Y = Cruise.Z + EngineOff.X
Z = Brake.Y
o---------------------------------------o
【００４４】
このプロセス定義式がオートマトン変換部11により以下のオートマトンT=<S,S0,Act,δ>に変換される(図3参照)。
o-------------------------------------------------o
S={X,Y,Z},
S0=X,
Act = { EngineOn,EngineOff,Cruise,Brake}
δ= {(X,EngineOn,Y),(Y,Cruise,Z),(Y,EngineOff,X),
(Z,Brake,Y)}
o-------------------------------------------------o
【００４５】
なおプロパティがプロセス定義式でなく、時相論理形式で表現される場合は、オートマトン変換部は、これを非特許文献3にあるような手法にてオートマトンに変換すればよい。
【００４６】
<分割部>
図4は分割部12の動作を説明する図である。
【００４７】
分割部12は、外部の記憶装置またはユーザ入力手段から部品構成情報Uを読み出し、当該部品構成情報Uに従って、オートマトンTを各部品に対応する複数の部分オートマトンに分割する。部品構成情報Uは、オートマトン<S,S0,Act,δ>に関わるイベント(Act)のグループ分けを示したものである。
【００４８】
本例での部品構成情報Uは、システムの下位部品の構造(クルーズ制御部とエンジン制御部)に従って、イベント(Act)を以下のように2つにグループ分けしたものである。
部品構成情報U={{EngineOn,EngineOff},{Cruise,Brake}}
【００４９】
部品構成情報Uに基づいて行うオートマトンTの分割は、着目するイベント変数に対する射影演算で実現される。射影演算とは、着目するイベント以外のイベント遷移をε遷移に置換し、さらにε遷移を削除するようにオートマトンTを書き換えることにより、着目するイベント（アクション）のみで遷移が構成されるオートマトンを得る演算のことである。
【００５０】
図5は、分割部12による処理手順の詳細を示すフローチャートである。上記射影演算はS12〜S16の処理に相当する。
【００５１】
[1]部品構成情報から、1つの部品に対応するイベント組合せ(グループ)を選択する(S11)。
[2]オートマトンTに含まれるイベント遷移（アクション遷移）のうち、選択した組合せに含まれないイベント遷移をすべてε遷移に書き換える(S12)。
[3]以下の手順でε遷移を削除する。
[3-1]全てのε遷移(a,ε,b)に対して以下を行う(S13)。aは遷移元状態、bは遷移先状態を示す。
[3-2]ε遷移から次の遷移を辿り、ε遷移でない遷移(x,y,z)に遭遇するまでこれを続ける(S14)。
[3-3]連続して辿われた全てのε遷移(a,ε,b)を遷移関数δから削除する(S15)。
[3-4]新たな遷移(a,y,z)を作成し、遷移関数δに登録する(S16)。
[3-5]遷移関数δにε遷移が無くなるまで、S14〜S16を繰り返す。
【００５２】
本実施例では、オートマトンTは、図5に従った処理により、クルーズ制御部31に対する部分オートマトンと、エンジン制御部41に対する部分オートマトンに分割される(図4参照)。
【００５３】
以下、クルーズ制御部31に関する部分オートマトンを得る例を詳細に示す。
【００５４】
クルーズ制御部31に関するイベント（アクション）組合せである{Cruise,Brake}を部品構成情報から選択し(S11)、オートマトンTにおいて{Cruise,Brake}に関係のないイベント遷移をε遷移に書き換えると以下のようになる(S12)。
o---------------------------------------o
S={X,Y,Z},
S0=X,
Act = {Cruise,Brake}
δ= {(X,ε,Y),(Y,Cruise,Z),(Y,ε,X),
(Z,Brake,Y)}
o---------------------------------------o
【００５５】
次に例えばε遷移(X,ε,Y)を選択し、遷移を辿ると
(X,ε,Y)→(Y,Cruise,Z)
により、ε遷移でない遷移(Y,Cruise,Z)に遭遇する(S14)。よって (X,ε,Y)をδから削除するとともに(S15)、新たな遷移
(X,Cruise,Z)
を作成して、δに登録する(S16)。
【００５６】
またε遷移(Y,ε,X)を選択し、遷移を辿ると
(Y,ε,X)→(X,Cruise,Z)
により、ε遷移でない遷移(Y,Cruise,Z)に遭遇する(S14)。よって (Y,ε,X)をδから削除するとともに(S15)、新たな遷移
(X,Cruise,Z)
を作成して、δに登録する(S16)(ただし(X,Cruise,Z)は既に存在するため登録を省略することとする)。
【００５７】
以上により以下を得る。
o---------------------------------------o
S={X,Y,Z},
S0=X,
Act = {Cruise,Brake}
δ= {(Y,Cruise,Z),(X,Cruise,Z),
(Z,Brake,Y)}
o---------------------------------------o
【００５８】
ここで、初期状態をYにすれば、簡約化が可能(すなわちXへの遷移はあり得ないためXを削除可能)であるので、この簡略化により以下のように、クルーズ制御部31に対する部分オートマトンP0を得る。ここで  YをP0,ZをP1と読み替えた。この部分オートマトンを状態遷移図形式で示すと図4の左下のようになる。矩形の枠で囲まれた状態は初期状態である。
o---------------------------------------o
S={P0,P1},
S0=P0,
Act = {Cruise,Brake}
δ= {(P0,Cruise,P1),(P1,Brake,P0)}
o---------------------------------------o
クルーズ制御部に対する部分オートマトンP0
【００５９】
エンジン制御部41に対しても、該当するイベント組合せ{EngineOn,EngineOff}に基づき上記と同様に計算を行うことでエンジン制御部31に対する部分オートマトンQ0が以下のように得られる。この部分オートマトンを状態遷移図形式で示すと図4の右下のようになる。
o---------------------------------------o
S={Q0,Q1},
S0=Q0,
Act = {EngineOn,EngineOff}
δ= {(Q0,EngineOn,Q1),(Q1,EngineOff,Q0)}
o---------------------------------------o
エンジン制御部に対する部分オートマトンQ0
【００６０】
本例では、部品構成情報として、全てのグループ分けの和集合をとると全体が構成できるという意味で、完全なグループ分けが提示されたが、部品構成情報が完全でない場合(例：1つの部品に対するグループしか提示されない場合)には、全体として与えられたイベント（アクション）群との差分を、残りの部品または部品群に対するグループとして計算すればよい。
【００６１】
<連係制約計算部>
連係制約計算部13は、並行合成部21、判定部22、禁止遷移計算部23、差分計算部24、更新部25を連動させて、元々のオートマトンTと、分割部12で得た部分オートマトンとの差分を表す差分オートマトンを取得するための制御を行う。差分オートマトンは、各部分オートマトンと並行結合すると元々のオートマトンTと（双模倣関係という意味で）等価となる。
【００６２】
図6は、連係制約計算部13による処理手順の概略を示すフローチャートである。
【００６３】
連係制約計算部13は、元のオートマトンTと、分割部で得た部分オートマトンの集合{A_0,..,A_n}とを入力として用いる。部分オートマトンの集合{A_0,..,A_n}は一時記憶部26に記憶される。
【００６４】
[1]並行合成部21で、複数の部分オートマトンの並行結合(A_0||A_1||..A_n)を計算することにより合成オートマトンを得る(S21)。
[2]判定部22によりオートマトンTと合成オートマトンとを比較する(S22)。
[3] オートマトンTと合成オートマトンとが双模倣の関係にあれば(S23のYES)、一時記憶部26内のデータをプロパティ変換部14に送出して(S24)、本フローの処理を終了する。
[4]双模倣の関係にない場合は(NO)、禁止遷移計算部23により、オートマトンTに対する合成オートマトンの禁止遷移(M_NG)を計算し、禁止遷移(M_NG)にNGラベルを付した禁止遷移付きオートマトンを得る(S25)。 
[5]差分計算部24により、禁止遷移付きオートマトンM_NGに基づき、ある禁止遷移に着目して差分オートマトンを計算する(S26)。
[6]更新部25により差分オートマトンを一時記憶部26に追加する(S27)。
[7]並行合成部21により合成オートマトンと差分オートマトンの並行結合を計算することにより合成オートマトンを得る(S28)。
[8] オートマトンTと合成オートマトンとが双模倣の関係にあれば(S29のYES)、一時記憶部26内のデータをプロパティ変換部14に送出して(S24)、本フローの処理を終了する。
[9]双模倣の関係にないときは(S29のNO)、差分計算部24により、まだ着目(選択)していない禁止遷移に対する差分オートマトンを計算し(S30)、ステップS27へ戻る。
【００６５】
以下、並行合成部21、判定部22、禁止遷移部23、差分計算部24の動作をさらに詳細に説明する。
【００６６】
<並行合成部>
図7は並行合成部21の動作を説明する図である。
【００６７】
並行合成部21は、複数の部分オートマトンの直積を計算(並行結合演算)して、1つの合成オートマトンを得る。各部分オートマトン間で共通に含まれるアクションは同期実行されるものとして取り扱う。図7の上に、各部品に対応する2つの部分オートマトンを示し、図7の下に、2つの部分オートマトンの並行結合により得られた合成オートマトンを示す。
【００６８】
図8は、並行合成部21の動作手順を示すフローチャートである。なお並行合成部21は合成オートマトンと差分オートマトンの並行結合演算を実行する際も、以下の手順に従って演算を行えばよい。
【００６９】
[1]N個の部分オートマトンのうち、互いに結合された2つの部分オートマトンを選択する(S41)。選択した2つの部分オートマトンを、ここでは部分オートマトンAおよび部分オートマトンBとする。
A=<S_A,S0_A,Act_A,δ_A>, B=<S_B,S0_B,Act_B,δ_B>
[2]2つの部分オートマトンの並行結合(A||B)を計算する。並行結合は以下の[2-1]〜[2-3]に従う。
[2-1]部分オートマトンA,Bの状態を組み合わせて状態対を生成することにより並行結合結果(合成オートマトン)における状態(合成状態)を得る(S42)。すなわち並行結合結果の状態S_(A||B)はS_A×S_Bである。また並行結合結果のおける初期状態は(S0_A,S0_B)である。
[2-2]部分オートマトンA,Bのアクションの和集合をとることにより並行結合結果におけるアクションを得る(S43)。すなわち並行結合結果のアクションAct_(A||B)はAct_A∪Act_Bである。
[2-3]以下のルール1〜3に従って並行結合結果における状態遷移を得る(S44)。
ここでShared(A,B)はA,Bに共通するアクションの集合を指す。なおルール1およびルール2のifは2つの条件を∧(AND)で結合しており、ルール3のifは3つの条件を2つの∧(AND)で結合している。
ルール1:δ((x,y),a,(x',y)), if (x,a,x')∈δA∧¬(a∈Shared(A,B))
ルール2:δ((x,y),a,(x,y')), if (y,a,y')∈δB∧¬(a∈Shared(A,B))
ルール3:δ((x,y),a,(x',y')), if (y,a,y')∈δB∧(x,a,x')∈δA
∧(a∈Shared(A,B))
[3] S42〜S44で得られた結果は合成オートマトンに相当する(S45)。3つ以上の部分オートマトンが存在する場合は(S46のYES)、S45で得た合成オートマトンと、まだ選択されていない部分オートマトンCとを対象として[1]、[2]と同様の手順を繰り返し行う(S47)。たとえば部分オートマトンAおよび部分オートマトンBをそれぞれ、合成オートマトン、部分オートマトンCと読み替えて同様の処理を行えばよい。このようにして最終的に1つの合成オートマトンを得る(S48)。なおステップS46ですべての部分オートマトンが選択されたと判定された場合は（NO）、このときの合成オートマトンを最終的なものとして得る（S48）。
【００７０】
本例では、クルーズ制御部31に対する部分オートマトンと、エンジン制御部41に対する部分オートマトンを並行結合して1つの合成オートマトンを得る。ここで、クルーズ制御部31に対する部分オートマトンと、エンジン制御部41に対する部分オートマトンはアクションを共有しない(Shared(EngineController,CruiseContoller)=Φ)ため、これらの並行結合は単純な直積演算と同じになる(ルール3は適用されない)。
【００７１】
以下、クルーズ制御部31に対する部分オートマトンと、エンジン制御部41に対する部分オートマトンとを並行結合する例を示す。
【００７２】
ただし簡単のため、クルーズ制御部31に対する部分オートマトンにおける状態P0を状態0、状態P1を状態1に変更し、エンジン制御部41に対する部分オートマトンにおける状態Q0を状態0,状態Q1を状態1に変更する。このことを以下に示す。
o---------------------------------------o
SP={0,1},
SP0=0,
ActP = {Cruise,Brake}
δ= {(0,Cruise,1),(1,Brake,0)}
o---------------------------------------o
クルーズ制御部31に対する部分オートマトン
o---------------------------------------o
SQ={0,1},
SQ0=0,
ActQ = {EngineOn,EngineOff}
δ= {(0,EngineOn,1),(1,EngineOff,0)}
o---------------------------------------o
エンジン制御部41に対する部分オートマトン
【００７３】
まず2つの部分オートマトン、すなわちクルーズ制御部31に対する部分オートマトンと、エンジン制御部41に対する部分オートマトンとを選択する(ステップS41)。
【００７４】
次に、ステップS42での演算により、合成状態の集合Sとして、
SP×SQ={(0,0),(1,0),(0,1),(1,1)}
を得る。初期状態はS0 = (0,0)である。
【００７５】
また、ステップS43の演算により、アクションActとして
Act = {Cruise,Brake,EngineOn,EngineOff}
を得る。
【００７６】
またステップS44の演算では、上記2つの部分オートマトンが共有するアクションが無い(Shared(A,B)=φ)ため、遷移関数δは、ルール1およびルール2のみを適用して得ることができる。
【００７７】
3つ目の部分オートマトンは存在しないため(S46のNO)、最終的に以下の合成オートマトンが得られる。図7の下に、当該合成オートマトンの状態遷移図形式を示す。
o---------------------------------------o
S={(0,0),(1,0),(0,1),(1,1)}
S0 = (0,0)
Act = {Cruise,Brake,EngineOn,EngineOff}
δ={((0,0), EngineOn,(0,1)),
((0,0), Cruise,(1,0)),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,0), EngineOn,(1,1)),
((1,0), Brake,(0,0)),
((1,1), Brake,(0,1)),
((1,1), EngineOff,(1,0))}
o---------------------------------------o
並行結合演算により得られた合成オートマトン
【００７８】
<禁止遷移計算部>
図9は禁止遷移計算部23の動作を説明する図である。
【００７９】
禁止遷移計算部23は、2つのオートマトンが与えられたときに、これらの2つのオートマトン間で矛盾する遷移である禁止遷移を計算する。ここでは、図9に示すように、2つのオートマトンとして、元々のオートマトンTと、合成オートマトンとを与え、合成オートマトンに含まれる禁止遷移(オートマトンTと矛盾する遷移)を計算し、合成オートマトンに対して禁止遷移の情報（ラベル）を付与したNG(禁止遷移)付きオートマトンを得る。
【００８０】
図10は、禁止遷移計算部23による処理手順の一例を示すフローチャートである。
【００８１】
このフローでは、オートマトンA=<SA,SA0,ActA,δA>をオートマトンB=<SB,SB0,ActB,δB>と照らし合わせて矛盾する遷移を計算し、オートマトンAにおける禁止遷移を得る例を示す。前提として、オートマトンAにおけるアクション集合ActAが、オートマトンBにおけるアクション集合ActBを含むものとする。
【００８２】
[1]オートマトンAの遷移関数δAおよびオートマトンBの遷移関数δBに基づき、合成された遷移関数δを得る(S51)。すなわち遷移関数δAおよびδB間で、同じアクションをもつ状態遷移を1つずつ選択して組み合わせることにより、<遷移元が各状態遷移の遷移元状態の組（tuple）、該状態遷移、遷移先が各状態遷移の遷移先状態の組（tuple）>の要素を含む、遷移関数δを得る。
[2]初期状態から辿ることのできる到達可能遷移の部分集合GOODを遷移関数δから得る(S52)。
[3] 初期状態から辿ることのできない到達不能遷移の部分集合NOGOODを遷移関数δから得る(S53)。
[4]オートマトンBの状態を無視したときに、部分集合GOODの到達可能遷移と遷移元がパターンマッチする到達不能遷移を部分集合NOGOODにおいて特定する(S54)。
[5]パターンマッチした到達不能遷移の遷移元からオートマトンBの状態を削除するとともに、遷移先の状態をNGに置き換えることにより、禁止遷移(NG遷移)を得る(S55)。
[6]オートマトンAに対してNG遷移の情報を付与することによりNG遷移付きオートマトンを得る(S56)。
【００８３】
ここでは、合成オートマトンをオートマトンA、元々のオートマトンTをオートマトンBと読み替えて上記フローの処理を行う例を示す。
【００８４】
まずステップS51では、
遷移関数δA={((0,0), EngineOn,(0,1)),
((0,0), Cruise,(1,0)),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,0), EngineOn,(1,1)),
((1,0), Brake,(0,0)),
((1,1), Brake,(0,1)),
((1,1), EngineOff,(1,0))}
遷移関数δB= {(X,EngineOn,Y),(Y,Cruise,Z),(Y,EngineOff,X),
(Z,Brake,Y)}
であるため、
これらを合成し、合成された遷移関数δとして、以下が得られる。
δ={((0,0,X), EngineOn,(0,1,Y)),
((0,0,Y), Cruise,(1,0,Z)),
((0,1,Y), EngineOff,(0,0,X)),
((0,1,Y), Cruise,(1,1,Z)),
((1,0,X), EngineOn,(1,1,Y)),
((1,0,Z), Brake,(0,0,Y)),
((1,1,Z), Brake,(0,1,Y)),
((1,1,Y), EngineOff,(1,0,X))}
【００８５】
次に、ステップS52では、初期状態=(0,0,X)から到達可能な状態を順次辿ることにより、到達可能遷移の部分集合GOODを以下のように得る。
GOOD={
((0,0,X), EngineOn,(0,1,Y)),
((0,1,Y), EngineOff,(0,0,X)),
((0,1,Y), Cruise,(1,1,Z)),
((1,1,Z), Brake,(0,1,Y))}
【００８６】
また、ステップS53では、到達不能遷移の部分集合NOGOOGを以下のように得る。
NOGOOD={
((0,0,Y), Cruise,(1,0,Z)),
((1,0,X), EngineOn,(1,1,Y)),
((1,0,Z), Brake,(0,0,Y)),
((1,1,Y), EngineOff,(1,0,X))}
【００８７】
次のステップS54では、遷移元のX,Y,Z(オートマトンBの遷移元状態)を*(任意)に置換したときに、すなわち遷移元のX,Y,Zを無視したときに、到達可能遷移と遷移元がパターンマッチする到達不能遷移を求めると、以下の2つが得られる。
((0,0,Y), Cruise,(1,0,Z))
((1,1,Y), EngineOff,(1,0,X))
【００８８】
すなわち((0,0,Y), Cruise,(1,0,Z)) の遷移元(0,0,Y)のYを*にした(0,0,*)は、GOODにおける((0,0,X), EngineOn,(0,1,Y))の(0,0,X)にパターンマッチし、また((1,1,Y), EngineOff,(1,0,X))の遷移元(1,1,Y)のYを*にした(1,1,*)は, GOODにおける((1,1,Z), Brake,(0,1,Y))の遷移元(1,1,Z)にパターンマッチする。
【００８９】
次のステップS55では、パターンマッチした到達不能遷移((0,0,Y), Cruise,(1,0,Z)), ((1,1,Y), EngineOff,(1,0,X))のそれぞれにおいて、オートマトンBの状態を遷移元から削除するとともに、遷移先状態を“NG”に置き換えることにより、以下のNG遷移の集合を得る。すなわち、状態(0,0)からのCruise遷移と、状態(1,1)からのEngineOff遷移とがNGとして計算される。
{((0,0), Cruise, NG)、((1,1), EngineOff, NG)}
【００９０】
なお、到達不能遷移のうちNG遷移以外の遷移は、NG遷移を前提とした遷移である。すなわちNG遷移が起こらなければ、当該遷移も起こらない。
【００９１】
この後、禁止遷移計算部23は、合成オートマトンAに対してNG遷移の情報を付与したNG遷移付きオートマトンM_NGを計算する(S56)。NG遷移付きオートマトンM_NGの遷移δA_NGを以下に示す。遷移先状態が"NG"である遷移が禁止遷移(NG遷移)である。元々のAの遷移において、NG遷移と遷移元が同じものを、NG遷移で入れ替える。
δA_NG={((0,0), EngineOn,(0,1)),
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,0), EngineOn,(1,1)),
((1,0), Brake,(0,0)),
((1,1), Brake,(0,1)),
((1,1), EngineOff,NG)}
【００９２】
<差分計算部>
図11は、差分計算部24の動作例を示す。
【００９３】
差分計算部24は、NG遷移付きオートマトンM_NGのNG遷移に対し当該NG遷移を抑制するような最大の部分オートマトン(差分オートマトン)を計算する。図11の例では、NG遷移Cruiseに対して差分オートマトンA_EngineOn、NG遷移EnginOffに対して差分オートマトンA_Brakeが得られた例が示される。以下、図12を用いて差分計算部24の詳細な動作例を示す。
【００９４】
図12は、差分計算部24による処理の手順の一例を示すフローチャートである。
【００９５】
NG遷移付きオートマトンM_NGに含まれるNG遷移に対して以下の手順を実行することにより当該NG遷移に対する差分オートマトンを得る。
【００９６】
[1]まだ選択されていないNG遷移(tとする)を1つ選択する(S61)。選択の基準はランダムでもよいし、ユーザが入力手段を介して指定してもよいし、指定の優先順位を記述したデータを与えることでもよい。
[2]選択されたNG遷移t以外の到達不能遷移(選択されていない他のNG遷移も含む)を削除する(S62)。
[3]選択されたNG遷移tのアクションa以外のアクションbを任意に選択して捨象する(S63)。すなわち、アクションbをεに書き換え、分割部12の手順[3](S13〜S16)を用いてε遷移を削除する。
[4]同一の状態からアクションaのNG遷移と、到達可能遷移との両方生じる場合(捨象した結果が矛盾を含む場合)(S64のYES)は、S63で行った捨象は失敗と判断する。この場合当該捨象を無効化する(ステップS63の直前の状態に戻り)(S65)。この後、アクションa以外のすべてのアクションのうちまだ選択していないアクションがあるときは(S67のNO)、別のアクションを選択する(S63)。
[5]矛盾が含まれない場合(S64のNO)、成功と判断して当該捨象を維持(有効化)し(S66)、上記ε遷移が削除されたオートマトンに対して、まだ選択されていない別のアクションcを選択および捨象し(S63)、以降、アクションa以外のすべてのアクションについて処理が完了するまでS63〜S66を繰り返す。アクションa以外のすべてのアクションについて処理が終わったら(S67のYES)、このときのオートマトンを差分オートマトンA_aとして得る(S68)。または、構成の簡素化のため、NG遷移ｔを当該オートマトンから削除してもよい。
【００９７】
以下、図13を参照して、具体例を示す。
【００９８】
本例では、NG遷移付きオートマトンM_NGのNG遷移δA_NGは以下の2つである。
((0,0), Cruise,NG),
((1,1), EngineOff,NG)
【００９９】
[1]最初にNG遷移="((0,0), Cruise,NG)"を選択する(S61)。
[2]選択されたNG遷移t以外の到達不能遷移を削除する(S62)。
選択されたNG遷移t以外の到達不能遷移を削除すると以下が得られる。
{((0,0), EngineOn,(0,1)),
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,1), Brake,(0,1))}
[3]Cruise以外のアクションであるEngineOnを捨象する(S63)。
【０１００】
より詳細には、まずEngineOnをε遷移に置き換える。
{((0,0), ε,(0,1)),
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,1), Brake,(0,1))}
【０１０１】
次に分割部の手順[3]に従いε遷移を削除すると以下を得る。
{((0,0), EngineOff,(0,0)),
((0,0), Cruise,(1,1))
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,1), Brake,(0,1)),
【０１０２】
これは状態=(0,0)からのCruise遷移がNGと(1,1)両方に出ているので矛盾である(S64のYES)。従ってこの捨象は失敗であり、無効化する(S65)。この失敗の様子を図13(A)に示す。
【０１０３】
またステップS62でEngineOffを削除しても、同様に矛盾が生じ、この捨象は失敗である(S64のYES、S65)。この失敗の様子を図13(B)に示す。
【０１０４】
一方ステップS62においてBrakeを削除した場合は、以下の通りである。
【０１０５】
Brakeをε遷移に置き換える。
{((0,0), EngineOn,(0,1)),
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,1), ε,(0,1))}
【０１０６】
ε遷移を削除すると以下のようになる。
{((0,0), EngineOn,(0,1)),
((0,0), Cruise,NG),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,1), EngineOff,(0,0)),
((1,1), Cruise,(1,1))}
【０１０７】
よって、矛盾は生じず(S64のNO)、捨象は成功したと判断する(S66)。
【０１０８】
この状態のオートマトンからNG遷移ｔを削除して構成を簡素化すると以下の差分オートマトンA_Brakeを得る。図13(C)に、NG遷移ｔの削除前のオートマトンを状態遷移図として示す。NG遷移ｔの削除前のオートマトンを差分オートマトンとして取得してもよい。
o---------------------------------------o
S={0,1}
S0 = 0
Act = {Cruise,EngineOn,EngineOff}
δ={(0, EngineOn,1),
(1, EngineOff,0),
(1, Cruise,1)}
o---------------------------------------o
差分オートマトンA_Brake
【０１０９】
一方、ステップS61で"((1,1), EngineOff,NG)"を選択する場合には以下のようになる。すなわち、CruiseまたはBrakeの捨象は図14(B)または図14(C)のように失敗し、EngineOnの捨象のみが成功する。EngineOnの捨象により以下の差分オートマトンA_EngineOnを得る。図14(A)にこの差分オートマトンを状態遷移図形式で示す。
o---------------------------------------o
S={0,1}
S0 = 0
Act = {Cruise,Brake,EngineOff}
δ={(0, EngineOff,0),
(0, Cruise,1),
(1, Brake,0)}
o---------------------------------------o
差分オートマトンA_EngineOn
【０１１０】
<更新部>
更新部25は、差分計算部24により得られた差分オートマトンを一時記憶部26に追加することにより一時記憶部26を更新する。また更新部25は、一時記憶部26の更新の旨を判定部22に通知する。
【０１１１】
<判定部>
図15は判定部22の動作例を示す。
【０１１２】
判定部22は、与えられた2つのオートマトンが双模倣の関係にあるか否かを判定する。
【０１１３】
ここで双模倣性とは、以下のように定義できる。双模倣性の判定手順は非特許文献5等に記されている。双模倣性はオートマトン同士の等価性の判定基準の代表的な性質である。
o--------------------------------------------------------------o
2つのオートマトンの状態集合をS,Tとするとき、この2つのオートマトン
が双模倣であるとは、以下の双模倣関係が成り立つことである。
s, s'∈S, t, t'∈T、双模倣を与える関係をR⊆S×T、
遷移(1ステップ)を矢印で表す。また xRx' を x〜x' で示す。
1) s〜t, t→t' ならば、s'〜t', s→s' となるs'がS内にある。
2) s〜t, s→s' ならば、s'〜t', s→s' となるt'がT内にある。
o--------------------------------------------------------------o
双模倣性の定義
【０１１４】
本実施形態では、判定部22は、合成オートマトン(部分オートマトンと差分オートマトンとの合成オートマトン、または、複数の部分オートマトンの合成オートマトン)と元々のオートマトンとが双模倣の関係にあるか否かを判定する。すなわち合成により元々のオートマトンと同値のオートマトンが復帰できるか否かを判定する。
【０１１５】
判定部22は、両者が双模倣の関係にあるときは(判定結果=OK)、一時記憶部26内の部分オートマトンおよび差分オートマトンをプロパティ変換部14に出力するように制御する。双模倣の関係にないときは(判定結果=NG)、まだ処理(選択)していないNG遷移に対する差分オートマトンを計算するように連係制約計算部13の制御の元、差分計算部24に指示が送られる。
【０１１６】
なお、すべてのNG遷移に対する差分オートマトンが計算済みであるとき、これらの差分オートマトンと部分オートマトンとを並行合成して得られる合成オートマトンは、元々のオートマトンの必ず双模倣の関係になる。したがって、すべてのNG遷移に対する差分オートマトンが得られた際には、判定部22の処理を省略してもよい。
【０１１７】
また、一部のNG遷移に対する差分オートマトンと部分オートマトンとの合成結果が元々のオートマトンの双模倣の関係になるときとしては、NG遷移同士に依存性があり、一方のNG遷移を抑制する差分オートマトンが結果として、別のNG遷移を抑制する場合がある。
【０１１８】
本例では分割部12により得られた部分オートマトンの集合{P0,Q0}と、差分オートマトンA_BrakeおよびA_EngineOnのうちいずれか一方のみとの合成では、双模倣の関係は得られない。部分オートマトンの集合{P0,Q0}と、すべてのNG遷移に対する差分オートマトン(A_Brake、A_EngineOn)とを合成したときのみ双模倣の関係が得られる。以下、部分オートマトンの集合{P0,Q0}と、差分オートマトン(A_Brake、A_EngineOn)との合成により双模倣の関係が得られることを詳細に示す。
【０１１９】
一時記憶部26に差分オートマトン(A_Brake、A_EngineOn)が記憶されており、連係制約計算部13の制御の元、並行合成部21に合成指示が送られると、並行合成部21により以下のように並行結合演算が行われる。Mは、並行結合により得られる合成オートマトンを示す。
M= P0||Q0||A_Brake||A_EngineOn
P0||Q0は図7に示した合成オートマトンに相当し、これを“A”として表すと、
M=A||A_Brake||A_EngineOn
となる。
【０１２０】
合成オートマトンにおける状態の集合Sは、以下となる。
SA×SA_Brake×SA_EngineOn=
{(s0,s1,s2,s3)|(s0,s1)∈SA, s2∈SA_Brake, s3=SA_EngineOn}
状態の初期値は、(0,0,0,0)である。
【０１２１】
また、合成オートマトンA、差分オートマトンA_Brake、A_EngineOnの遷移関係は以下の通りである。
δA={((0,0), EngineOn,(0,1)),
((0,0), Cruise,(1,0)),
((0,1), EngineOff,(0,0)),
((0,1), Cruise,(1,1)),
((1,0), EngineOn,(1,1)),
((1,0), Brake,(0,0)),
((1,1), Brake,(0,1)),
((1,1), EngineOff,(1,0))}
δA_Brake={(0, EngineOn,1),
(1, EngineOff,0),
(1, Cruise,1)}
δA_EngineOn={(0, EngineOff,0),
(0, Cruise,1),
(1, Brake,0)}
【０１２２】
合成オートマトンにおける遷移関係を計算し、初期状態から到達不能な遷移を削除すると以下の遷移の集合を得る。
δM={
((0,0,0,0), EngineOn,(0,1,1,0)),
((0,1,1,0), EngineOff,(0,0,0,0)),
((0,1,1,0), Cruise,(1,1,1,1)),
((1,1,1,1), Brake,(0,1,1,0)),
}
【０１２３】
元々のオートマトンTの遷移集合は
δ= {(X,EngineOn,Y),(Y,Cruise,Z),(Y,EngineOff,X),(Z,Brake,Y)}
であったから、(0,0,0,0)=X, (0,1,1,0)=Y, (1,1,1,1)=Zと置き換えると、合成オートマトンと元々のオートマトンTの遷移集合はそれぞれ同一になる。よって、合成オートマトンと元々のオートマトンTとの間には双模倣関係が成り立ち、判定結果はOKになる。
【０１２４】
<変形例>
これまでの説明において、差分計算部24では一回の処理で1つのNG遷移に対する1つの差分オートマトンのみを生成したが、すべてのNG遷移に対して図12の処理を繰り返し行うことにより、すべてのNG遷移に対する個々の差分オートマトンを一度に生成してもよい。この場合、判定部22の処理を省略し(判定結果は上記したように必ずOKであるため)、差分計算部24の処理が終わり次第、生成した差分オートマトンと、部分オートマトンをプロパティ変換部14に出力してもよい。なおNG遷移が複数存在するときは、NG遷移毎の処理のため各NG遷移に対応してNG遷移付きオートマトンM_NGのコピーを生成しておいてもよい。
【０１２５】
<プロパティ変換部>
図16はプロパティ変換部14の例を示す。
【０１２６】
プロパティ変換部14は、一時記憶部26から入力された部分オートマトンおよび差分オートマトンをそれぞれ対応するプロパティ記述(分解プロパティ)に変換する。プロパティ変換部14の演算は、オートマトン変換部11と逆の演算である。
【０１２７】
本例では、以下のように、部分オートマトンP0、部分オートマトンQ0、差分オートマトンA1、差分オートマトンA2、に対応するプロセス定義式(1)〜(4)をそれぞれ生成し、これらをプロパティ(部分プロパティ、差分プロパティ)として得る。得られたプロパティはテストケース生成部16に送出される。または、得られたプロパティは、テストケース生成部16がアクセス可能な記憶装置15に格納されてもよい。
(1)P0=Cruise.Brake.P0
(2)Q0=EngineOn.EngineOff.Q0
(3)Ra=EngineOn.Ra1、Ra1=Cruise.Ra1+EngineOff.Ra
(4)Rb=EngineOff.Rb + Cruise.Rb1、Rb1=Brake.Rb
【０１２８】
<テストケース生成部16>
テストケース生成部16は、プロパティ(部分プロパティ、差分プロパティ)と、各部品のモデルとを読み込み、個々の部品、または複数の部品の組、またはシステム全体をテストするためのテストケースの生成を行う。各部品のモデルデータはたとえばハードディスク、メモリ装置、光ディスク等の外部の記憶装置から読み込んでもよいし、ユーザから入力手段を介して読み込んでも良い。図2のシステムモデルには2つの部品モデル（クルーズ制御部31、エンジン制御部41）が含まれている。
【０１２９】
図17はテストケース生成部16の動作の流れを示すフローチャートである。以下図2のシステムに対するテストケース生成処理の流れを説明する。
【０１３０】
まず各部品モデル（クルーズ制御部31、エンジン制御部41）に対して以下の処理を行う。まずクルーズ制御部31の部品モデルの遷移を、対応する部分プロパティ(もしくは部分オートマトン)で制限し（S71）、この制限した部品モデルにおいて一筆書きですべて遷移を辿るように初期状態から入力アクションの一筆書きの遷移パスを計算することにより、クルーズ制御部31単体に対する、複数の入力アクションを含むテストケースを得る（S72）。グラフ上で最短の一筆書きを計算するには、例えば中国人郵便配達人問題(Chinese Postman Problem)等のグラフ理論のアルゴリズムを用いればよい。このようなモデル（状態遷移図、オートマトン）からテストケースを生成する方法はよく知られたものであるため、これ以上の詳細な説明は省略する。エンジン制御部41単体に対するテストケース生成も同様にして行えばよい（S71,S72）。
【０１３１】
次に、クルーズ制御部31およびエンジン制御部41を合わせた組合せ部品(システム全体)のテストケース生成を行う。より詳細には、上記単体テストの過程で生成される各制限されたモデルを合成（並行結合）する（S73）。そして、この合成されたモデルの遷移を、上記差分プロパティ（もしくは差分オートマトン）で制限し（S74）、この制限した合成モデルに基づき、初期状態からすべての遷移を一筆書きで網羅するように辿ることで、上記と同様にしてテストケースを生成する（S75）。
【０１３２】
以上のようにして生成したテストケースの集合（S72,S75で得たテストケース）をシステム（組合せ部品）に対するテストケースとして出力する（S76）。このようにすることで従来の方法に比べて、きわめて少ない計算量でのテストケース生成が可能となるとともにテストケースのサイズを小さくできる。この理由は次の<テスト技術への応用>で明らかにされる。
【０１３３】
なお3つ以上の部品が存在するときは、2つの部品間に適用される差分プロパティは各部品の入力アクションのみが含まれるものを選択すればよい。3つ以上の部品のうち2つの部品を選択した組合せ部品のテストケース生成は上述の通り行えばよい。3つの部品を組合せた組合せ部品のテストケース生成は、最初に2つの部品について上記と同様の処理を行い、この2つの部品の組を1つの部品とみなして、残りの1つの部品との間で上記と同様の処理を行えばよい。
【０１３４】
<テスト技術への応用>
ソフトウエアのテスト技術におけるモデル駆動テスト(Model driven test)では、対象となるシステムのモデル(M)が遷移系(例：オートマトン)として与えられたとき、モデルMの全ての遷移パスを網羅する最小のテストケースを生成し、生成したテストケースに基づきシステムの動作を検証する。具体的にはシステムに対しテストケースに従ってアクションを実際に与えたときに仕様通りの動作をするか否かを確認する。
【０１３５】
このとき、モデルMに対する入力アクションのパターンを限定することにより、生成されるテストケースのサイズ(入力イベント数)を制限することができる。この入力アクションのパターンの制限が、これまでに述べたプロパティ(分割部12に入力されたプロパティ、プロパティ変換部14により得られたプロパティ)に相当する。
【０１３６】
便宜上、Aをプロパティ、Mをモデル、Tをテストケースとすると、テスト生成技術はプロパティAとモデルMとに基づきテストケースTを生成する技術であり、以下のように表すことができる。
プロパティA,モデルM → (テスト生成)→  テストケースT
【０１３７】
テストケースTのサイズ|T|は、モデルMの状態数|M|に対して冪乗N(>1)であるとされており、ここでは |T| = |M|N  であるとする。
【０１３８】
複数の部品(たとえばクルーズ制御部、エンジン制御部)を階層的に組合せたシステムをテスト対象とする場合、モデル駆動テストでは、個々の部品の単体テストは、部品毎のモデルから生成されたテストケースで行い、部品の組合せテストは、部品を全て組み合わせた全体のモデル(OM)を作成しこのモデルOMからテストケースの生成を行う。
【０１３９】
一般的にオートマトンに代表される遷移系においては、部分遷移系を組合せて全体遷移系をもとめ、この全体遷移系から計算を行う場合にはいわゆる状態爆発が起きることが知られている。テスト技術においては、状態爆発は、テストケースのサイズの爆発(部品の数に対して)に相当する。
【０１４０】
例えば、各部品のモデルをM1,M2、各部品の組合せのモデル(全体モデル)をOM、全体モデルOMに対するプロパティをOAとすると、テストケース生成は以下のように表される。
プロパティOA,モデルOM -> (テスト生成) -> テストケースOT
ただしOMはM1とM2の直積である( OM = M1×M2 )。
【０１４１】
プロパティOAに対して分割部12と同じ演算を行うことにより、各モデルM1,M2の単体のプロパティA1,A2を得たとすると、モデルM1,M2個々の単体テストケースT1,T2を以下のように生成することができる。
プロパティA1、モデルM1 → (テスト生成) → テストケースT1
プロパティA2、モデルM2 → (テスト生成) → テストケースT2
【０１４２】
プロパティA1,A2は、それぞれモデルM1,M2の動作に対する制約を表したものである。よって、モデルM1,M2の動作をプロパティA1,A2により制約することにより、動作制約を反映したモデルM1', M2'を計算できる。またモデルM1', M2'を組み合わせたモデルOM’を計算できる。OM’はM1’とM2’の直積である( OM’ = M1’×M2’)。
【０１４３】
このモデルOM’は元の全体モデルOMよりも状態数が削減されたモデルとなる。モデルOM'に対するテストは、モデルM1,M2に対する単体テストが終了していることを前提にすると、組合せテストであるといえる。組合せテストにおいては元々のプロパティOAがプロパティA1,A2を含んでいるため、プロパティ0Aを直接、テストケース生成に用いることは処理の無駄である。
【０１４４】
効率よく組合せテストを行うために元々のプロパティOAからプロパティA1,A2を減算した差分プロパティOA'を取得し、この差分プロパティOA’を用いてモデルOM’に対するテストケースOT’を生成する。これは以下のように表される。
プロパティOA'、プロパティOM' →  (テスト生成)  →  テストケースOT'
【０１４５】
このテストケースOT’を用いて組合せ部品に対する検証(テスト)を行うことで効率的な組合せテストが可能となる。
【０１４６】
モデルM1',M2'が、モデルM1,M2の1/2の状態数であるとすれば、
テストケースのサイズは、|T1'|=|T1|*(1/2)N, |T2'|=|T2|*(1/2)N  と表すことができる。
モデルOM'の状態数は、モデルOMの1/4となるから、テストケースOT'の総遷移数は、|OT'|=|OT|*(1/4)Nと表すことができる。
|T1|+|T2| < |OT|、またN>1であることを考慮すると、
Total' = |OT'|+|T1'|+|T2'|
= (|T1|+|T2|)*(1/2)N+|OT|*(1/4)N 
< |OT|((1/2)N + (1/4)N) 
< |OT|*(3/4)N
【０１４７】
よって組合せ部品のテストでは、全体モデルOMおよびプロパティOAを直接用いてテストケースを生成するよりも、本実施形態を利用してテストケースを生成する方が、テスト数が少なくてすむため、全体として処理コストおよび時間コストを大きく減らすことができる。
【０１４８】
このように、本実施形態では、複数の部品を組み合わせたシステムに対して動作制限がプロパティとして与えられているとき、プロパティを個々の部品に対して分解して部分プロパティを取得するとともに、部品に跨るプロパティを差分プロパティとして計算する。部分プロパティを用いて部品毎の単体テストにおいてテストケースのサイズを抑制でき、また差分プロパティを利用して組合せテストにおけるテストケースのサイズを大きく抑制できる。
【０１４９】
<オートマトンの減算への応用>
本実施形態の応用例として、オートマトンAと、Aの部分オートマトンBが与えられたとき、部分オートマトンAから部分オートマトンBを引いた差分オートマトンEを計算することができる。
【０１５０】
差分オートマトンEと部分オートマトンBを並行結合するともとのオートマトンAが再構成できることが差分オートマトンEの要件である。このことは以下のように表すことができる。“〜”は双模倣関係を示す。 
B||E〜A
【０１５１】
部分オートマトンBに関わる部品構成情報と、オートマトンAのうち部品オートマトンB以外の部分Cの部品構成情報とを合わせた{B,C}を初期の部品構成情報(すなわち分割部12に与える部品構成情報)として連係制約計算を行えば、部分オートマトンB,Cと合成することにより元々のオートマトンAを再構成できる差分オートマトンDが計算できる。これは以下のように表すことできる。
(B||C||D〜A)
【０１５２】
差分オートマトンDが得られたら、部分オートマトンCと差分オートマトンDの並行結合演算(C||D)を行うことにより、
E=C||D=A-B  (AからBを減算したオートマトンがE)
B||E〜A      (BとEを並行結合するとAを再構成できる)
となるオートマトンEを計算できる。
【０１５３】
上述したオートマトンの減算の有効性を説明する。
【０１５４】
たとえば以下のように、部品Xと部品Yが接続され、部品Yと部品Zが接続する場合を想定する。
X  ←→  Y  ←→  Z
【０１５５】
部品Yの動作の仕様がオートマトンAで表すことができ、部品Yに対する部品Xの可能な動作をオートマトンBで表すことができるとすると、オートマトンAからオートマトンBを減算することにより、部品Zに対する部品Yの可能な動作を、オートマトン(A-B)により計算することができる。オートマトンBをAssume(部品Xの部品Yに対する入力動作の仮定)とすると、オートマトン(A-B)はGuarantee(部品Zに対する部品Yの出力の保証)であると見なすことができる。
【０１５６】
これをテスト工程に当てはめて考えると、接続する部品によって可能な動作の範囲が限定されるので、全ての可能な動作に対するテストを行わなくてもよくなる。例えば部品Yに対するテストは(本来はオートマトンA全体をテストする必要があるが)オートマトンBに関わる部分のみテストをすればよく、また部品Zに対するテストも(A-B)に関わる部分のみ行えばよく、テストの削減に寄与できる。
【０１５７】
なお以上に説明した図1のテストケース生成装置は、例えば、汎用のコンピュータ装置を基本ハードウエアとして用いることでも実現することが可能である。すなわち、図1の装置が備える各要素は、各要素の処理を行う指示を記述したプログラムをコンピュータに実行させることにより実現してもよい。このとき、テストケース生成装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ハードディスク、メモリ装置、光ディスク等の記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、一時記憶部26および記憶装置15は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現することができる。
【符号の説明】
【０１５８】
11：オートマトン変換部
12：分割部
13：連係制約計算部
14：プロパティ変換部
15：記憶装置
16：テストケース生成部
21：並行合成部
22：判定部
23：禁止遷移計算部
24：差分計算部
25：更新部
26：一時記憶部
J：プロパティ
U：部品構成情報
T：元々のオートマトン
【図１】
2011065576.tif 000003
【図２】
2011065576.tif 000004
【図３】
2011065576.tif 000005
【図４】
2011065576.tif 000006
【図５】
2011065576.tif 000007
【図６】
2011065576.tif 000008
【図７】
2011065576.tif 000009
【図８】
2011065576.tif 000010
【図９】
2011065576.tif 000011
【図１０】
2011065576.tif 000012
【図１１】
2011065576.tif 000013
【図１２】
2011065576.tif 000014
【図１３】
2011065576.tif 000015
【図１４】
2011065576.tif 000016
【図１５】
2011065576.tif 000017
【図１６】
2011065576.tif 000018
【図１７】
2011065576.tif 000019