🦒
間違って覚えがちなテストの false positive (偽陽性)と false negative (偽陰性)
結論
ソフトウェアのテストにおける false positive (偽陽性)と false negative (偽陰性)はそれぞれ次の意味です。
- false positive ... 正しい実装をしているのだけど、意図せずテストが失敗する
- false negative ... 誤った実装をしているのだけど、意図せずテストがパスする
ついでに、 true positive (真陽性)と true negative (真陰性)はそれぞれ
- true positive ... 誤った実装をしていて、テストも失敗する
- true negative ... 正しい実装をしていて、テストもパスする
positive / negative とはなんなのか
単に positive は特定の対象が検出されたことを示す言葉で、ソフトウェアのテストにおいては、プログラムの誤りを検出したことを指します。なので、テストが失敗することを positive、 テストがパスすることを negative といいます。
仮に正しい実装にも関わらずテストが失敗するなら、その positive は誤りなので false positive です。
間違えてしまう理由
しばしばこれを逆に使われるケースがあります。なぜでしょう。
筆者があやふやに記憶していたころは、なんとなく「テストが失敗するのはよくないことだから negative かなあ」みたいな考えだったように思います。
positive / negative は結果としてなにか検出したかを表していて、その結果の良し悪しについて言及していません。テストが失敗しないときは negative だけど、開発者にとってはポジティブな結果です。
テストにおける positive / negative の言葉の意味に注意すると、間違えにくいかなと思います。
おまけ
筆者は「陽◯ャは無駄にやかましい[1]から、必要なくテストが落ちるのは偽陽性」と教えてもらったことがあり、それ以降は間違えなくなりました。
参考文献
-
あくまで覚え方であって、筆者がそのように考えているわけではないです ↩︎
Discussion