MC/DCの代わりにMCCを使う?
今度ドックたー・スチュアート(Dr.Stuart)さんが参加したseminarに参加して面白い内容を聞いてもらいました。
『MC/DCよりMCCを使いましょう』
もしMC/DC(Modified Condition/Decision Coverage)とMCC(Multiful Condition Coverage)の違いを分からない方はグーグル神様を拝見してください。
もちろんその主張には前提があります。
- クライアントがISO26262に言及されたMC/DCなどのテスト設計手法にかまわない場合。
- その他MC/DCを使うわけがない場合。
スチュアートさんによるMCCの利益は僕が理解する限り下のようです。
- MC/DCは一応設計方法がどっても複雑だ。その一方MCCは各Condition(条件)の組み合わせでできます。
- short-circuitを使ったらMCCのケースの件数のずいぶん減られます。
- MC/DCよりMCCのテスト範囲が広いので以外のエラーを発見する可能性が上がる。
一番目はMC/DCを直接にやったことがある人々はよく分かると思います。
二番はの「short-circuit」についてちょっと語ると
IF (A and B) の場合
A | B | Result |
---|---|---|
T | T | T |
T | F | F |
F | T | F |
F | F | F |
4つのケースがMCCで作れます。ここでAがF(False)の場合はBで何が来ても結果はFと同じです。それでAがFの場合の3,4番ケースは1個のみすれば良い。。。の意味です。
MC/DCとMCCのケース数を比較した資料を見ましょう。
$N$をパラメーター数であればMC/DCを通じて醸し出すテスト・ケースの数は$N+1$個です。(緑いろの吹き出し)MCCを全開で適用するとケースの数は $2^N$個です。
でも研究を通じてShot-circuitを適用するとその数はMC/DC対比1.35~2倍くらい数が減るのを明かしました。(ピンクとオレンジ色のふきだし)
上のグラフで分かるのはMC/DCとMCCのエラー発見可能性は6%しか差がないのです。MC/DCのほうが6%上回るのです。
これからこの主張についての僕の考えを語ります。
Short-circuitを探すのも大変なものだ。
簡単なコンディションでは問題がありませんがコンディションが複雑に混ぜてる場合はShort-Circuitを探すのも大変な作業です。MC/DCくらいリソースが掛かります。
そしてこの間はMC/DCを自動的に生成させてくれるツールも沢山あるのでMC/DCの適用であんまり問題はなさそうです。
MCCでMC/DCより多いケースを遂行したとはいえ効果的なテストが出来たと言えません。
スチュアートさんによるとMCCで遂行されるMC/DC対比35%の追加ケースが予想できなかったエラーを発見するといいます。
でも僕はこれに賛成しません。35%の追加で予想できなかったエラーを発見するのを保障するわけでもないし実際に意外のエラーを発見するためにはこの方法よりちょっと違う接近をする(エラー発見可能性分析など)方が良いと思います。
MC/DCの適用はほとんどの人々は難しいするのでスチュアートさんがこんな主張をしたかなと思います。以前の29119の講義では境界値分析が他の手法より効果的だと話したこともありました。使いやすい手法をちゃんと使う方法で案内する派ですね。
でも今度のプレゼンで僕が感じたのはスチュアートさんがshort-circuitについて実務経験がなさそうなことでした。
僕のはMC/DCを避けるではなくてツールなどを通じて突破ろうと研究しました。そのための簡単なツールを作ってコンサルに使っています。僕だけではなくてさまざまなツール研究者がこんなのをするので僕の方向性が間違ってないと思います。
でもワザワザMC/DCを使う事情がなければMCCを導入するのも悪くないでしょう。