🦒

間違って覚えがちなテストの false positive (偽陽性)と false negative (偽陰性)

2024/01/27に公開

結論

ソフトウェアのテストにおける 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]から、必要なくテストが落ちるのは偽陽性」と教えてもらったことがあり、それ以降は間違えなくなりました。

参考文献

脚注
  1. あくまで覚え方であって、筆者がそのように考えているわけではないです ↩︎

Discussion