칼 포프의 "반증 가능성"과 소프트웨어 테스팅
사내에서 셈 카너(Cem Kaner)의 "Testing Computer Software"라는 책으로 스터디를 하기로 해서 내가 맡은 부분인 2장을 다시 읽어보게 됐다. 요약하면, 칼 포프의 이론이 소프트웨어 테스팅에 직접적으로 적용될 수 있다는 것이었다.
칼 포퍼(Karl Popper)의 반증 가능성(反證可能性, Falsifiability)에 대해 위키백과에서 검색해보면 ‘검증하려는 가설이 실험이나 관찰에 의해서 반증될 가능성이 있는 것을 의미한다’고 나온다. 풀어서 이야기하면 이렇다.
“과학적 지식은 절대 불변의 진리가 아니다. 반증을 통해 기존 과학에 오류가 있음을 밝힐 수 있고 잘못된 지식은 제거돼 간다. 이러한 과정이 반복되고 누적되면서 과학은 진리를 향해 진보한다.”
소프트웨어 테스팅도 마찬가지인 것 같다. 개발자는 ‘자신의 코드가 완벽하다’고 주장할 수는 있지만, 테스터는 ‘개발자의 코드가 완벽하지 않다’는 것을 보여주기 위해 소프트웨어 속에 잠재된 결함을 찾아내 버그 리포팅을 한다. 개발자는 수정을 하고, 또 다른 결함이 테스터로부터 보고되고, 그 결함은 또 수정이 된다. 테스트 영역이 높을수록 소프트웨어가 지닌 결함은 줄어들게 되고, 궁극적으로 소프트웨어에 대한 신뢰도는 상승하게 된다. 물론, 이 시점에서도 ‘소프트웨어가 완벽하다’라고 그 누구도 주장할 수는 없다. ‘소프트웨어가 완벽하다’는 것이 참이라는 것을 증명하기 위해 모두가 노력하고 있지만, 언제라도 또 다른 결함이 발견될 가능성이 있기 때문이다.
어렵다. 사실 결론 자체는 여러 테스팅 서적을 통해 익히 들어온 말이지만, 기존 이론을 테스팅과 결부지어 생각할 줄 아는 대가(Cem Kaner)의 안목이란 참 대단한 것 같다.
토트 블로거 ‘@OEHAN’ / http://soulcity.thoth.kr