テスト
今までちゃんとテストコードを書いておらず、あまり理解出来てなかったため
調べたことをまとめた。
テストのカバレッジとは?
カバレッジ(網羅)は、
失敗するとか成功する
という判断ではなく、
カバレッジ率がある程度高かったら、おっけー。
低過ぎたらアカン
というぐらいにみるもので
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%になる
◯ブラックボックステスト
ホワイトボックスとは違い、ソースコードは見ず、内部処理は考えないで入力とその結果だけで判断するテスト。
また、ホワイトボックステストとは違い、以下内容の両方を実行する必要がある
同値分割方
有効同値:プログラムが期待する入力値
無効同値:プログラムが期待しない入力値
上記それぞれ代表値を選び、入力して実行した結果を確認する方法
境界値分割法
有効同値と無効同値の協会となる値を入力して実行し、結果を確認する方法。
おわり