MCDCカバレッジを満たすテストケースが、テストとして不十分な場合があるように思える
Show older comments
現在matlab simulinkにて、単体テストを行っております。
テストにおいて、網羅率を調査するためにMC/DCカバレッジを満たしているかをチェックしているのですが、MC/DCチェック方法を行うだけでは取りこぼしてしまうポイントがあるように思えてなりません。
具体的には、〇〇&&✕✕という条件において、MC/DC解析では、TT, Fx, TFの3パターンを行えば問題ないとなっておりますが、個人的にはTT, FT, TFの3パターンが必要であるように感じております。
例えば、以下のようなモデルを作成してみました。


入力値が、1から2に立ち上がった時に、A1ステートに移動するというモデルとなります。
また、Signal Builderは以下のようになっております。

この時、最初は入力が0であるので、in_unit_delay == 1が成り立たず、[(in_unit_delay == 1) && (in == 2)] がFxとなります。
次に、入力が1となってからしばらくの間、in_unit_delay == 1は成り立ちますがin == 2は成り立たないので、[(in_unit_delay == 1) && (in == 2)] はTFとなります。
最後に、1から2へと立ち上がる時、(in_unit_delay == 1), (in == 2)のどちらも成り立つので、[(in_unit_delay == 1) && (in == 2)]はTTとなります。
結果、この条件式は、AステートにいるときにTT, Fx, TFすべてのパターンの入力がなされるので、MC/DCカバレッジは満たされていると判断されます。
一方で、以下のようなモデルを考えます。

これは、先ほどのモデルの条件式の順番を入れ替えただけのモデルとなります。
このモデルで先ほどと同じテストを行った場合、入力が0(もしくは1)の場合、in == 2が成り立たないので、[(in == 2) && (in_unit_delay == 1)]はFxとなります。
また、1から2へと立ち上がる時、(in == 2), (in_unit_delay == 1)のどちらも成り立つので、[(in == 2) && (in_unit_delay == 1)]はTTとなります。
しかし、[(in == 2) && (in_unit_delay == 1)]がTFとなる場面は、A1ステートに移った後にしかないので、条件TFは満たされていないものと判断されてしまいます。
このような場合を回避するため、私はテストはTT, Fx, TFではなくTT, FT, TFのパターンを行うべきだと考えているのですが、なぜMC/DCカバレッジでは前者のパターンで問題ないとされているのでしょうか?
Accepted Answer
More Answers (0)
Categories
Find more on テスト ケースの生成 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!