メインコンテンツ

モデル開発の要件に基づくテスト

この例では、自動操縦サブシステムを要件に対してテストする方法を示します。

この例では、テスト マネージャー、テスト ハーネス、Test Sequence ブロック、および Test Assessment ブロックを使用してサブシステムを要件に対してテストする方法を示します。要件ドキュメントはテスト ケースとテスト ハーネスにリンクされ、verify ステートメントによってテスト対象コンポーネントが評価されます。

モデルをビルドする際に、テスト ケースを追加してモデルを要件に対して検証できます。後続のユーザーは同じテスト ケースを実行でき、テスト ケースを追加して、100% のカバレッジの達成や生成コードの検証などのさらに詳しい検証の目的を実現できます。

この例では、3 つのシナリオを使用して Roll Reference サブシステムを要件に対してテストします。Test Sequence ブロックは入力を提供し、Test Assessment ブロックはコンポーネントを評価します。Roll Reference サブシステムは自動操縦制御システムの 1 つのコンポーネントです。Roll Reference は航空機のロール制御システムの基準角を制御します。このサブシステムは 1 つの評価に失敗するため、大きい入力角度でのサブシステム出力を制限する設計変更が求められます。

パスと例のファイル

次のように入力して、例で使用するパスとファイル名を保存します。

topModel = 'TestAndVerificationAutopilotExample';
rollModel = 'RollAutopilotMdlRef';
testHarness = 'RollReference_Requirement1_3';
testFile = 'AutopilotTestFile.mldatx';
reqDoc = 'RollAutopilotRequirements.txt';

テスト ファイルとモデルを開く

RollAutopilotMdlRef モデルを開きます。完全な制御システム TestAndVerificationAutopilotExample はこのモデルを参照します。

open_system(rollModel)

テスト ファイルをテスト マネージャーで開きます。

tf = sltest.testmanager.load(testFile);
sltest.testmanager.view;

要件エディターを開いて、Roll Reference ブロックに関連付けられている要件を確認します。[テスト ブラウザー] ペインのツリーで [AutopilotTestFile][Basic Design Test Cases] を展開し、[Requirement 1.3 test] をクリックします。[Requirement 1.3 test] タブで、[要件] を展開します。いずれかの要件リンクをダブルクリックして要件エディターを開きます。要件を強調表示すると、[プロパティ] ペインの [説明] セクションにその詳細が表示されます。

要件 1.3.1 では、ロール維持モードがアクティブ モードになると、子要件に記載されている条件下を除き、ロール維持の基準は航空機の実際のロール角に設定する必要があると指定されています。

  • 子要件 1.3.1.1 では、ロール維持の作動時に実際のロール角がいずれかの方向に 6 度未満となる場合、ロール維持の基準をゼロに設定する必要があると指定されています。

  • 子要件 1.3.1.2 では、ロール維持の作動時に実際のロール角が 30 度を超える場合、ロール維持の基準を実際のロール角と同じ方向に 30 度に設定する必要があると指定されています。

  • 子要件 1.3.1.3 では、回転ノブがいずれかの方向に 3 度以上と指示している場合、ロール基準をコックピットの回転ノブ コマンド (30 度を上限とする) に設定する必要があると指定されています。

このテスト ケースでは、子要件ごとに 1 つのシナリオが作成され、要件の通常条件と例外がテストされます。

要件ドキュメントは、Test Sequence ブロックとテスト ステップにマッピングされる URL を使用して、テスト ハーネスまでトレースします。テスト ハーネスを開き、参照要件 1.3 に関連付けられているコンポーネントを強調表示します。

sltest.harness.open([rollModel '/Roll Reference'],testHarness)
rmi('highlightModel','RollReference_Requirement1_3')

Test Sequence ブロック、Test Assessment ブロック、およびテスト対象コンポーネントが要件ドキュメントにリンクされます。[アプリ]、[要件マネージャー] を選択してからテスト ハーネス モデルで [リンクの強調表示] をクリックすることで、要件リンクを強調表示します。ツールストリップの [要件リンクの強調表示の切り替え] をクリックして、Test Sequence エディターでリンクを強調表示することもできます。要件リンクの作成については、View and Create Links (Requirements Toolbox)を参照してください。

Test Sequence

Test Sequence ブロックを開きます。

open_system('RollReference_Requirement1_3/Test Sequence')

Test Sequence ブロックは 3 つのシナリオのテスト入力を作成します。

各テストのテスト シーケンスで信号レベルが設定され、自動操縦が作動します。テスト シーケンスで、PhiRef が最小時間 DurationLimit の間安定してから次の信号レベルに遷移することが確認されます。最初の 2 つのシナリオについて、テスト シーケンスで EndTest ローカル変数が 1 に設定され、次のシナリオへの遷移がトリガーされます。

これらのシナリオでは基本的なコンポーネント関数がチェックされますが、100% のカバレッジなどのオブジェクティブが達成されるとは限りません。

テスト評価

Test Assessment ブロックを開きます。

open_system('RollReference_Requirement1_3/Test Assessment')

Test Assessment ブロックは Roll Reference を評価します。この評価ブロックは、複数のテスト ハーネス間でテスト評価を再利用しやすくする、ライブラリにリンクされたサブシステムです。このブロックには、以下をカバーする verify ステートメントが含まれています。

  • Phi が下限と上限の範囲内で動作する場合は PhiRef = Phi であるという要件。

  • Phi < 6 度の場合は PhiRef = 0 であるという要件。

  • Phi > 30 度の場合は PhiRef = 30 であるという要件。

  • TurnKnob の作動時に TurnKnob >= 3 度の場合は PhiRef = TurnKnob であるという要件。

サブシステムの検証

テストを実行するには、テスト マネージャーの [テスト ブラウザー] ペインで "Requirement 1.3 Test" を右クリックし、[実行] をクリックします。

シミュレーションにより、テスト マネージャーに verify ステートメントの結果とシミュレーション出力が返されます。verify_high_pos ステートメントが失敗します。

  1. テスト マネージャーの [結果とアーティファクト] ペインで、[結果] を展開します。

  2. [verify ステートメント] を選択します。

  3. [データ インスペクター] タブの [検査] ペインで [Simulink: verify_high_pos] を選択します。プロットに、ステートメントがいつ失敗したのかが示されています。

  1. [データ インスペクター] タブで [可視化とレイアウト] をクリックし、[基本レイアウト][2x1 - 2 プロット垂直方向グリッド レイアウト] を選択します。

  1. 下のプロットをクリックし、[検査] ペインで [Sim 出力] 信号を展開し、PhiRefPhi を選択します。出力トレースが上のプロットの verify の結果に揃えられます。Phi が 30 度を超えたときに PhiRef も 30 度を超えていることを確認します。

RollReference を更新して PhiRef 信号を制限します。

  1. テスト ハーネスを閉じます。

  2. メイン モデルで Roll Reference ブロックをダブルクリックし、示されているように Saturation ブロックをモデルに追加します。

  3. 上限を 30、下限を -30 に設定します。

  4. ブロックをその要件にリンクします。Saturation ブロックをクリックして選択します。要件エディターで要件 1.1.2 を右クリックし、[Saturation からのリンク] をクリックします。

テストを再度実行します。verify ステートメントがパスし、テスト マネージャーの出力から、PhiRef が 30 度を超えていないことがわかります。

参考

(Requirements Toolbox)

トピック