작성
·
76
2
안녕하세요 규원님. 강의 잘 보고 있습니다.
거짓 양성과 거짓 음성이 의미하는 바가 잘 이해가 되지 않아서 질문드립니다.
수업 중 제공해주신 표에서는:
거짓 양성: 테스트가 실패하지만 운영 코드가 테스트 시나리오를 만족하는 경우
거짓 음성: 테스트가 성공하지만 운영 코드가 테스트 시나리오를 만족하지 않는 경우
로 나와 있습니다.
하지만 제가 이해하기로는 정의가 반대인 것 같습니다:
거짓 양성: 테스트는 통과하지만 실제로는 코드에 문제가 있는 상황
거짓 음성: 테스트는 실패하지만 코드가 올바르게 동작하는 상황
예시로 제시해주신 코로나 검사 사례를 TDD에 적용해서 생각해보면, "코로나에 감염되었는가?"라는 테스트 시나리오가 있을 때:
거짓 양성: 테스트는 통과했지만(양성 결과) 실제로는 감염되지 않은 경우
이를 TDD로 연결하면: 테스트는 통과했지만 실제 코드는 요구사항을 만족하지 않는 경우
TDD에서 이 용어들의 정의가 명확히 정해져 있는 건지, 그리고 어느 쪽이 올바른 정의인지 궁금합니다.
감사합니다.
답변 2
2
태영님 안녕하세요. 강의 수강해주셔서 고맙습니다. :)
강의 내용 중 테스트 양성과 음성이 어떤 의미인지 혼동되시는군요. 종종 발생하는 일이라 오래전에 이 주제로 글을 쓰기도 했으니까 한 번 참고해 보시고요,
도움이 되시도록 좀 더 설명을 드려 보겠습니다.
우선 코로나 바이러스 테스트 얘기부터 해보면요, 자가 코로가 바이러스 테스트를 아마 해보셨을 것 같은데, 양성 반응이 나오면 코로나 바이러스에 감염된 것(또는 감염되었을 가능성이 매우 높은 것)입니다. 그렇죠?
식품의약품안전처 자료 참고
6. 검사결과가 시험선(T)과 대조선(C)이두 줄로 나타나면 양성으로 선별진료소 등을 방문, PCR 검사를 받아야 합니다. 검사 후엔 자택으로 이동, 결과확인 전까지 자가격리를 해야합니다.
여기서 코로나 바이러스 감염을 양성으로 보는 것은 테스트의 귀무가설(null hypothesis)을 '우리 몸이 코로나 바이러스에 감염되지 않았다'로 설정한 것입니다. 그래서 테스트를 통해서 뭔가 특별한 근거를 발견하지 못했다면 귀무가설을 채택하게 되고 이것을 음성이라고 합니다.
그리고 실제로는 귀무가설을 채택해야 하는데 기각하게 되는 상황(즉, 코로나 바이러스에 감염되지 않았다는 가설을 채택하지 않음)을 일종 오류(type I error), 또는 거짓 양성(false positive)라고 합니다. 그리고 다른 표현이 또 있는데 거짓 경보(false alarm)입니다.
그러니까
귀무가설 기각 = 양성 = 경보
가 됩니다.
이제 우리 몸을 시스템으로, 코로나 바이러스를 버그로 치환해보면 귀무가설은 '시스템에 버그가 없다'가 됩니다. 그래서 양성(경보)은 시스템에 버그가 있다는 뜻이고 테스트가 실패해서 프로그래머에게 알려주기를 기대합니다. 그런데 양성이 발생했는데 실제로는 버그가 없다면 테스트가 우리에게 잘못된 경보를 준 것이고 이 양성은 거짓 양성이 됩니다. 반대로 실제로는 버그가 있지만 이 버그를 감지해야 할 테스트가 실패하지 않고 음성 반응을 보이면 이것을 거짓 음성이라고 합니다.
질문을 보면 테스트 통과를 양성이라고 혼동하고 계신 것 같습니다. 테스트 시나리오 문구는 귀무가설입니다. 코로나 바이러스 검사 테스트 시나리오를 작성한다면 '우리 몸이 코로나 바이러스에 감염되지 않았다'가 되겠죠. 그리고 테스트가 성공하면 귀무가설을 채택하고 테스트가 실패하면 귀무가설을 기각합니다. 학문적으로 전자를 음성(negative)이라고 하고 후자를 양성(positive)이라고 합니다.
혹시 아직도 이해가 잘 안되시면 더 말씀해 주시거나 "what are false positive and false negative in software testing"으로 구글링을 해보시면 도움될 자료들을 많이 보실 수 있을거에요.
1
좋은 질문과 좋은 답변 감사합니다.
"귀무가설" 을 어떻게 설정하냐에 따라 헷갈리는 부분인 것 같네요.
소프트웨어 테스트에서는 귀무가설이 "유저 시나리오를 만족한다."라고 잘 지정했다는 사실을 기억한다면 이제 착각할 일은 없겠네요 ㅎㅎ !!