더북(TheBook)

9.5 디버깅

프로그램 테스팅은 어렵다. 이 장에 등장한 함수들은 손으로 결과를 확인할 수 있어서 비교적 테스트하기 쉽다. 그렇다 하더라도 모든 가능한 오류에 대해 테스트할 수 있는 단어 목록을 선택하는 것은 어려움과 불가능함 사이 어디쯤에 있는 일이다.

has_no_e를 예로 들어보자. 이 함수에는 확인해야 하는 두 가지 명백한 케이스가 있다. e가 들어간 단어는 반드시 False를 반환해야 하고, 그렇지 않은 단어는 True를 반환해야 한다. 각각의 케이스에 대해서 문제가 없어야 한다.

각 케이스에는 몇 가지 불분명한 서브케이스가 있다. e가 들어간 단어들 중에 처음에 e가 있는 단어, 끝에 e가 있는 단어, 중간 어딘가에 e가 있는 단어를 테스트해야 한다. 긴 단어, 짧은 단어, 빈 문자열처럼 아주 짧은 단어도 테스트해야 한다. 빈 문자열은 특별한 경우이며, 종종 오류가 숨어 있는 불명확한 케이스들 중에 하나다.

생성한 테스트 케이스뿐 아니라 words.txt 같은 단어 목록으로 프로그램을 테스트할 수도 있다. 결과를 검사하면 오류를 잡을 수 있지만, 주의해야 한다. 한 가지 오류(포함해서는 안 되지만 포함되어 있는 단어)는 잡을 수 있지만, 다른 오류(포함해야 하지만 포함되지 않은 단어)는 잡지 못할 수도 있다.

일반적으로 테스트를 하면 버그를 찾는 데 도움이 되지만, 좋은 테스트 케이스들을 생성하기는 어려우며, 만들었다고 하더라도 프로그램이 올바르다고 보장할 수는 없다. 전설적인 컴퓨터 과학자는 이렇게 말했다.

프로그램 테스팅은 버그의 존재를 보여주기 위해 사용될 수는 있지만, 결코 부재를 보여줄 수는 없다!

- 에츠허르 데이크스트라

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.