Main Content

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

カバレッジ データの演算

この例では、オーバーロードされた演算子 +、* および - を使用し、カバレッジ結果を組み合わせて、結果の和集合、共通集合、差集合を求める方法を示します。

モデル例

2 つの互いに排他的なサブシステムが有効になっている簡単なモデルを開きます。

open_system('slvnvdemo_cv_mutual_exclusion')

コマンド cvtest および cvsim を使用してシミュレーションを開始します。最初は、Constant ブロックの値は 0 で、これにより Subsystem 2 が強制的に実行されます。

test1 = cvtest('slvnvdemo_cv_mutual_exclusion');
data1 = cvsim(test1)
data1 = ... cvdata
            version: (R2022b)
                 id: 932
               type: TEST_DATA
               test: cvtest object
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
simulationStartTime: 0
 simulationStopTime: 10
             filter: 
            simMode: Normal

次のコマンドは、2 番目のシミュレーションを実行する前に、Constant ブロックの値を 1 に変更します。これにより、Subsystem 1 が強制的に実行されます。

set_param('slvnvdemo_cv_mutual_exclusion/Constant','Value','1');
test2 = cvtest('slvnvdemo_cv_mutual_exclusion');
data2 = cvsim(test2)
data2 = ... cvdata
            version: (R2022b)
                 id: 994
               type: TEST_DATA
               test: cvtest object
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
simulationStartTime: 0
 simulationStopTime: 10
             filter: 
            simMode: Normal

ここでは、decisioninfo コマンドを使用して、各テストから判定カバレッジを抽出し、パーセンテージとして一覧表示します。

メモ: 両方のテストの判定カバレッジが 50% となっていますが、同じ 50% をカバーしているかどうかは不明です。

cov1 = decisioninfo(data1,'slvnvdemo_cv_mutual_exclusion');
percent1 = 100*(cov1(1)/cov1(2))

cov2 = decisioninfo(data2,'slvnvdemo_cv_mutual_exclusion');
percent2 = 100*(cov2(1)/cov2(2))
percent1 =

    50


percent2 =

    50

カバレッジの和集合の検出

+ 演算子を使用して、data1 と data2 の cvdata オブジェクトの和集合を表す 3 番目の cvdata オブジェクトを派生させます。

メモ: 他のシミュレーション結果を組み合わせて作成された新しい cvdata オブジェクトは、タイプ プロパティが DERIVED_DATA に設定されてマークが付けられます。

dataUnion = data1 + data2
dataUnion = ... cvdata
            version: (R2022b)
                 id: 0
               type: DERIVED_DATA
               test: []
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
             filter: 
            simMode: Normal

2 セットのカバレッジにはオーバーラップがないため、カバレッジの和集合は 100% となっています。

covU = decisioninfo(dataUnion,'slvnvdemo_cv_mutual_exclusion');
percentU = 100*(covU(1)/covU(2))
percentU =

   100

カバレッジの共通集合の検出

* 演算子を使用して data1 と data2 の共通集合を求めることにより、2 つのテストの間でカバレッジがオーバーラップしないことを確認します。予想どおり、共通集合の判定カバレッジは 0% です。

dataIntersection = data1 * data2

covI = decisioninfo(dataIntersection,'slvnvdemo_cv_mutual_exclusion');
percentI = 100*(covI(1)/covI(2))
dataIntersection = ... cvdata
            version: (R2022b)
                 id: 0
               type: DERIVED_DATA
               test: []
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
             filter: 
            simMode: Normal


percentI =

     0

派生したカバレッジ データ オブジェクトの使用

派生した cvdata オブジェクトは、レポートや解析のすべてのコマンドで、また、それ以降の演算への入力として使用できます。例として、派生した dataIntersection オブジェクトからカバレッジ レポートを生成します。

cvhtml('intersect_cov', dataIntersection);

% Input to another operation
newUnion = dataUnion + dataIntersection
newUnion = ... cvdata
            version: (R2022b)
                 id: 0
               type: DERIVED_DATA
               test: []
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
             filter: 
            simMode: Normal

カバレッジの差集合の計算

- 演算子は、左右のオペランドの差集合を表す cvdata オブジェクトを作成するために使用されます。演算の結果には、左のオペランドでは達成され、右のオペランドでは達成されていないカバレッジ ポイントが含まれます。この演算は、特定のテストに起因する追加カバレッジの数を特定する際に便利です。

次の例では、1 番目と 2 番目のテスト カバレッジの和集合と、1 番目のテスト カバレッジの差が、2 番目のテストで提供された追加カバレッジの数を示します。既に示したように、判定カバレッジ ポイントにはオーバーラップがないため、テスト 2 の新しい判定カバレッジは 50% です。

newCov2 = dataUnion - data1

covN = decisioninfo(newCov2,'slvnvdemo_cv_mutual_exclusion');
percentN = 100*(covN(1)/covN(2))
newCov2 = ... cvdata
            version: (R2022b)
                 id: 0
               type: DERIVED_DATA
               test: []
             rootID: 934
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 25-Jul-2022 00:07:28
           stopTime: 25-Jul-2022 00:07:28
  intervalStartTime: 0
   intervalStopTime: 0
             filter: 
            simMode: Normal


percentN =

    50