TL;DR

偽陰性は、本来失敗するはずのテストが成功すること。偽陽性は、本来成功するはずのテストが失敗すること。偽陰性は偽陽性と違って起きていることに気付きにくい。

仕組み

プロダクトコードが正しいかどうかと、テストが成功したかどうかの組み合わせで 4 つに分ける。

テストが成功テストが失敗
プロダクトコードが正しい真陽性偽陽性
プロダクトコードが誤っている偽陰性真陰性

偽陰性

本来失敗するはずのテストが成功してしまうこと。原因には次のようなものがある。

  • 空振り: テストを実行したつもりが、実行されていなかった
  • コードカバレッジが足りない
  • テスト対象のロジックがテストコードに漏れ出している

偽陰性は起きていることに気付きにくい。見つけるには、プロダクトコードにわざと誤りを入れて、テストが検知できるかを確かめる欠陥挿入が使える。テストコードのテストは、テストコードではなくプロダクトコードで行うということである。

偽陽性

本来成功するはずのテストが失敗してしまうこと。脆いテストや、E2E テストなどの信頼できないテスト(Flaky test)が原因になる。偽陰性と違って、起きていることに気付きやすい。

関連

出典