主要内容

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

スクリプトを使用したカバレッジの結果のフィルタ

この例では,プログラムでカバレッジ結果からオブジェクトと結果をフィルタ,処理する方法を説明します。

モデルを開きカバレッジ解析を有効にする

まず,モデルをメモリに読み込みます。

modelName =“slvnvdemo_covfilt”;load_system (modelName);

金宝app仿真软件。SimulationInputオブジェクトを使用してモデルのカバレッジ設定を構成します。

simIn = 金宝appSimulink.SimulationInput(modelName);simIn = simIn. setmodelparameter (“CovEnable”“上”);simIn = simIn. setmodelparameter (“CovMetricStructuralLevel”“MCDC”);simIn = simIn. setmodelparameter (“StopTime”“20”);simIn = simIn. setmodelparameter (“CovSaveSingleToWorkspaceVar”“上”);simIn = simIn. setmodelparameter (“CovSaveName”“covData”);

カバレッジパラメタの一覧にいては,覆盖范围设置を参照してください。

SimulationInputオブジェクトを入力として使用してモデルのシミュレ,ションを行います。

simOut = sim(simIn);

判定カバレッジの結果の表示

フィルタ,を適用する前に,カバレッジ結果を表示します。decisioninfoを使用して,判定カバレッジの結果にアクセスできます。

饱和初始化=决策信息(covData,“slvnvdemo_covfilt /饱和度”);percentSaturationCov = 100 *饱和初始值(1)/饱和初始值(2)
percentSaturationCov = 50

饱和度ブロックの判定カバレッジは50%です。このブロックを達成としない場合,未達のオブジェクティブ結果をフィルター処理して,未達カバレッジとしてレポートされることがないようにできます。まず,フィルタ,処理する非達成のオブジェクティブ結果のセレクタ,が必要です。

セレクタ,の作成

適切なコンストラクタ,を使用してセレクタ,を直接作成できます。この場合はslcoverage。MetricSelectorを使用します。

正当化されたオブジェクティブが判定結果であるため,メトリクスセレクターコンストラクターへの1番目の入力はslcoverage.MetricSelectorType.DecisionOutcomeです。2番目の入力はブロックハンドルです。最後の2つはそれぞれ,正当化するオブジェクティブのインデックスと,そのオブジェクティブの結果のインデックスです。输入>下限判定オブジェクティブが饱和ブロックの最初のオブジェクティブであるため,そのオブジェクティブのインデックスは1です。このオブジェクティブの結果が1番目の結果であるため,その出力escンデックスも1です。

metricSel = slcoverage.MetricSelector(slcoverage.MetricSelectorType.DecisionOutcome)...“slvnvdemo_covfilt /饱和度”, 1, 1)
metricSel = MetricSelector属性:ObjectiveIndex: 1 OutcomeIndex: 1描述:'N/A'类型:DecisionOutcome Id: 'slvnvdemo_covfilt:5' ConstructorCode: 'slcoverage.MetricSelector(slcoverage.MetricSelectorType。决定结果,'slvnvdemo_covfilt:5', 1,1)'

slcoverage.Selector.allSelectorsを使用して,饱和度ブロックで使用できるセレクタ,を確認することもできます。

