TL;DR
偽陰性は、本来失敗するはずのテストが成功すること。偽陽性は、本来成功するはずのテストが失敗すること。偽陰性は偽陽性と違って起きていることに気付きにくい。
仕組み
プロダクトコードが正しいかどうかと、テストが成功したかどうかの組み合わせで 4 つに分ける。
| テストが成功 | テストが失敗 | |
|---|---|---|
| プロダクトコードが正しい | 真陽性 | 偽陽性 |
| プロダクトコードが誤っている | 偽陰性 | 真陰性 |
偽陰性
本来失敗するはずのテストが成功してしまうこと。原因には次のようなものがある。
- 空振り: テストを実行したつもりが、実行されていなかった
- コードカバレッジが足りない
- テスト対象のロジックがテストコードに漏れ出している
偽陰性は起きていることに気付きにくい。見つけるには、プロダクトコードにわざと誤りを入れて、テストが検知できるかを確かめる欠陥挿入が使える。テストコードのテストは、テストコードではなくプロダクトコードで行うということである。
偽陽性
本来成功するはずのテストが失敗してしまうこと。脆いテストや、E2E テストなどの信頼できないテスト(Flaky test)が原因になる。偽陰性と違って、起きていることに気付きやすい。