このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,金宝app仿真软件®覆盖™を使用して逻辑算子ブロックのカスケードのMCDCメトリクスを記録する方法を説明します。
金宝appSimulinkには,さまざまなブ,ル論理実装方法があります。たとえば,MATLAB函数ブロックで如果
ステートメントを使用する,Stateflowチャートで条件付きの遷移を使用する,カスケードで互いに接続されている複数の逻辑算子ブロックを組み合わせるなどです。
モデル例slvnvdemo_cv_logic_cascade
は,MATLAB函数ブロック内のMATLABコードと逻辑算子ブロックのカスケードで使用することにより,同じ論理式を実装します。
次のコマンドを使用して,モデルslvnvdemo_cv_logic_cascade
を開きます。
open_system (“slvnvdemo_cv_logic_cascade”);
MATLAB函数ブロックを開いて関連する関数を確認します。
open_system (“slvnvdemo_cv_logic_cascade / MATLAB函数”)
MATLAB函数ブロックで,(a && (b | | c))が真である場合は,信号Data1が出力されます。それ以外の場合は,信号Data2が出力されます。
次のコマンドを使用してサブシステム逻辑级联的を開き,このサブシステムが,逻辑算子ブロックおよび开关を使用してまったく同じロジックを実装することを確認します。
open_system (“slvnvdemo_cv_logic_cascade /逻辑级联”);
最後に,信号生成器を開いて,布尔入力一个、bおよびcに3の組み合わせが与えられていることを確認します。これらの組み合わせは,FFF、TFTおよび到达目标时间です。
open_system (“slvnvdemo_cv_logic_cascade /信号生成器”);
信号生成器を閉じます。
close_system (“slvnvdemo_cv_logic_cascade /信号生成器”, 0);
モデルをシミュレ,トしてカバレッジレポ,トを生成します。
testObj = cvtest(“slvnvdemo_cv_logic_cascade”);testObj.settings.decision = 1;testObj.settings.condition = 1;testObj.settings.mcdc = 1;covdata = cvsim(testObj);%模拟覆盖率cvhtml (“exampleReport.html”, covdata);生成覆盖率报告
MATLAB函数ブロックのMCDC結果
生成されたレポ,トで,MATLAB函数ブロックの詳細に移動します。
MATLAB函数ブロック内の如果
ステ,トメントのMCDC結果は,指定した入力であり,予測されるとおりです。
ロジックカスケ,ドのMCDC結果
次に,ロジックカスケ,ドの結果を調べます。このブロックの組み合わせでは,MATLAB函数ブロック内のMATLABコードと同じロジックが実装されることを思い出してください。よって,ここではMCDC結果も同じであると予測します。
まず,上流のOr_Block
を見てみましょう。
このブロックのMCDCの概要には,“看到And_Block”
というテキストのリンクがあります。これは,カスケードのルートの Logical Operator を参照しています。このリンクをクリックすると、このブロックの結果を示すレポートの節に移動します。
カスケ、ドのル、トにある逻辑操作符ブロック(この場合は. com)And_Block
)は,カスケ,ド全体のMCDC結果をレポ,トします。
カスケードのMCDC解析の詳細には,まずカスケードに含まれているブロックの数を説明するリンクが表示されます。リンク“包括两个街区”
をクリックすると,モデルが表示され,カスケ:ドに含まれている2のブロック(Or_Block
およびAnd_Block
)が強調表示されます。
レポ,トのこの節には,カスケ,ドによって表現される論理式(この場合はC1 && (c2 | | c3))が表示されます。C1
、C2
およびC3
は,カスケ:ドに対する3の入力に対応する条件です。各条件に関して,表に,関連するブロックとその入力(かっこ内)およびMCDC結果が示されています。これらの結果は,入力の組み合わせTTx
、Fxx
およびTFT
はすべて実行されたものの,TFF
は実行されていないことを示します。これは,Signal Builder によって生成された入力 (到达目标时间
、FFF
およびTFT
)に対する予測と一致します。
さらに,予測どおり,このカスケードに関して示されている論理式とMCDC結果はいずれも,MATLAB函数ブロックで等価のロジックを実装する如果
ステ,トメントに関して表示されたものと一致します。
次のコマンドを使用して,モデルのカバレッジ結果を表示します。
cvmodelview (covdata);
カバレッジレポートで示されていたように,MCDCオブジェクティブはカスケードの個々の逻辑算子ブロックに関しては記録されていません。MCDCオブジェクティブは,カスケード内のブロックに組み合わせによって表現される論理式に関して記録されており,結果はカスケードの最後のブロックでレポートされています。モデルの強調表示も,これを反映しています。3の入力一个、bおよびcに対して入力の組み合わせをFFF
、TFT
および到达目标时间
とすると,Or_Block
はフルカバレッジの対象となります。ブロックの条件カバレッジオブジェクティブがすべて達成されているからです。ただし,このカスケ,ドに関連付けられていて達成されていないMCDCオブジェクティブがあるため,And_block
(カスケ,ドの最後のブロック)は赤で強調表示されています。
詳細にいては,And_block
の上にマウスを置いてください。
ツールヒントでは,カスケードの一部のMCDCオブジェクティブが達成されていないため,このブロックがフルカバレッジの対象とならないことが正しくレポートされています。
論理ブロックカスケドのMCDC結果は,matlabコマンドランからmcdcinfo
を使用して取得することもできます。この場合も,カスケ,ドのMCDCオブジェクティブは,カスケ,ドの最後のブロックにあります。
[coverage_casc, description_casc] = McDcinfo (covdata,“级联slvnvdemo_cv_logic_cascade /逻辑/ And_Block”description_casc.condition(1) description_casc.condition(2) description_casc.condition(3)
coverage_casc = 1 3 description_casc =结构体字段:文字:“C1 & & (C2 | | C3)的条件:[1 x3 struct] isFiltered: 0 filterRationale:“justifiedCoverage: 0 ans =结构体字段:文字:“C1 (And_Block In1)”实现:1 trueRslt:“TFT”falseRslt:的Fxx isFiltered: 0 isJustified: 0 filterRationale:“trueExecutedIn: [] falseExecutedIn: [] ans =结构体字段:文字:“C2 (Or_Block In1)”实现:0 trueRslt:“TTx”falseRslt:“(TFF)”isFiltered: 0 isJustified: 0 filterRationale:" trueExecutedIn: [] falseExecutedIn: [] ans = struct with fields: text: 'C3 (Or_Block In2)' achieved: 0 trueRslt: 'TFT' falseRslt: '(TFF)' isFiltered: 0 isJustified: 0 filterRationale: " trueExecutedIn: [] falseExecutedIn: []
カスケ,ドのメンバ,である他のブロックは,mcdcオブジェクティブを示しません。
[coverage_or, description_or] = McDcinfo (covdata,“级联slvnvdemo_cv_logic_cascade /逻辑/ Or_Block”)
Coverage_or = [] description_or = []
モデル例slvnvdemo_cv_logic_cascade
では,カバレッジ設定は,逻辑算子ブロックをショートサーキットとして扱うように設定されます。
この設定により、逻辑操作符ブロックのカスケードを解析するとき,対応する論理式の演算子は,MCDC目的のショートサーキットとして扱われます。上記の結果で示されているように,これは,逻辑算子ブロック内および複数のブロックにまたがって発生するショートサーキットをいずれもMCDCが認識することを意味します。そのため、逻辑操作符ブロックのカスケードのMCDC結果は,MATLAB函数ブロック内の如果
ステ,トメントの結果と一致します。後者は常にショ,トサ,キットとして扱われるからです。
ブロック内でのショ,トサ,キット
上記の例では,C2
の[真の出力]MCDCオブジェクティブの結果はTTx
です。これは,C1
とC2
がいずれも真实の場合,Or_Block
内のショ,トサ,キットにより,C3
は重要ではなくなることを示しています。
複数のブロックにまたがったショ,トサ,キット
さらに,C1
、Fxx
の[偽の出力]MCDCオブジェクティブの結果にオブジェクティブの結果にいて考えます。この結果は,ブロックをまたがったショートサーキットをMCDC解析がどのように認識するかを説明します。And_Block
への最初の入力がfalseであるため,2番目の入力はショトサキットされます。続いて,mcdcの目的で,これはOr_Block
(およびその両方の入力)全体をショ,トサ,キットします。論理ブロックカスケード用のMCDCのショートサーキット動作は,対応する論理式の演算の優先順位に基づいて(シミュレーション時の逻辑算子ブロックの実行順序に関係なく)発生します。
ショ,トサ,キットなしの論理式
MCDCのマスク定義を使用している場合は,逻辑算子ブロックのカスケードによって表現される論理式を,MCDC解析時にショートサーキットなしとして扱うこともできます。これを行うには,パラメ,タ,CovLogicBlockShortCircuitを“关闭”
に設定し,CovMcdcModeが“屏蔽”
に設定されていることを確認します。これらは実際,新しいモデルを作成するときの,これらのパラメ,タ,の既定の設定です。
CovLogicBlockShortCircuitが“关闭”
で,CovMcdcModeが“UniqueCause”
に設定されている場合は,カスケード内の逻辑算子ブロックはMCDC目的で個々に解析され,カスケードで表現されている論理式のMCDC全体は計算されません。
この例のカスケードがショートサーキットとして扱われない場合は,一部のMCDCオブジェクティブが与えられた入力によって達成されなくなることに注意してください。
set_param (“slvnvdemo_cv_logic_cascade”,“CovLogicBlockShortCircuit”,“关闭”);set_param (“slvnvdemo_cv_logic_cascade”,“CovMcdcMode”,“屏蔽”);Covdata_non_sc = cvsim(“slvnvdemo_cv_logic_cascade”);%模拟逻辑块短路断开时的覆盖率cvhtml (“exampleReport_non_sc.html”, covdata_non_sc);生成覆盖率报告