Main Content

モデル スライサーを使用した拡張改良条件判定カバレッジのデバッグ

この例では、モデル スライサーを使用して、特定のモデル オブジェクトに関連する Simulink® Design Verifier™ で生成されたオブジェクティブを見つける方法を示します。オブジェクティブが特定されたら、モデル スライサーは、オブジェクティブが観測可能であるときには、そのステップでスライスを強調表示します。

この例では、次の製品を使用して、拡張改良条件判定カバレッジ (MCDC) のデバッグを説明します。

  • Simulink Design Verifier

  • モデル スライサー

拡張 MCDC では、モデル内のそれぞれのオブジェクティブの検出可能性の解析が行われ、それぞれのオブジェクティブについてマスキングなしのテスト ケースが生成されます。マスキングの影響を回避するよう、下流のブロックの影響を調整します。オブジェクティブの影響が観測可能であるそれぞれの検出可能なオブジェクティブの検出サイトの計算も行います。このデータは、解析で生成された sldvdemo_cruise_control_sldvdata.mat ファイルで入手できます。これらの検出サイトは、back-to-back テストの等価性基準に追加できます。

この例では次のスライサー構成を使用します。

  • 開始点は、観測するモデル オブジェクトとして設定されます。

  • 除外点は、Simulink Design Verifier で生成されたオブジェクティブと関連する検出点として設定されます。

  • 信号伝播は、下流 (前方スライス) に設定されます。

手順 1: モデルの準備

1.モデルを開きます。

model = 'sldvdemo_cruise_control';
open_system(model);

2.拡張 MCDC を使用したテスト生成のため、Simulink Design Verifier (sldvData) によって生成されたデータ ファイルを読み込みます。

load('sldvdemo_cruise_control_sldvdata.mat');

3.オブジェクティブが強調表示されなければならないモデル オブジェクトを選択し、その SID を見つけます。

modelObjIdentifier = 'sldvdemo_cruise_control/Controller/Switch3';
modelobjSID = Simulink.ID.getSID(modelObjIdentifier);

手順 2: モデル スライサーの設定

1.モデルについて FastRestart を有効にします。

set_param(model,'FastRestart','on');

FastRestart を有効にすると、モデルのシミュレーションが行われ、さまざまなタイム スタンプでシミュレーション データが収集されます。これによって [ステップを戻す] オプションと [ステップを進める] オプションが使用できるようになります。

2.Model Slicer オブジェクトを作成し有効にします。

slicerObject = slslicer(model);
activate(slicerObject);

3.信号伝播を "下流" に設定します。

slicerObject.Configuration.SignalPropagation = 'downstream';

手順 3: モデル オブジェクトに関連するオブジェクティブの検索

1.SldvDataExplorer クラスのオブジェクトを使用して sldvData にアクセスします。

sldvObj = SldvDataExplorer(sldvData);

メモ: クラス "SldvDataExplorer" はヘルパー クラスです。要件に応じて編集できます。

2.モデル オブジェクトに関連するすべてのオブジェクティブと、そのオブジェクティブの詳細を検索します。

[objectives, tableOfObjectives] = sldvObj.getObjectivesForModelObj(modelobjSID);
disp(tableOfObjectives);
    ObjectiveNum       Type                                Description                             Detectability      Status       TestCaseId
    ____________    __________    _____________________________________________________________    _____________    ___________    __________

         1          "Decision"    "logical trigger input false (output is from 3rd input port)"    "Detectable"     "Satisfied"        1     
         2          "Decision"    "logical trigger input true (output is from 1st input port)"     "Detectable"     "Satisfied"        1     

オブジェクティブの次の詳細は tableOfObjectives table に保存されています。

  • ObjectiveNum - オブジェクティブの番号。

  • Type - MCDC/判定/条件。

  • Description — Simulink Design Verifier によって生成されたオブジェクティブの説明。

  • Detectability - オブジェクティブの検出可能性ステータス。

  • Status - オブジェクティブのステータス。

  • TestCaseId - オブジェクティブを扱うテスト ケースまたは反例のインデックスを表す整数。

手順 4: オブジェクティブの強調表示

この例では、table の 1 番目のオブジェクティブを強調表示します。

1.オブジェクティブに対応するテストケースに従って設定された入力値をもつ simulation input オブジェクトを取得します。

[simIn, atStep, ~] = sldvObj.getSimInObjForObjective(objectives(1));

2.モデルでのロールバックを可能にしてモデルでステップを戻すことができるようにし、シミュレーション ロールバック ステップの数を 1 に設定します。

simIn = simIn.setModelParameter('EnableRollBack','on');
simIn = simIn.setModelParameter('NumberOfSteps', 1);

3.Simulink input オブジェクトをモデルに適用します。

slicerObject.applySimInToModel(simIn);

4.選択したオブジェクティブについてのすべての検出サイトを検索します。

objectDetectionSites = sldvObj.getObjectDetectionSites(objectives(1));

5.すべての検出サイトを除外点として追加します。

for n = 1:length(objectDetectionSites)
    detectionSite = objectDetectionSites(n).modelObj;
    slicerObject.addExclusionPoint(detectionSite);   
end

6.モデル オブジェクトを開始点として追加します。

slicerObject.addStartingPoint(modelobjSID);

7.テスト ケースでオブジェクティブが観測可能である点に移動します。

for q = 1:atStep 
    slicerObject.stepForward();
end

スライスが強調表示されていることが観察できます。

クリーンアップ

次のアクションを実行してモデルのクリーンアップを行います。

1.slicer オブジェクトをクリアする。

2.Simulink input オブジェクトをクリアする。

clear slicerObject simIn

3.モデルの FastRestart パラメーターをリセットする。

set_param(model,'FastRestart','off');

参考