2.4 改良条件判定テスト(MC/DC)
「改良条件判定テスト(MC/DC:Modified Condition/Decision Coverage)」 は、複合条件(複数の条件がANDやORで結びついた判定)の中に潜む論理的なバグを、最小限のテストケース数で確実に見つけ出すための高度なホワイトボックステスト技法です。
前節のデシジョンテストでは、if (A && B) のような複合条件において、個々の条件(A や B)が結果にどう影響したかを見逃してしまう弱点がありました。MC/DCは、この弱点を克服するために設計されています。
MC/DCの核心:「独立した影響」の証明
Section titled “MC/DCの核心:「独立した影響」の証明”MC/DCの最大のルールは、「複合条件内のすべての個々の条件が、全体の判定結果に対して独立して影響を与えることを証明する」 という点にあります。
「独立して影響を与える」とは、他の条件を固定したまま、対象の条件のTrue/Falseを切り替えたとき、全体の判定結果も連動して切り替わることを意味します。
具体例:Z = A AND B の場合
Section titled “具体例:Z = A AND B の場合”すべての組み合わせ(複合条件テスト)を行うと $2^2 = 4$ パターンのテストが必要になりますが、MC/DCでは以下の 3パターン で網羅できます。
| テスト | 条件A | 条件B | 判定(Z) | 証明できること |
|---|---|---|---|---|
| 1 | True | True | True | (ベースとなる基準) |
| 2 | False | True | False | 条件Aが独立して影響を与えた(テスト1と比較) |
| 3 | True | False | False | 条件Bが独立して影響を与えた(テスト1と比較) |
- テスト1と2を比較すると、BはTrueのまま固定されているのに、Aを反転させたらZも反転しました。これで「Aは正しく機能している」と証明できます。
- テスト1と3を比較すると、AはTrueのまま固定されているのに、Bを反転させたらZも反転しました。これで「Bは正しく機能している」と証明できます。
このように、条件の数が $N$ 個ある場合、すべての組み合わせをテストすると $2^N$ 個のテストが必要になりますが、MC/DCを使えば 「最小で $N+1$ 個」 のテストケースで高い網羅性を確保できます。これが「爆発的にテストケースが増えるのを防ぐ」MC/DCの最大のメリットです。
TTAが注意すべき「短絡評価 (Short-Circuiting)」
Section titled “TTAが注意すべき「短絡評価 (Short-Circuiting)」”テクニカルテストアナリスト(TTA)が実務でMC/DCを適用する際、プログラミング言語の仕様である 「短絡評価(ショートサーキット)」 に注意しなければなりません。
短絡評価とは、C、Java、Pythonなどの現代の多くの言語で採用されている仕組みで、「左側の条件だけで結果が確定した場合、右側の条件は評価(実行)すらされない」という挙動です。
A AND Bにおいて、Aが False ならば、全体がFalseになることが確定するため、Bは実行されません。A OR Bにおいて、Aが True ならば、全体がTrueになることが確定するため、Bは実行されません。
TTAは、カバレッジツールがこの短絡評価をどのように扱っているか(評価されなかった条件をどうカウントしているか)を理解し、ツールが示すMC/DCの達成率を正しく読み解くスキルが求められます。
TTAとしての適用ガイドラインと業界標準
Section titled “TTAとしての適用ガイドラインと業界標準”MC/DCは、テストの「費用対効果(ROI)」を極限まで高めた非常に優れた技法ですが、テスト設計が複雑になるというデメリットもあります。そのため、すべてのコードに適用するのではなく、以下のような特定のコンテキストで適用されます。
- ミッションクリティカルなシステム: 人命や甚大な経済的損失に関わるシステムにおいて必須となります。
- 機能安全規格での義務付け:
- 航空機ソフトウェア (DO-178C): 最も安全性が求められる「ソフトウェアレベルA」において、MC/DCの100%達成が義務付けられています。
- 自動車機能安全 (ISO 26262): 最も安全要件が厳しい「ASIL D」において、MC/DCが強く推奨(実質必須)されています。
- 複雑なビジネスロジック: 規格に関わらず、複数のフラグや状態が複雑に絡み合う重要な中核ロジックに対して、ピンポイントでMC/DCを適用することで、バグの流出を効果的に防ぐことができます。