饱和allsels = slcoverage.Selector.allSelectors(“slvnvdemo_covfilt /饱和度”
saturationAllSels = 1x6异构选择器(BlockSelector, MetricSelector)数组,属性:描述类型Id ConstructorCode

allSelectorsメソッドを使用して,オブジェクティブのaaplンデックスと結果のaaplンデックスを確認することもできます。名前と値のペア描述を使用してFを検索します。

falseSelectors = slcoverage.Selector.allSelectors(“slvnvdemo_covfilt /饱和度”...“描述”“F”
falseSelectors = 1x2 MetricSelector数组,属性:objecveindex OutcomeIndex Description Type Id ConstructorCode

饱和度ブロックには假ケスのセレクタが2あります。最初のセレクタ,はF输入>的结果下限です。

falseSel =假选举人(1)
falseSel = MetricSelector属性:ObjectiveIndex: 1 OutcomeIndex: 1描述:'F输出>=饱和块“饱和”的最低限制'类型:DecisionOutcome Id: 'slvnvdemo_covfilt:5' ConstructorCode: 'slcoverage.MetricSelector(slcoverage.MetricSelectorType。决定结果,'slvnvdemo_covfilt:5', 1,1)'

falseSelセレクタ,は,slcoverage。MetricSelectorを使用して手動で作成したものと同じです。オブジェクティブのインデックスと結果のインデックスは,結果として得られる选择オブジェクトのプロパティです。

正当化規則の作成

slcoverage。过滤器を使用してフィルタ,オブジェクトを作成します。フィルタファル名とフィルタの説明を,メソッドsetFilterNameおよびメソッドsetFilterDescriptionをそれぞれ使用して設定できます。

filt = slcoverage.Filter;setFilterName (filt“slcoverage_filter”);setFilterDescription (filt的例子过滤器);

slcoverage。FilterRuleを使用してフィルタ,の規則を作成します。FilterRuleへの1番目の入力は,フィルタ,処理するブロックまたは結果のセレクタ,です。これは,自分で作成するセレクタ,である場合も,allSelectorsから取得するものである場合もあります。

2番目の入力は,結果またはブロックをフィルタ,処理するための根拠です。これは文字配列として指定されます。

3番目の入力は,使用するフィルタのモドです。2 .のカバレッジフィルタ,のモ,ドは,正当化と除外です。正当化モ,ドを使用して,F输入>的结果下限などの個別のカバレッジオブジェクティブの結果をフィルタ,処理します。除外モ,ドを使用して,モデル要素全体またはブロック全体をフィルタ,処理します。これは,ブロックとその子孫(ある場合)が無視されることを意味しています。この例では,正当化モ,ドを使用して,ある特定の結果をフィルター処理するよう指定します。

Rule = slcoverage。FilterRule(metricSel,'rate > 0', slcoverage.FilterMode.Justify);

addRuleを使用してフィルタ,に規則を追加します。

filt.addRule(规则);

保存メソッドを使用して、フィルタ、ファ、ルにフィルタ、を保存します。次に,过滤器プロパティを新しいフィルタファルに割り当てて,cvdataオブジェクトにフィルタファルを適用します。

filt.save (“covfilter”);covData。过滤器=“covfilter”

フィルタ,処理されたcvdataオブジェクトを使用して饱和度ブロックのカバレッジ結果を再生成します。

filteredSaturation =决策信息(covData,“slvnvdemo_covfilt /饱和度”);percentSaturationFilt = 100 * filteredSaturation(1)/filteredSaturation(2)
percentSaturationFilt = 75

饱和度ブロックの判定カバレッジは75%になります。

Stateflow®チャ,トでのMCDCオブジェクティブの正当化

同じワ,クフロ,を適用して特定のStateflowアクションを正当化できます。この例では,蜱虫后(4)遷移の一部である蜱虫MCDCオブジェクティブを正当化します。

まず,sfroot(Stateflow)を使用してstatflowル,トオブジェクトを取得します。

chartID = sfroot;

找到(Stateflow)メソッドを使用して(4,蜱虫)后的遷移idを取得します。“是”フラグを“Stateflow。过渡的に指定して使用し,找到を使用して遷移を検索できます。追加の入力を使用したラベル文字列の検索を使用して,さらに厳密な遷移を指定できます。

transID = chartID.find(“是”“Stateflow。过渡的“LabelString”(4,蜱虫)后的);

金宝appSimulink.ID.getSIDを使用して,チャ,トのS金宝appimulink IDを取得します。

transSID = 金宝appSimulink.ID.getSID(transID);

allSelectorsを使用して,フィルタ,処理するMCDCオブジェクティブの結果のセレクタ,を取得します。Stateflow遷移のSi金宝appmulink IDを1番目の入力として渡します。蜱虫の結果を正当化するため,説明で“滴答”を検索します。

sfSelectors = slcoverage.Selector.allSelectors(transSID,“描述”“滴答”的
sfSelectors = 1x3带有属性的MetricSelector数组:ObjectiveIndex OutcomeIndex Description Type Id ConstructorCode

allSelectorsはセレクタの候補を3返します。フィルタ対象とする遷移は3番目に返されるセレクタです。

sfSel = sfSelectors(3)
sfSel = MetricSelector与属性:ObjectiveIndex: 1 OutcomeIndex: 1描述:'条件1,'勾"过渡触发表达式在过渡的结果"后(4,勾)"从"剪辑"到"满"'类型:MCDCOutcome Id: 'slvnvdemo_covfilt:6:5' ConstructorCode: ' slcoveragemetricselector (slcoveragemetricselectortype . 'MCDCOutcome, 'slvnvdemo_covfilt:6:5', 1,1)'

規則を作成し,それをフィルタ,に追加し,保存します。フィルタファルは既にcvdataオブジェクトに割り当てられています。

Rule2 = slcoverage。FilterRule (sfSel“勾永不出错”);filt.addRule(规则2);filt.save (“covfilter”);

StateflowのプログラムAPIの詳細にいては,状态流APIの概要(Stateflow)を参照してください。

ブロックセレクタ,を使用したブロックの除外

slcoverage。BlockSelectorを使用してブロックをフィルタ,処理できます。この場合では可切换配置サブシステムを除外するため,SubsystemAllContentセレクタタプとslcoverage.FilterMode.Excludeフィルタ,モ,ドを使用します。

subsysSel = slcoverage。BlockSelector (...slcoverage.BlockSelectorType.SubsystemAllContent,...“slvnvdemo_covfilt /可切换的配置”);

セレクタ,根拠,除外フィルタ,モ,ドを入力として渡して,フィルタ,の規則を作成します。

Rule3 = slcoverage。FilterRule(subsysSel,...“未配置”...slcoverage.FilterMode.Exclude);

その規則をフィルタ,に追加して保存します。

filt.addRule(规则3);filt.save (“covfilter”);

最後に,cvhtmlを使用してカバレッジレポ,トを表示できます。[カバレッジ解析からフィルタ,処理されたオブジェクト]セクションには,フィルタ,処理されたモデルオブジェクトとその根拠の概要が表示されます。“sRT = 0”フラグを使用して,カバレッジレポートを生成してもそのレポートを自動的には開かないようにすることもできます。

cvhtml (“filteredCovReport”covData,“srt = 0”);

参考

|||||||

関連するトピック