(57)【特許請求の範囲】
【請求項１】
テストケースを生成する方法であって、
データフローダイアグラムの静的分析を実行するステップであって、前記データフローダイアグラムが要求を具体化し、少なくとも１つの入力及び少なくとも１つの出力を有し、前記データフローダイアグラムが、ブロックを含んでいて、前記ブロックそれぞれが、当該ブロックに関する入力又は出力いずれかを記述している少なくとも１つのポートを有するものと、
前記データフローダイアグラムの動的分析を実行するステップであって、
（ａ）テスト対象ブロックとしてブロックを指定するステップと、
（ｂ）前記ブロックの入力値が、前記テスト対象ブロック及び前記ブロックの期待される出力値結果に適用された場合、少なくとも１つの要求が検証されるように前記テスト対象ブロックの少なくとも１つのブロックの入力値セット及び前記テスト対象ブロックから少なくとも１つのブロックの期待される出力値セットを生成するためにテンプレートを使用するステップと、
（ｃ）対応するデータフローダイアグラムの入力値を決定するために入力経路に沿って前記ブロックの入力値を伝播するステップであって、前記入力経路が、前記データフローダイアグラムの１つ以上の入力から前記テスト対象ブロックの入力へのデータ経路を記述している一連のブロック及びアークを含むものと、
（ｄ）対応するデータフローダイアグラムの期待される出力値を決定するために出力経路に沿って前記ブロックの期待される出力値を伝播するステップであって、前記出力経路が、テスト対象ブロックの出力から前記データフローダイアグラムの１つ以上の出力へのデータ経路を記述している一連のブロック及びアークを含むものと、
（ｅ）テストベクトルを生成するために前記データフローダイアグラムの入力値と前記データフローダイアグラムの期待される出力値を結合するステップと、
（ｆ）前記データフローダイアグラム中のブロックすべてが、前記テスト対象ブロックとして指定されるまで必要に応じて異なるテスト対象ブロックを用いた動的分析を繰り返すステップと、によるものと、
前記テストベクトルをテストケースに結合するステップと、を含む方法。
【請求項２】
対応するデータフローダイアグラムの入力値を決定するために前記入力経路に沿って前記ブロックの入力値を伝播するステップが、前記入力経路に沿うブロックに関する出力から入力への伝播仕様を使用していて、対応するデータフローダイアグラムの期待される出力値を決定するために前記出力経路に沿って前記ブロックの期待される出力値を伝播するステップが、前記出力経路に沿うブロックに関する入力から出力への伝播仕様を使用することを特徴とする請求項１記載の方法。
【請求項３】
テストケースを生成する方法であって、
データフローダイアグラムの静的分析を実行するステップであって、前記データフローダイアグラムが、要求を具体化し、少なくとも１つの入力及び少なくとも１つの出力を有し、前記データフローダイアグラムが、ブロックを含んでいて、ブロックそれぞれが、前記ブロックに関する入力又は出力いずれかを記述し、データタイプ及び値の値域情報を有する少なくとも１つのポートを有するものであって、前記静的分析が、
（ｉ）タイプ及び値域の不一致を識別するために、アークによって接続されているポートのペアそれぞれの前記データタイプ及び値の値域情報を比較するステップと、
（ｉｉ）設計エラーを識別するためにあらゆるポートの値域情報を分析するステップと、を含んでいて、
前記データフローダイアグラムの動的分析を実行するステップであって、
（ａ）テスト対象ブロックとしてブロックを指定するステップと、
（ｂ）前記データフローダイアグラムの入力値が、前記データフローダイアグラム及びデータフローダイアグラムの結果として期待される出力値に適用された場合、前記テスト対象ブロックの少なくとも１つの要求が検証されるように、前記データフローダイアグラムの少なくとも１つの入力値セット及び前記データフローダイアグラムの少なくとも１つの期待される出力値セットを生成するステップと、
（ｃ）テストベクトルを生成するために前記データフローダイアグラムの入力値と前記データフローダイアグラムの期待される出力値を結合するステップと、
（ｄ）前記データフローダイアグラム中のブロックすべてが、前記テスト対象ブロックとして指定されるまで必要に応じて異なるテスト対象ブロックを用いた動的分析を繰り返すステップと、によるものと、
前記テストベクトルをテストケースに結合するステップと、を含む方法。
【発明の詳細な説明】
【背景技術】
【０００１】
「発明優先権」
本出願は、２００６年１１月２７日に提出された米国仮出願第６０／８６１，１２１号「Ｒｅｑｕｉｒｅｍｅｎｔｓ−Ｂａｓｅｄ  Ｔｅｓｔ  Ｇｅｎｅｒａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｉｇｎａｌ  Ｐｒｏｐａｇａｔｉｏｎ  ａｎｄ  Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔｉｏｎ」全体を参照することによって優先権を請求し、これを組み込む。
【０００２】
「課題説明」
アルゴリズムの実装検証は、証明することが必要とされる特に航空宇宙アプリケーションに対して非常に高価である。検証努力及びコストの大部分が、その設計仕様に対するソフトウェアの実装をテストする際に存在し、本明細書に記載されているテストジェネレーターは、この検証処理を自動化することによって、システム開発及び証明コスト並びにサイクル時間を大幅に削減し得る。この自動テスト生成は、Ｍａｔｌａｂなどのツールを使用し（データフローブロックダイアグラムの）モデルとしてソフトウェア設計を取得する広範囲に及ぶ業界の実践によって可能である。ＦＡＡによって使用されているＤＯ−１７８Ｂの証明標準規格は、対応するモデルにおいて具体化されている設計仕様及び低水準要求に適合するコードで実装された業界要求の一例である。これらのモデルを使用し、テストを生成する現在の民生ツール及び技法は、構造的なコードを保証するだけであって、そのような目的のテストに対してはかなり不十分である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国仮出願第６０／８６１，１２１号
【非特許文献】
【０００４】
【非特許文献１】ＦＡＡ  ＤＯ−１７８Ｂ
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は一般に、航空用に使用されるような最終的にソフトウェアとハードウェアのいくつかの組み合わせで実装されるシステムに対しモデルを使用する検証に関する。
本願発明の目的は、モデルの情報から作成されるテストケースを使用し、この実装がモデルに従っていることを検証することである。
【課題を解決するための手段】
【０００６】
このテスト生成法は、いくつかの設計レベルにおけるテスト生成によってＤＯ−１７８Ｂの目標を満たすことを容易にする。テストドライバー又はテスト装置は、モデル中に具体化されているソフトウェア及び要求を検証するために、これらのテストケースを使用し得、その際、構造的なコードの保証を達成し得る。アプリケーション開発者は今、ＤＯ−１７８Ｂの目的を満たすために高価なテスト手順及び手動テスト生成を使用しているので、この処理の自動化は、検証用に必要とされる時間及びリソースを劇的に低減し得る。
【０００７】
本方法は、システム機能をモデル化するデータフローダイアグラムに対し作動する。静的分析フェーズは、一般にダイアグラムが、設計エラー及びテスト不可能な状況表示のこれ以上のテスト生成を効果のない状態にするような静的な誤りなどの静的エラーをいくらかでも含むか決定し、開発者は通常、更なる処理をもたらす前にこれらのエラーを修正するように促される。動的分析は、文脈におけるデータフローダイアグラムのブロックそれぞれの機能要求を方法論的にテストする一連のテストベクトルを生成する。本方法は、コードを完全にテストするために、テスト対象ブロックとして一度に１つのブロックを指定する。本方法は、テスト対象ブロックのブロックタイプに関するテンプレートを使用し、テスト対象ブロックの機能要求をテストするブロックレベルの入力及び出力セットを生成する。信号伝播仕様は、ダイアグラム中の他のブロックすべてを一時的に表し、これらの仕様は、ブロックレベルの入力及び出力をダイアグラムレベルの入力及び出力に変換することがそれぞれ可能になる。ダイアグラムレベルの入力及び出力は、テストベクトルを構成し、テストケースが、時系列のテストベクトルから構築される。本方法は、エラーが見出された場合、ユーザの介入を求め得るが、開発者は、モデルに対して実装されたコードを検証するためにテストケースを手動で生成する必要がないようにテスト生成プロセス全体を通して自動的に処理することもできる。
【０００８】
テストジェネレーターは、データフローブロックダイアグラム及びその実装を完全に検証するテストケースを生成するために、要求ベーステストケーステンプレート、選択的な信号伝播及び値域の共通集合を使用する。
【０００９】
本発明の実施形態を添付の図面に関連し記載する。
【図面の簡単な説明】
【００１０】
【図１】システムの開発プロセスを表す。
【図２】例示的なデータフローダイアグラムである。
【図３】例示的な方法の機能を表す流れ図である。
【図４】例示的な方法の静的分析フェーズ機能を表す流れ図である。
【図５】ブロックタイプのテンプレートの例示的な表示である。
【図６】例示的な方法の動的分析フェーズ機能を表す流れ図である。
【発明を実施するための形態】
【００１１】
本発明は、モデルを使用して設計されるソフトウェアとハードウェアとの組み合わせにおいて実装されるシステム開発及び検証に関する。本発明の趣旨及び範囲から逸脱せずに本発明になされ得る形式及び詳細の変形を理解されよう。
【００１２】
実装の検証は、システムに対する開発プロセス全体の一機能である。例として図１は一般に、制御システムの開発プロセスを図示している。ステップ（１０）において、開発者は、特定タイプのナビゲーション制御システムの必要性などの問題を指定し、その問題を解決するための高水準の機能要求を確認する。ステップ（１１）において、開発者は、それに対応して開発者のチームと共におそらく共同作業でシステムのモデル設計を続行する。ステップ（１１）の結果は、ステップ（１０）において指定された問題を解決するシステム機能モデルと同様である。
【００１３】
ステップ（１２）において、コードは、開発者によって手動又はモデルを実現可能ないくつか計算機プログラムによってモデルから自動的に生成され得る。ステップ（１３）において、モデルは通常、航空制御システム用にＦＡＡで施行されているＤＯ−１７８Ｂの標準規格などの業界標準の目標に従って検証される。証明目的の困難さに起因してステップ（１３）は、時間及びシステム資源双方において、不釣り合いに高価になりがちである。従来のテスト生成プログラムが、完全なテストケースセットを生成しないために開発者は、やむを得ずＤＯ−１７８Ｂ標準規格に従ってモデルが要求に従うことを立証するテストケースを手動で生成する。ステップ（１４）において、完全なシステムテストが達成された後に限ってシステムが証明され得る。最後にステップ（１５）において、証明されたシステムが業界に配備され得、例えばナビゲーション制御システムが航空機のアビオニクスに組み入れられ得る。
【００１４】
データフローブロックダイアグラムは一般に、航空管制、エンジン制御装置及びナビゲーションシステムのような制御システムの一部に対し、特定のアルゴリズムをモデル化するために使用される。これらのアルゴリズムは、システム運用年数の間、１つ以上の時間ステップを越えて繰り返し実行するように設計されている必要がある。テストケース生成の目的は、オブジェクトコード（又は他の代替としてデータフローダイアグラムと参照されるデータフローブロックダイアグラム実装）が、ブロックダイアグラムによって指定されるアルゴリズムを正しく実装していることを検証することである。
【００１５】
本発明によるテスト生成法は、ダイアグラム中のブロックに対するテストケースを生成することによってデータフローブロックダイアグラムを処理する。テストケースの目的は、（分離したブロックに値を適用するよりもむしろ）入力値をダイアグラムに適用し、ダイアグラムの期待される出力値を測定することによって、データフローダイアグラムそのままでブロックそれぞれの固有特性をテストすることである。
【００１６】
データフローブロックダイアグラムは、方向性があって、場合によっては循環ダイアグラムであって、ダイアグラム中のノードそれぞれが、いくつかのタイプの機能を実行し、ノードと接続しているアークは、１つのノードから別のノードにデータがどのように流れるかを示している。データフローブロックダイアグラム（２０）のサンプルを図２に示す。データフローダイアグラムのノードは、（その２つの用語は、本明細書において互換可能に使用される）ブロックとしても参照されていてブロックそれぞれは、ブロックタイプを有する。
【００１７】
ノードは、複数の着信してくるアーク及び複数の外向きのアークを有し得る。アークの終端それぞれは、ポートを介しノードに接続されている。ポートは、ポートへの流入又はポートからの流出いずれかであって双方向に流れない単一方向情報である。ポート（２４）などの入力ポートは、高々１つの着信アークを有するが、ポート（２５）などの出力ポートから発し得る外向きのアークにおいてはいかなる制限もない。いかなる着信アークも有さないブロック（２１）のようなノードは、入力ブロックと見なさられ、ダイアグラムレベルの入力を表わす。いかなる外向のアークも有さないブロック（２６）のようなノードは、出力ブロックと見なされ、ダイアグラムレベルの出力を表わす。ブロックは、ブロックによって実行される特定の機能をより視覚的に指定するために様々な形のアイコンによって表される。通常、ブロックタイプそれぞれは、業界標準のアイコンを有する。
【００１８】
ブロックタイプは、そのブロックタイプのブロックによって共有される機能を含む特定の特性を定義する。ブロックタイプの例は、フィルター、タイマー、合計、積、値域制限、ＡＮＤ及びＯＲを含む。（本明細書においては、混乱を回避するためにＡＮＤ及びＯＲなどの論理関数は、すべて大文字を使って参照されている。）特定のブロックは、その特定のブロックのブロックタイプのインスタンスである。ブロックタイプは、そのブロックタイプのブロックの入力ポート及び出力ポート数又はタイプ及び値域特性を決定付け得る。例えばラベルＡＮＤ１のブロック（２３）は、ブロック（２３）への２入力ＡＮＤゲートであって、入力１及び入力２は、アーク（２２）に沿って出力を生成ために論理的に結合されている。ラベルＡＮＤ２のブロック（２７）もまたＡＮＤゲートであって、従ってそれは、ブロック（２３）と同一のブロックタイプを有する。
【００１９】
ブロックタイプは、実装されるアルゴリズムに従って任意レベルの機能性及び複雑性で定義され得る。例えばＡＮＤ、合計及び積は、プリミティブなブロックタイプであるが、図２の（ラベルＣＯＮＦＩＲＭ  ＳＥＣ）ブロック（２８）は、他よりも複雑なブロックタイプ「タイマー」を有する。別の複雑なブロックタイプは、１番目及び２番目の順序フィルター、過渡サプレッサー、積分器、レート制限器及びデバンサーを含む。更に、ブロックタイプは、階層的であり得、例えばあるブロックは、別のブロックに関わるサブダイアグラムの実装を含み得る。しかし、プリミティブな任意のサブブロックを除外したブロックの機能的な要求の独立した解釈を使用したテストを作成するためにサブダイアグラムのそのような詳細は、テスト生成のために無視し得る。その独立した解釈は、ブロックタイプと結合され得る。
【００２０】
ポートそれぞれは、最大許容値域及び正常動作値域を有する。最大許容値域は、ポート上に現れ得る最大の値域の値であって、データタイプの実装及びダイアグラムのアルゴリズムの制約によって制限される。正常動作値域は、ブロックダイアグラムの実装が特定のシステムの文脈において使用されるとき、ポート上で可能な通常期待される値の値域である。実際の動作値域は、システムが異常な挙動を示すとき、正常動作値域を超え得るが、最大許容値域は、実際の動作値域と結びついている。これらの値域は、ユーザの入力、ブロックタイプ、システム辞書又は別のソースから導出され得る。許容誤差は、数値（例えば浮動小数点）エラーに起因するポートにおける測定可能な最小値の差である。
【００２１】
ダイアグラム中のブロックそれぞれに関しては、テストジェネレーターは、ブロックの埋め込んでいる文脈に対してそのブロックの特定の機能性をテストするためのダイアグラムレベルのテストケースセットを生成する。これらのテストケースは、ブロックのブロックタイプに関するテストケーステンプレートを使用し生成される。テストケースは、テストベクトルの時系列から成り、テストベクトルそれぞれは、ダイアグラムの入力ブロックにおいて注入される値のセットであって、ダイアグラムの出力ブロックにおいて測定される期待される値である。テストジェネレーターは、例えばテスト生成プロセスを開始するためにユーザからの入力を要求し得、テスト生成が完了したとき、テストジェネレーターは、ファイル又は表示画面上にテストケースを出力し得る。更に、生成されたテストケースは、ブロックダイアグラムの実装にテストベクトルを適用するテストドライバーによって使用され得る。テストドライバーは、例えばテストプロセスを開始するためにユーザの入力を請求し得、テストドライバーは、ファイル又は表示画面に試験結果を出力し得る。テストドライバーは、テストジェネレーターとバンドルされるか又はそれは個別のソフトウェアアプリケーションであり得る。
【００２２】
業界において、データフローブロックダイアグラムは通常、Ｍａｔｌａｂ社のＳｉｍｕｌｉｎｋ又はマイクロソフト社のＶｉｓｉｏなどのツールを使用して作成され、その描画ツールに互換のファイルで保持される。テストジェネレーターは、データフローブロックダイアグラムを獲得するために使用される描画ツール及びファイル形式双方から独立している。望ましいテストジェネレーターの実施例は、ハネウェル社の統合ライフサイクルツール及び環境（ＨｉＬｉＴＥ）である。ＨｉＬｉＴＥは、Ｍａｔｌａｂ社のＳｉｍｕｌｉｎｋを含む異なるソースからデータフローブロックダイアグラムをインポートし得る。ＨｉＬｉＴＥの実施形態においては、テストケーステンプレートが、マイクロソフト社のＡｃｃｅｓｓデータベーステーブル又はＸＭＬファイルでストアされ得る。代替実施形態は、別のデータベースアプリケーションのネイティブ形式を支援し得る。信号の伝播仕様は、パラメーター値とＸＭＬ仕様の組み合わせを使用するか又はＣ＃、Ｊ＃、Ｃ＋＋又はＪａｖａなどの標準プログラミング言語を使用して作成される。これらの仕様が動的にロードされ得る。
【００２３】
本明細書に記載されているようなテストジェネレーターは、別の（ＨｉＬｉＴＥでない）ツール内部か又はスタンドアロンツールとしても実装され得る。テストジェネレーターは、あり得る多くのテストドライバー実装を有するテストドライバーも含み得る。テストドライバーを含む一実施形態においては、テストドライバーは、Ｃ＋＋プログラミング言語で記述されたソフトウェアとして実装される。別のあり得る実施形態においては、テストドライバーは、ブロックレベルの機能要求の解釈を独自に検証する元のモデリングツールを使用し、ダイアグラムのシミュレーションに対し、生成されたテストベクトルを適用し得る。
「静的分析」
テストジェネレーターと共に含まれ得るデータフローダイアグラムのインポートモジュールは、そのソース（例えばファイル、データベース又はＭａｔｌａｂ社のＳｉｍｕｌｉｎｋモデル）からダイアグラム情報を読み出し、それをテストジェネレーターによって使用可能な形式でアプリケーションに提示する。図３は、テスト生成プロセスの一実施形態における異なる分析フェーズ中のインタラクション全体を示している。ダイアグラム（３０）は、インポートされた後、静的分析（３１）にかけられる。判断（３２）において、ダイアグラムが静的エラーを含む場合、テスト生成プロセスは、それらのエラーに関する情報のプロンプト（３３）を用いて開発者に促す。ステップ（３４）において、開発者はその後、静的分析（３１）が再実行される前に静的エラーを修正するためにダイアグラムを改訂する機会を与えられる。判断（３２）によって決定されたとき、ダイアグラムが静的エラーを含まない場合、ダイアグラムはその後、動的分析（３５）にかけられる。動的分析の出力は、そのモデルに対する完全なテストケースセット（３６）である。
【００２４】
図４は、テスト生成プロセスの静的分析フェーズの一実施形態を示している。ダイアグラムのポートそれぞれは、それに関連するユーザによって指定され得るか又は別のソースから取得され得るデータタイプ及びデータ値域情報（ＴＲＩ）を有していて、この実施形態においては、テストジェネレーターが、データフローブロックダイアグラム中のあらゆるポートに関するＴＲＩを決定し確認する。ステップ（４００）において、ダイアグラムレベルの入力ブロックすべてに関するＴＲＩが取得され得、おそらく開発者によって指定される。ステップ（４０１）において、その入力すべてに関するＴＲＩ情報を有するブロックが選択される。ステップ（４０１）の最初の繰り返しに関しては、ダイアグラムレベルの入力を直接使用するブロックが選択される
ステップ（４０３）において、ブロックタイプ情報（４０２）を使用し、ブロックの出力ポートに関するＴＲＩが、ブロックを介して伝播された入力ポートからブロックタイプに関する機能性及びＴＲＩに基づいて決定される。一定の高水準ブロックを介する値域の伝播は、ブロックの入力と出力との間の関係を確立する機能仕様を利用し得る。付随の機能仕様を有するそのような高水準ブロックの例は、その伝達関数を有するフィルターである。そのような仕様は、高水準ブロックの出力ポート上の値域領域の導出を可能にする。ダイアグラムレベルの入力を指定することに加えて開発者は、ダイアグラム中のいくつかの任意点に対するデータタイプ及び値域情報を指定し得、この情報が開発者仕様である。判断（４０５）において、開発者仕様（４０４）が存在していて、選択されたブロックのいくつかの出力ポートに対する何らかのＴＲＩを含んでいる場合、ステップ（４０３）において決定されたＴＲＩは、指定されたＴＲＩに対し一致させられる。ステップ（４０６）において、決定されたＴＲＩが、指定されたＴＲＩと一致しない場合、不一致が確認され、記録され得る。いかなる不一致も存在しない場合、ステップ（４０７）において、ブロックの出力ポートすべてに関するＴＲＩがストアされる。
【００２５】
ブロックの入力ＴＲＩの変換をブロックの出力のＴＲＩに記述することに加えて、ブロック情報（４０２）は、ブロックタイプそれぞれの入力に関するタイプ及び値域の制約もまとめ得る。ストアされているアークの発信ポートであるブロックの出力に関するＴＲＩをアークの目的ポート上の入力制約と比較することよって、その後、タイプ及び値域の不一致の存在が決定され得る。アークの発信ポート（ブロックの出力ポート）に関するＴＲＩが、アークの目的ポート（別のブロックの入力ポート）における入力上の制約を満たさない場合、タイプ又は値域の不一致が存在する。入力制約が、満たされるか否かは、値域の比較として集約的に参照される数学的、集合及び比較演算の使用を介して決定される。不一致の例は、（値０を受け入れない）数学的な除数に相当する別のブロックにおけるポートへのアークによって結合されている数値ゼロを含む出力ＴＲＩであって、結果として生じる値域の不一致は、実質的にはゼロ除算エラーである。複数のアークが同一の出力ポートから出て、異なる入力ポートと接続し得るファンアウトと呼ばれる状況であるために１つの出力ポートは、ＴＲＩの不一致に関してチェックされる複数のアークを有する。
【００２６】
従ってステップ（４０８）において、ブロックの出力ポートの１つから発しているアークが選択され、判断（４０９）は、アークの発信ポートのＴＲＩが、アークの目的ポートの入力制約を満足するか否かを決定する。それらの入力制約は、目的ポートを含むブロックのブロックタイプに関するブロック情報（４０２）を使用し決定される。ステップ（４１０）において、その出力ＴＲＩが入力制約を満たさない場合、ＴＲＩの不一致が確認される。ステップ（４１１）において、いかなる不一致も存在しない場合か又は不一致が記録された後、発信ポートの出力ＴＲＩが、目的ポートの入力ＴＲＩとしてストアされる。目的ポートが最もあり得る別のブロックに属するようにステップ（４１１）は、ＴＲＩが介在するブロックすべてを介し、ダイアグラムレベルの入力からダイアグラムレベルの出力まで追加的に伝播させる。
【００２７】
判断（４１２）において、選択されたブロックの出力ポートに関連するアークすべてが分析されたか否か決定される。ステップ（４０８）において、いくつかのアークが分析されていない場合、別のアークが選択される。アークすべてが分析されている場合、判断（４１３）においてブロックすべてが選択されたか否か決定される。ステップ（４０１）において、いくつかのブロックも選択されていない場合、別のブロックが選択される。ブロックすべてが選択されていた場合、ステップ（４１４）において静的分析が終了する。
【００２８】
静的分析フェーズの代替実施形態は、いかなる値域及びタイプの分析も呼び出さない。代わりにダイアグラム中のポートすべてに関するＴＲＩのデフォルト値が、動的分析ステップの間、使用するためにロードされ得る。
「テストケーステンプレート」
ブロックそれぞれに対するテストケースが、そのブロックタイプに関するテストケーステンプレートから導出される。ブロックタイプに関するテストケーステンプレートは、特定のブロック機能の要求を記述していて、テンプレートは、ブロックの入力及びブロックの期待される出力値に適用される時系列の値から成る。テンプレートは、ブロックの入力及び出力による値を記述しているが、テストケース自体は、ダイアグラムの入力及び出力に関するベクトル値を含む。テストジェネレーターは、どの値が、ダイアグラムの入力においてブロックの入力におけるテストケーステンプレートによって要求されている値をもたらし得、どの値が、そのテストケーステンプレート中の期待される出力値を生成するそのブロックに反映するためにダイアグラムの出力において現れるべきか、を決定するためにダイアグラムにおいて関連する別のブロックの信号伝播仕様を使用する。
【００２９】
特定のブロックタイプをテストする方法を指定する正規のテストの要求は、そのブロックタイプに対してあり得る所定のテストケーステンプレートセットにおいて具体化されている。テストケーステンプレートそれぞれは、特定の機能ブロックをテストする１つ以上のテンプレートステップシーケンスを含む。テストケーステンプレートが、様々なテンプレートステップの実行時に指示し、テンプレートステップそれぞれは、データフローブロックダイアグラムの０以上の実行ステップを示している。（テンプレートステップは、後述するような例えばステップの実行カウントが０を評価する式であるときは、０回の実行ステップに相当し得る。）テンプレートステップは、数回のステップ実行の間、ブロックの入力ポートに適用されるベクトル値及び数回のステップ実行の終わりにダイアグラムの出力ポートにおいて測定される期待される値を記述している。
【００３０】
テストケーステンプレートの値は、数値か又は式によって記述され得る。式は、ブロックの特性、ブロックのポートＴＲＩ、演算又は論理演算子及びダイアグラムの周期率のようなダイアグラム特有の値を参照し得る基本の項を使用して表される
一実施形態においては、テストケーステンプレートに記述されているステップの前後でそれからテストケースを生成するとき、ステップを追加することが可能である。ステップの追加又は削除は、多くは信号伝播仕様によって実行され、後述の所定のテンプレート自体は変更しない。新しい任意のステップをテンプレートステップの間に挿入することは、テンプレートの意味を変更し得、従ってテンプレートにおいて、そのように指示された場合に限って認められ得る。別のテンプレートステップと同様に追加されたステップは、数式言語で記述され得、複数の時間ステップを介し実行され得る。代替実施形態においては、テストケーステンプレートは、いくつのステップが追加され得、追加されたステップが、テンプレートステップの時系列のどこに現れ得るか指定し得る。
【００３１】
テストケーステンプレートそれぞれは、理論的に無制限数のステップを有し得る。同一の入力値セットをすべて指定する複数のステップは、実行カウントと呼ばれる関連付けられた乗算器をと共に単一のステップに圧縮され得る。実行カウントは、特定のステップが、次のステップに移動する前に何回繰り返される必要があるかアルゴリズムに伝える必要があって、それは定義された数値か又は式から計算され得る。これらのステップにおいては、入力値は、指定されている実行カウントに対し繰り返されると見なされる。これらのステップの１つに指定される任意の出力値は、実行カウントすべてが終了したときに限って出力ポート上で有効か又はテンプレート中に指定されているようなあらゆるステップにおいて有効である。
【００３２】
テストケーステンプレートによって獲得される挙動は、特定の値を有するリテラル項の中に記述され得るか又は式として示され得る。ＨｉＬｉＴＥにおける実施形態の場合のように、数式言語は、文脈自由なブロックタイプの静的特性及び個々の文脈依存のブロックインスタンスの動的特性すべてにアクセスするためのユーザ機能を支援し得る。更に、数式言語は、静的分析の間、ブロックの入力における正常動作値域の最小値などの計算されたＴＲＩ値にアクセスするためのユーザ機能を支援し得る。ユーザは、数式言語を介して実行率のようなシステム情報にもアクセスし得る。
【００３３】
テストケーステンプレートの例を図５に示す。テンプレート例（５４）は、図２のブロック（２８）と同一のタイマーブロックタイプであるブロック（５０）に対応している。入力（５１）が、「Ｃｏｎｆｉｒｍ」であって、入力（５２）が、「ＴｉｍｅＬｉｍｉｔ」であって、出力（５３）が、「Ｔｉｍｅｏｕｔ」である。ブロック（５０）に関するテストケースは、ステップ（５５）、（５６）、（５７）及び（５８）に対応する配列ベクトルによって構築され得る。例えばステップ（５５）に関するベクトルは、実行カウント１を有する単一の時間ステップである。その時間ステップの開始時に、０が入力（５１）に適用され、式ＯｐＲａｎｇｅ．ｍｉｄによって記述されている値が、入力（５２）に適用される。０が、その時間ステップの終了時の出力（５３）における期待される値である。
【００３４】
式ＯｐＲａｎｇｅ．ｍｉｄは、この文脈において静的分析中に計算されるブロックＣｏｎｆｉｒｍＳｅｃのポートＴｉｍｅＬｉｍｉｔの正常動作値域の中間ポイントを示す。式「（ＴｉｍｅＬｉｍｉｔ）（Ｒａｔｅ）−１」は、このステップ中、本明細書ではＴＯｐＲａｎｇｅ．ｍｉｄのポートＴｉｍｅＬｉｍｉｔにおけるテンプレート中で指定された値をとり、それにレート（ダイアグラム実行率ヘルツ）を乗じて１を差引く。その式の結果は、タイマー期限が切れる時点の時間ステップ数よりも１少ない。この例においては、ステップ（５６）だけが、実行カウントフィールド中の式によって決定された時間ステップ数を越えて適用される複数のベクトルに対応している。
【００３５】
１つのブロックは、そのブロックタイプに関連付けられた複数のテストケーステンプレートを有し得、テストケーステンプレートそれぞれは独自である。特定のブロックのインスタンスに対する現在の文脈上の条件に基づいて、条件が特定のテンプレートを選択し得るテストケーステンプレートに添付され得る。同一の機能性をテストする代替のテストケースも分類され得、生成されたテストケースをもたらすそのグループが提供する最初のテストケーステンプレートは、残りを無視させる。
【００３６】
複数の時間ステップを横断し実行するためのテストケースを構築することによって、ブロックの時間変化の機能性のテストを可能にさせる。時間に依存するいかなる挙動も有さないブロックに関しては、テストケーステンプレートは通常、単一の時間ステップだけを含む。テンプレートの最初のステップが、未定義であり得るためにダイアグラムの実行中に任意の時点で発生し得、テストジェネレーターは、信号伝播の間、それが必要になった場合、以前の時間ステップを挿入し得る。あるいはまたテンプレートの最初のステップは、ダイアグラム実行の開始後の特定の時間に相当し得る。
【００３７】
テストケーステンプレートは、特定のブロックタイプのブロック中の変化の主な原因となるように適合され得る。例えば、合計ブロックのように同一の可変入力を有する所与のブロックタイプは、異なる入力数を有するブロックに関する個別のテストケーステンプレートの手動による仕様を強いるよりもむしろ、テストジェネレーターの望ましい実施例は、特定のブロックタイプが有するインスタンスの入力の実数に基づいてテンプレート中で反復指示を使用しテストケースを動的に生成し得る。
「動的分析」
テストジェネレーターの目標は、ダイアグラムそのままでブロックそれぞれに対するテストを生成することである。それは順番に、ダイアグラム中のブロック（テスト対象ブロック）それぞれに対するテストケースを生成する。ブロックのタイプに関するテストケーステンプレートは、ブロックの入力及び出力によってそのブロックに関して期待される挙動を既に定義しているが、テスト対象のブロックをテストするダイアグラムレベルのテストケースを生成することは、テスト対象ブロックに影響するダイアグラムの入力及びテスト対象ブロックによって影響を受けるダイアグラムの期待される出力を決定することを意味する。したがって、テスト対象ブロックの入力に到達する値が、現在のテストケーステンプレートのステップによって所望されるものであるように、テストジェネレーターは、ダイアグラムの入力ブロックに適用され得る値を決定する必要がある。更に、テストジェネレーターは、同一のテンプレートのステップによって予測されるブロックの出力に直接トレース可能な関連するダイアグラムの出力に対し期待される値を決定する必要がある。
【００３８】
図６は、動的分析フェーズの一実施形態を表す。ステップ（６００）において、あるブロックがテスト対象ブロックとして指定される。ステップ（６０１）において、テストケーステンプレートがテスト対象ブロックのブロックタイプに対して選択される。ステップ（６０２）において、選択されたテストケーステンプレートが、テンプレートステップそれぞれに対するテスト対象ブロックの所望の入力及び出力を決定するために使用される。ステップ（６０３）及び（６０４）において、これらの値又は値域がその後、そのダイアグラムを介し順方向及び逆方向に伝播される。ステップ（６０３）において、ブロックレベルの入力が、アーク及びノードの入力経路に沿って逆にダイアグラムの入力まで伝播され、ステップ（６０５）において、ダイアグラムレベルの入力が決定される。ステップ（６０４）において、ブロックレベルの出力が、アーク及びノードの出力経路に沿って順方向に伝播され、ステップ（６０６）において、ダイアグラムレベルの出力が決定される。
【００３９】
ステップ（６０３）及び（６０４）の伝播の間、経路中のブロックそれぞれにおいては、値又は値域は、その値がそのブロックをどのように通過するか反映するように調整される。この決定され得る通過方法は、後述のように信号伝播仕様を介するものである。伝播される値又は値域が、ダイアグラムの入力及びダイアグラムの出力に到達したとき、テストベクトルが、それらの値から組み立てられる。テストベクトルが、選択されたテスト対象ブロックのテストケーステンプレートによって指定される時間ステップすべてに対して作成されていたとき、ステップ（６０７）において、これらのテストベクトルが、テスト対象ブロックに対するテストケースの中に組み立てられ得る。判断（６０９）において、適切なテストケーステンプレートすべてがまだ選択されていなかった場合、ステップ（６０１）において、別のテンプレートが選択される。テストケーステンプレートの中には、埋め込んでいる特定の文脈に対し適切であり得ないものもあって、判断（６０９）において、その適性分析が含まれている。適切なテンプレートすべてがテスト対象ブロックに対して使用された後、判断（６１０）において、ブロックそれぞれが、テスト対象ブロックであったか決定される。いくつかのブロックがまだテスト対象ブロックとして指定されていない場合、ステップ（６００）において、別のブロックが指定される。ステップ（６１１）において、ダイアグラム中のブロックすべてがテスト対象ブロックとして指定されていた場合、動的分析が終了する。
【００４０】
（テストケーステンプレートによって指定される）テスト対象ブロックの入力ポートにおいて所望される値をもたらす対応しているダイアグラムの入力に適用される値を決定するために、テストジェネレーターは、介在する任意のブロックを介し、このブロックの所望される入力値を１つ以上のダイアグラムの入力へどのように逆方向伝播するかに関する仕様を必要とする。同様にテスト対象ブロックの出力ポートにおける期待される所望の値は、測定されるダイアグラムの出力へ順方向に伝播される必要がある。
【００４１】
ブロックタイプそれぞれに関しては、テストジェネレーターは、選択された任意の出力ポートにおいて特定の値をもたらす入力値を決定する方法に関する仕様（出力から入力への伝播仕様）と、もしあるとすれば、追加の入力が、選択された任意の入力における値に直接に寄与する出力値を生成するために必要とされるか決定する方法に関する仕様（入力から出力への伝播仕様）がある。ブロックタイプが時間依存の挙動を含む場合、その仕様は、仕様に入力する値を順方向又は逆方向へ時間移動し得るか又は元の時間ステップに関する値を用いたそのような時間移動した値を含む。一実施形態においては、仕様は、ブロックを介する値を伝播するための複数の代替方法を含み得る。
【００４２】
伝播される値は、ポイント値又は値域のいずれかであり得る。実際の一実施形態においては、本アルゴリズムは、値域を用いて動作するに過ぎず、ポイント値は、値域が生成されないように示されているに過ぎない。更に値域は、アルゴリズムの変更のない複数の順序のある不連続で部分的な値域を含み得る。テストジェネレーターは、ダイアグラムを介するその信号の挙動に関する記述を改善するか又は制約するために、ファンアウト及び結果としての値域の共通集合を利用し得る。
【００４３】
テストジェネレーターは、ダイアグラムの検索前にテスト対象ブロックから開始する。そのブロックタイプに関連付けられたテストケーステンプレートがオープンされ、適用可能なテストケーステンプレートそれぞれが順番に適用される。テストケーステンプレートを適用することは、テスト対象ブロックの文脈において、そのブロックタイプに対する入力及び出力それぞれに関する式を評価するそのテンプレートのステップそれぞれを適用することを含む。この評価は、最初のポートの値域のペアセットをもたらし、ダイアグラムの検索の基本を順番に形成し得るポートレンジステップリスト（ＰＲＳＬ）の基本を形成し得る。最初のＰＲＳＬが、一旦作成されると、テストジェネレーターはその後、テスト対象ブロックのポートからそれらに対する終点へのアークそれぞれをトラバースし、そこから新たにそれが出くわすブロックに関する適切な伝播仕様（出力ポートで着信した場合、出力から入力への伝播仕様又は入力ポートで着信した場合、入力から出力への伝播仕様）を適用する。検索の目的は、テスト対象ブロックに対し指定されている入力及び出力に対応するダイアグラムレベルの入力及び出力を決定することである。ダイアグラムレベルのこれらの入力及び出力は、テストケースを含む。
【００４４】
特定のブロックレベルの入力及び出力に関連付けられたダイアグラムレベルの入力及び期待される出力セットは、探索問題に達する。この検索において、テストジェネレーターは、現在の期間に現在のモデルの文脈におけるテスト対象ブロックの期待される挙動と一致する（ポート、値域の）ペアセットを検索する。（ファンアウトポイントにおける異なる２つの経路から交点へ伝播されている値が機能しないような事項に起因し）検索が失敗し得るので、本アルゴリズムは、前に既知の実行可能状態にバックトラックし、異なる検索代替手段（異なるペア（ポート、値域）セット）を試みるように設計されている。このバックトラックは、現在の検索の状況が、データフローブロックダイアグラム自体から個別に保持されることを必要とする。検索におけるポイントそれぞれにおいてテストジェネレーターは、すでに伝播されているペア（ポート、値域）を選択し、目的がダイアグラムレベルの出力である場合、順方向に伝播し、目的がダイアグラムレベルの入力である場合、それを逆方向に伝播する。構造ＲａｎｇｅＳｔａｔｅは、検索を介して現在の進行を示すために必要な値域情報及び他の状態情報双方の経過を保持し得る。検索は、いかなるペアも左方向に伝播されていないとき、すなわちダイアグラムレベルの入力及び出力が達しているとき、首尾よく終了する。検索は、代替手段すべてが所望のブロックレベルの入力及び出力セットに対応するダイアグラムレベルの入力及び出力セットを見出さないで試行している場合、不成功に終了する。
【００４５】
検索は、複数の時間ステップを介しダイアグラム中のポート上で実行される。検索は、信号伝播に関するこのサブダイアグラムに対する伝播代替手段を十分に公表し得る静的分析の間、ダイアグラムの残りと関連するこのサブダイアグラムの内外における解決が明確に確立され得るとき、データフローダイアグラム全体のサブダイアグラムに対し制約の解決又は反復の解決を使用することによって支援され得る。
【００４６】
伝播の代替手段の一例である同値クラスは、概念的に同等の出力値をもたらす異なる入力値の集まりであって、複数の同値クラスがブロックタイプそれぞれに対して存在し得る。例えば、値域を限定するブロックは、無制限の値域があり得る入力を有しているにも関わらず、制限された値域の可能性がある出力を有する。値域を限定するブロックは、最小の可能性がある出力値をもたらす入力すべてのセットと、ブロックを通過する変更されていない入力すべてのセットと、最大の可能性がある出力をもたらす入力すべてのセットと、の３つの同値クラスを有する。入力として、最大の出力値及び最小の出力値は、２つの同値クラスにそれぞれ属する。同値クラスは、サブダイアグラムレベルでも存在し得る。これらのサブダイアグラムレベルの同値クラスは、サブダイアグラム内で個別のブロックの信号伝播仕様を使用する必要性を緩和し得る。
【００４７】
テストベクトルの時間ステップを順方向又は逆方向に移行することによってテストジェネレーターは、データフローブロックダイアグラム中のフィードバックループを介する信号伝播を記述し得る。そのようなループは、フィードバックループの出力から同一のループの入力へ順方向に伝播する信号又はそのループの入力からループの出力へ逆方向に伝播する信号によって処理され得る。一般に、時間依存のブロックに対する信号伝播仕様は、必要に応じて時間内にステップを移行し得るか、ステップを追加するか又はステップを削除し得る。
【００４８】
テストジェネレーターは、ダイアグラム中のファンアウトポイントも同様に対処し得る。検索アルゴリズムが、ダイアグラムを介し逆方向に移動してダイアグラム中のファンアウトに到達した場合、それは、検索の残りにおける制約として、その出力信号を順方向に伝播し得る。順方向に伝播される出力信号が、出力がファンアウトする入力ポート上の値域すべてのうちの共通に関する共通値域によって定義される。
【００４９】
アークに沿う伝播は、前述のようなファンアウトの値域の共通集合を考慮に入れることだけが必要性である。しかし、ブロックを介する伝播は、それほど単純でない。ブロックを介する伝播は、ブロックタイプそれぞれの異なる機能性を考慮に入れる必要がある。これに対処するために、（順方向伝播に関する）入力から出力への伝播仕様及び（逆方向伝播に関する）出力から入力への伝播仕様を本明細書に定義する。
【００５０】
ライブラリのブロックそれぞれタイプの意味論は、ブロックを介する出力から入力及び入力から出力への伝播の同値クラスすべてを列挙することによって獲得され得る。ブロックレベルにおける−例えばフィルター、デバウンス（ｄｅｂｏｕｎｃｅ）又はラッチ機能に対する−推論は、しばしば、他のテストジェネレーターが低レベルのサブダイアグラムに基づいて作成し得る更に強力な論理的又は数的な一時的に伝達関数における同値クラスをもたらす。例えば、出力から入力の時間をかけた数値的な集中は、その伝達関数の知識に基づいて時間遅れフィルター用に確立され得る。これは、更に高水準のブロックの意味の割合を占めないツールによって実行され得ない検索に対する値域境界を証明するために使用され得る。同様に時間領域においては、ラッチに関する同値クラスが非決定論的に定義され得、ラッチが、いくつか前の時間ステップにおいて「セット」されてあって「リセット」されていない場合、そのために、それは現在「セット」である必要がある。これは、ラッチのサブダイアグラムを見ることによって明白ではない。
【００５１】
ブロックタイプそれぞれに関しては、入力から出力への伝播仕様は、特定の入力値に直接に寄与するそのブロックのいくつかの出力ポート上の値を得るために、ブロックの入力ポートにおける値又は値域の取得する方法及びそのブロックに関する他の入力ポートに現れるべき値（又は値域）と時間とを決定する方法を記述している。ブロックの入力ポートに対するこの仕様の適用結果は、所望の（元々指定されている値を含む）入力セットであって、ブロックの出力ポートにおいて期待される通過する値である。通過する値は、元の入力値と同一である必要でもなく、元の入力値と同一の時間ステップでも同一である必要でもなくて、それに直接に寄与する必要があるに過ぎない。実際に測定された出力ポートの値が、期待されている値と同等である場合、その意味は、ブロックの入力ポートにおける実際の値が、元々は順方向に伝播される予定だった値である入力値でなければならないことである。いくつかの形式で元々入力値を「通過」し得る１つの同値クラスに対応するセットそれぞれを有する複数の代替の入力及び出力セットが存在する。
【００５２】
ブロックタイプそれぞれに関しては、出力から入力への伝播仕様は、ブロックの出力ポートにおける値／値域の取得方法及び指定されている出力ポートにおいて元の値を現れさせるためにブロックの入力ポートに現れ得る値（又は値域）を決定する方法を記述している。この仕様の適用結果は、場合によっては複数の時間ステップを越えて所望される値域の入力セットである。この仕様が、テスト対象ブロックの入力ポートにおける適切な値を保証するためだけに存在するために仕様を出力する入力に存在するような「属性」要素もない。指定されるポートに所望の出力を生成する複数の代替入力セットがあり得る。
【００５３】
これらの伝播仕様双方においては、ポートそれぞれにおける値は、ポイント値よりもむしろ値域であり得る。値が値域の場合、その値域内の任意のポイント値又は部分的な値域がそのポートにおいて使用され得る。更に複数の伝播仕様が、所与のブロックに対し存在し得るが、代替の伝播仕様のうち１つだけが実行可能なテストケースを作り出するために検索で使用される必要があり得る。
【００５４】
一アプリケーションの伝播仕様によって生成される複数の代替の入力及び出力セットがあり得るが、テストジェネレーターは、検索において任意のポイントで１つのセットだけを使用し得る。そのセットは、等価的に使用し得ないので、これら複数の伝播の代替手段のセットが分類され得るか又は優先順位付けされ得、その優先順位付けは同値クラスに基づき得る。そのような同値クラスによって、テストジェネレーターが遅延評価を利用可能になり得る。遅延評価は、必要に応じて要素の集合を生成することを意味し、所与の集合が大きいか又は無限大である場合、特に有用であり得る。このような文脈においては、１つの選択肢が所望の結果をもたらすまで、遅延評価は、代替の伝播手段だけから異なる代替セットの伝播手段を介して配列し、いかなる他の代替手段も評価せずに検索を続けることを記述している。特定のブロックタイプに関する同値クラスセットは、新しい代替の伝播手段が必要とされるとき、動的に評価され得る式を使用し記述され得る。かくしてテストジェネレーターは、セットが検索目標に向かって検索移動するまでセットそれぞれを調査し得、それに従って検索空間を記録する。検索が行き止まりに出くわした場合、検索は、実行可能でまだテストされていないセットまでバックトラックし、再度処理する。これは、深さ優先の解決空間検索である。
【００５５】
具体的には検索アルゴリズムは、ポートと値域のペアをＰＲＳＬから繰り返し選択し、そのポートに添付されているブロック上の適切な信号伝播を計算する。信号伝播は、検索中の分岐を示す選択肢それぞれと共に代替手段のセットを返す。選択された代替手段が提供する時間ステップそれぞれにおけるポート−値域のペアは、ポートがＰＲＳＬ及び選択された代替手段において現れた場合、値域の共通集合を実行するマージを用いて新しいＰＲＳＬをもたらすようにＰＲＳＬにマージされる。検索の分岐は、いかなる値域の共通集合も機能しない場合、中止される。検索は、新しいＰＲＳＬを用いて繰り返し続ける。選択された代替手段は、アルゴリズムが常にダイアグラムを介し値を伝播するとき成功し、「挿入可能な」入力から「測定可能な」出力への連続した経路が存在する。更なる進行を防ぐ何らかの不一致が発生した場合、アルゴリズムは、最後の検索分岐にバックトラックし、伝播仕様によって記述されているものが提供する代替手段セットを使用し、代替の分岐へ進行する。アプリケーションの最後の伝播仕様が提供する代替セットすべてが、成功せずに試みられている場合、テストジェネレーターは、以前の伝播仕様にバックトラックしなければならない。
【００５６】
伝播仕様は、テストジェネレーターが仕様を機械的に適用するために、複数の方法で実装され得るが、それらは、いくつかのタイプのインタプリターの仕様によって可読である必要がある。ＨｉＬｉＴＥの実施形態においては、信号伝播の仕様の大部分が、ダイナミックリンクライブラリにコンパイルされるＣ＃プログラミング言語で記述されている。別の可能な実施形態は、その実装を用いて提供されるインタプリターの規則によって評価され得る専用言語で定義されたルールセットとして仕様をストアすることである。規則の評価において、特別な規則言語構造がＣ＃コードに対し、関数の呼び出しをもたらし得る。更に、仕様の正確な格納形式及び入力機構が変わり得る。
【００５７】
以上、本発明の例示的な実施形態を述べた。しかしながら当業者は、請求項で定義されている本発明の実際の範囲及び趣旨から逸脱せずにその変更及び修正が、記載された実施形態に対し実施され得ることを理解されよう。
【符号の説明】
【００５８】
２０  データフローブロックダイアグラムサンプル
２１  ブロック
２２  アーク
２３  ラベルＡＮＤ１のブロック
２４  ポート
２５  ポート
２６  ブロック
２７  ラベルＡＮＤ２のブロック
２８  ブロック
５０  ブロック
５１  入力
５２  入力
５３  出力
５４  テンプレート
５５  ステップ
５６  ステップ
５７  ステップ
５８  ステップ
【図１】
0005608203.tif 000002
【図２】
0005608203.tif 000003
【図３】
0005608203.tif 000004
【図４】
0005608203.tif 000005
【図５】
0005608203.tif 000006
【図６】
0005608203.tif 000007