5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ホワイトボックステストのカバレッジの違いを説明できるようになろう

Posted at

はじめに

ソフトウェアエンジニアとして 2 回目の春を迎えた新人です。こちらは、ホワイトボックステストにおけるコードカバレッジ(C0 / C1 / C2 / MCC)の違いについて述べた記事です。ベーシックなトピックで恐縮ですが、私の理解の整理のためでもありますのでどうかご容赦ください!

前提知識

  • ホワイトボックステスト:

    ソフトウェア開発におけるテスト方法の一種です。ソフトウェアの構造に目を向け、プログラムが設計通りに動くかを確認します。ソフトウェア開発者の目線で行うテストといえます。また、対として「ブラックボックステスト」があります。こちらは、ソフトウェアを中身の見えない箱だと捉え、ソフトウェアの入出力のみに着目するテスト方法です。ソフトウェア利用者の目線で行うテストといえます。

  • コードカバレッジ:

    テスト対象のプログラミングコードのうち、どの程度テストした(またはしたい)かを表す言葉です。テストを綿密に行うほうがより確実な結果を得られますが、その分時間がかかってしまいます。それぞれのプロジェクトに対して最適なカバレッジは異なります。

コードカバレッジ(C0 / C1 / C2 / MCC)

flow.jpg

このような処理フローを持つプログラムを考えます。

C0(命令網羅)

flow_c0.jpg

C0(命令網羅ともいいます)では処理(命令)に着目します。すべての処理が実行されるように考慮するため、テストケースは

- 仕事を休むパターン

の一件です。

C1(分岐網羅)

flow_c1.jpg

C1(分岐網羅ともいいます)では分岐に着目します。すべての分岐を通るように考慮するため、テストケースは

- 体調不良または無気力のため仕事を休むパターン
- 体調不良でも無気力でもないパターン

の二件です。C1 でテストを行うとすべての分岐を通ることからすべての処理を行えるので、C0 を検証したことにもなります。

C2(条件網羅)

flow_c2.jpg

C2(条件網羅ともいいます)では判断の中身(条件)に着目します。それぞれの条件の真偽のパターンをすべて考慮するため、テストケースは

- 体調不良であり無気力でない(よって仕事を休む)パターン
- 体調不良ではなく無気力である(よって仕事を休む)パターン

または、

- 体調不良であり無気力でもある(よって仕事を休む)パターン
- 体調不良でも無気力でもないパターン

のいずれかの二件です。ただし、上のパターンは両ケースとも仕事を休むパターンであり、C1 は満たさないことがわかります。このように C2 では C0(今回は OK)や C1 を満たせないことがあります。

MCC(複合条件網羅)

MCC(複合条件網羅ともいいます)は C1 と C2 をどちらも満たすようなカバレッジです。C1 を検証すれば C0 も満たされるので、MCC は C0、C1、C2 すべてを満たすことになります。

今回の場合、C2 で挙げた二つ目のケース

- 体調不良であり無気力でもある(よって仕事を休む)パターン
- 体調不良でも無気力でもないパターン

は C1 も C2 も満たしているので MCC です。プログラムによっては MCC のテストケース数が C1 や C2 のケース数より多くなることもあります。

おわりに

コードカバレッジは初学者にとって理解しにくい概念だと思います。質問や経験を重ねて徐々に習得したいです。記事について、間違いや不足点、気になることがありましたらお教えください。

参考

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?