Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

要件に基づくテストに対する仕様モデルの使用

この例では、仕様モデルを使用して要件に基づくテストを実行する方法を説明します。この例では、要件に対して設計モデルを検証する体系的なアプローチに従います。仕様モデルの詳細な説明については、仕様モデルとはを参照してください。

手順 1: 要件エディターで要件を作成する

この例では、航空機のロール角を制御する設計モデルである、ロール自動操縦コントローラー RollAutopilotMdlRef を使用します。ロール自動操縦コントローラーは、2 つの上位モードで動作します。

1.ロール維持モード: このモードは、航空機の現在のロール角を維持するか、ユーザー指定の角度に応じて変更します。

2.機軸方位保持モード: このモードは、現在の機首方位を維持するか、航空機を回転してユーザー指定の機首方位値を取得します。ロール自動操縦コントローラー システムの詳細については、Requirements-Based Testing for Model Development (Simulink Test)を参照してください。

自動操縦コントローラーの場合、要件はコントローラーのシステム インターフェイス、上位システム モード、想定される動作について説明します。これらの要件は要件エディターで作成され、AP_Controller.slreqx ファイルに保存されます。要件エディターの詳細については、要件エディターでの要件の処理 (Requirements Toolbox)を参照してください。要件を表示するには、次を入力して要件エディターを開きます。

slreq.open('AP_Controller');

要件エディターに、ロール維持モードと機軸方位保持モードに対する上位レベルの要件が表示されます。各要件をクリックすると、タブに要件の詳細がリストされます。

手順 2: 仕様モデルを作成する

仕様モデルを作成する場合は、要件のタイプ、Model ブロックの選択、抽象化のレベルなど、いくつかの要素を考慮しなければなりません。仕様モデルの作成で説明するガイドラインに従ってください。

一連の自動操縦要件をカバーする sldvexSpecPartial 仕様モデルを開きます。

spec_model = 'sldvexSpecPartial';
open_system(spec_model);

sldvexSpecPartial モデルは入力ンターフェイスと出力インターフェイスで構成されます。真理値表は要件を取得します。

真理値表を開くには、次を入力します。

open_system('sldvexSpecPartial/AP Controller Requirements');

手順 3: 要件を仕様モデルにリンクする

次の手順を実行し、要件を仕様モデルにリンクします。

1.仕様モデルで AP Controller Requirements という名前の真理値表を右クリックします。コンテキスト メニューで、[要件][Simulink とのリンクを選択] をクリックします。

2.要件エディターで要件を開きます。真理値表にリンクする要件を右クリックし、[AP Controller Requirements (Truth Table) からのリンク] をクリックします。それぞれが要件のグループを指定する複数の真理値表がある場合、それらもリンクします。

手順 4: 仕様モデルのテスト ケースを生成する

sldvoptions を使用して仕様モデルのテスト ケースを生成します。各要件には、sldv.test() を使用して個別のテスト生成オブジェクティブが関連付けられています。

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'None';
[~, files] = sldvrun(spec_model,opts,true);

解析が完了すると、[検証結果の概要] ウィンドウに 6 つのオブジェクティブのうち 6 つが達成されたことが表示されます。

手順 5: テスト変換システムを作成して設計モデルでテストを実行する

自動操縦コントローラーの仕様モデルと設計モデルのインターフェイスは異なるため、手順 4 で生成したテストは設計モデルにおけるシミュレーションの実行でサポートされません。

たとえば、航空機ロール角は仕様における列挙範囲型ですが、設計モデルにおいては double 型です。

テスト変換プロセス中に RA_Horizontal などの信号値が範囲である場合、その範囲に該当する任意の値を選択できます。中間点 (範囲の中間点を選択できる)、境界値 (範囲の下限と上限を選択できる)、またはランダムな手法 (範囲内の乱数値を選択できる) など、さまざまなヒューリスティックな方法を使用できます。自動操縦コントローラーの場合、サブシステム sldvexDesignHarness/Test Conversion では、次に示すようにハーネス モデルで中間点の手法を実装します。

design_model = 'sldvexDesignHarness';
load_system(design_model);
open_system('sldvexDesignHarness/Test Conversion');

手順 6: 設計モデルでテスト ケースをシミュレートして、不足している要件を特定する

設計モデルは要件ドキュメントを使用して個別に開発されます。設計を検証するには、次の 4 つのサブシステムが含まれるハーネス モデルを作成します。

(i) 仕様モデル。

(ii) 設計モデル。

(iii) 手順 5 で説明するテスト変換サブシステム。

(iv) 実行時検証ブロック。このブロックは設計信号値が仕様モデルで指定された範囲内にあるかどうかをチェックします。

sldvruntest を使用して設計モデルで手順 5 のテストを実行し、モデル カバレッジ レポートを生成します。

cvopts = sldvruntestopts;
cvopts.coverageEnabled =  true;
[~, initCov] = sldvruntest(design_model,files.DataFile,cvopts);
cvhtml('InitialCov',initCov);

解析結果により、roll_ap_mod のフル カバレッジは達成されず、設計モデルのサブシステム カバレッジが達成されたことがレポートされます。

手順 7: 不足している要件を追加して仕様モデルを更新する

要件を解析用の sldvexSpecFull 仕様モデルに追加します。

spec_model = 'sldvexSpecFull';
open_system(spec_model);

(a) 更新された仕様モデルでテスト ケースを生成する

sldvoptions を使用してテスト ケースを生成します。

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'None';
[~, files] = sldvrun(spec_model,opts,true);

(b) 設計モデルでテスト ケースをシミュレートして、カバレッジ レポートを生成する

設計モデル、仕様モデル、テスト変換サブシステムが含まれる sldvexDesignHarness モデルを開きます。

design_model = 'sldvexDesignHarness';
open_system(design_model);

sldvruntest を使用してテスト ケースをシミュレートし、モデル カバレッジ レポートを生成します。

cvopts = sldvruntestopts;
cvopts.coverageEnabled =  true;
[~, FinalCov] = sldvruntest(design_model,files.DataFile,cvopts);
cvhtml('FinalCov', FinalCov);

カバレッジ レポートには、設計モデルのフル カバレッジが達成されたことが示されます。

bdclose('all');
slreq.clear;

関連するトピック