더북(TheBook)

11.8 디버깅

작업하는 데이터셋이 커지면 일일이 출력해보고 확인하면서 디버깅하는 게 번거롭고 불편해지기 시작한다. 데이터셋이 클 때도 디버깅을 잘할 수 있는 몇 가지 방법을 소개하겠다.

입력 크기를 줄여라

가능하다면 데이터셋의 크기를 줄여라. 예를 들어 프로그램에서 텍스트 파일을 읽어야 한다면 처음 10줄 정도만 읽어보거나 가능한 작은 예제로 시작하는 게 좋다. 텍스트 파일을 수정하거나 프로그램을 수정해서 처음 n 줄만 읽는 방법을 써라.

오류가 있다면 오류를 조작할 수 있는 가장 작은 값까지 n을 줄여보고, 오류를 발견하고 수정할 때까지 점진적으로 n을 늘려보라.

요약 정보와 타입을 확인하라

전체 데이터셋을 출력하고 확인하기보단 데이터의 요약 정보를 출력해보라. 예를 들어 사전에서 항목의 개수를 출력해보거나 리스트 숫자들의 합을 출력해보라.

올바른 타입이 아닌 값이 런타임 오류가 발생하는 일반적인 원인이다. 이런 종류의 오류를 디버깅할 때는 값의 타입을 출력해보는 정도로 충분하다.

자기 점검 코드를 작성하라

때로는 오류를 자동으로 확인하는 코드를 작성해야 한다. 예를 들어 리스트 숫자들의 평균을 계산한다면 결과가 리스트에서 가장 큰 원소보다 큰지, 가장 작은 원소보다 작은지 확인해보는 것이다. 이런 종류의 검사는 상식을 벗어난(insane) 결과를 탐지하기 때문에 새너티 체크(sanity check)라고 부른다.

다른 종류의 검사로는 두 가지 다른 계산 결과를 비교해서 일치하는지 확인하는 것이다. 이를 일관성 검사(consistency check)라고 한다.

출력을 서식화한다

디버깅 출력을 서식화하면 오류 지점을 찾기가 쉬워진다. 116쪽의 디버깅 예에서 이미 이를 본 적이 있다. pprint 모듈에는 내장 타입을 사람이 읽기 쉬운 서식으로 출력하는 pprint 함수가 있다(pprintpretty print(예쁘게 출력) 하라는 뜻이다).

다시 말하지만, 비계(scaffolding)를 구축하는 데 시간을 들인 만큼 디버깅에 들어가는 시간을 줄일 수 있다.

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