テスト

今までちゃんとテストコードを書いておらず、あまり理解出来てなかったため
調べたことをまとめた。

テストのカバレッジとは?

カバレッジ(網羅)は、
失敗するとか成功する という判断ではなく、 
  カバレッジ率がある程度高かったら、おっけー。
  低過ぎたらアカン 
というぐらいにみるもので 
100%のほうが " 望ましい " というもの。 

カバレッジ率が100%ではない=バグがある
というわけではなく、 
テストが充実していない 
ということを示していおり、バグとはちょっと異なる。 

たとえば、
・テストダブルを作るのが難しい、あるいは、その機能にテストダブルまで作るほどの工数はさけない。
という場合、優先度の問題で切り捨てる場合もある。
そういうものもカバレッジしなかったりする。


テストの種類

大きくわけて、2つの考え方がある

ホワイトボックステスト
ブラックボックステスト

ホワイトボックステスト

ソースコード中の 文の分岐 や 条件 を
網羅的に実行することでバグを見つけるテスト。
テストで実行した文、分岐、条件の割合が、テストの進捗となる

代表的なもの
ステートメントカバレッジ
・ブランチカバレッジ
・コンディションカバレッジ

ステートメントカバレッジ

「C0」や「命令網羅」とも言う。

命令文の実行テスト。

命令文を具体的にいうと、
「平日の19時までに来客した人は50%off」
 条件:平日、19時まで、来客
 命令文:50%off

判定条件による制御パスの分岐がある場合は、片側のみのテストで判定される。

また、命令文の実行が出来たか出来ていないかを見ているため、
モデルのバリデーション(validates)などは
「validation機能を追加する」が命令であり、バリデーションの値として正しいか?までは見ずに
カバレッジが100%になれてしまう。

ブランチカバレッジ

「C1」や「分岐網羅」とも言う。
分岐テスト。分岐式の成立と不成立(true,false)の両方が実行されている必要がある。
ただ、分岐テストに必要な条件の網羅はする必要がなく、分岐の確認がtrue/falseで出来ていれば良い。
ステートメントより強い評価。

 

コンディションカバレッジ

「C2」や「条件網羅」
分岐に設定されている条件が試された割合。
true・falseの有無は問わず、それぞれの条件自体の確認(「条件と同じ場合」や「条件と違う場合」)ができていればOK。組み合わせを網羅的にやる必要はない。
例えば、

if(a == 0 && b < 0) {
……
}

こういった分岐があった場合、a = 0、b = 0のテストケースとa = 1、b = -1のテストケースを作成してテストを行えば、コンディションカバレッジカバレッジ率は100%になる
 

ブラックボックステスト

ホワイトボックスとは違い、ソースコードは見ず、内部処理は考えないで入力とその結果だけで判断するテスト。
また、ホワイトボックステストとは違い、以下内容の両方を実行する必要がある

同値分割方

有効同値:プログラムが期待する入力値
無効同値:プログラムが期待しない入力値
上記それぞれ代表値を選び、入力して実行した結果を確認する方法

境界値分割法

有効同値と無効同値の協会となる値を入力して実行し、結果を確認する方法。



おわり