페이지

2022년 8월 14일 일요일

10.4 테스트 정리

 DeZero 개발에 한정한다면 테스트에 관한 지식은 이 정도면 충분합니다. 여기서 배운 것만으로도 DeZero 테스트 코드를 작성하는 데 아무런 무리가 없을 겁니다. 다만 앞으로 이 책에서는 테스트에 대한 직접적인 설명은 생략하고 진행하겠습니다. 만약 테스트 코드가 필요하다고 느껴지면 스스로 추가해보기 바랍니다.

또한 테스트 파일들은 하나의 장소에 모아 관리하는 것이 일반적입니다. 이 책에서도 테스트코드는 tests 디렉터리에 모아뒸습니다(테스트요 편의 기능도 추가로 구현해뒀습니다). 관심있는 분은 해당 테스트 코드를 찾아보세요. 이번 단계에서 작성한 것과 비슷한 코드를 많이 발견할 수 있을 겁니다. 덧붙여서, 테스트 파일들은 다음 명령으로 한꺼번에 실행할 수 있습니다.

$python -m unittest discover tests

이와 같이 discover라는 하위 명령을 사용하면 discover다음에 지정한 디렉터리에서 테스트 파일이 있는지 검색합니다. 그리고 발견한 모든 파일을 실행하는 것이죠, 기본적으로는 지정한 디렉터리에서 이름이 test*.py 형태인 파일을 테스트 파일로 인식합니다(변경할 수 있습니다). 이것으로 test 디렉터리에 들어 있는 모든 테스트를 한번에 실행할 수 있습니다.

DeZero의 tests 디렉터리에는 정답을 체이너에게 묻는 테스트도 있습니다.예를 들어 시그모이드 함수를 테스트하는 경우 동일한 입력으로 DeZero와 Chainer 각각에 계산을 시키고 출력값이 거의 같은지 비교합니다.


또한 DeZero의 깃허브 저장소는 트래비스 CI라는 지속적 통합(continuous integration(CI))서비스와 연계해뒀습니다. DeZero의 깃허브 저장소에서 코드를 푸시(push)하고, 풀 리쿼스트(pull request)를 병합하고, 매시간 자동으로 테스트가 실행되도록 설정해좋은 것이죠, 테스트 결과에 문제가 있으면 메일 등으로 보고됩니다. 게다가 DeZero깃허브 저장소의 첫 화면에는 [그림 10-1]과 같이 로고 하단 왼쪽에 빌드 상태가 표시되게 해뒀습니다.

'build: passing'은 빌드 후 테스트까지 통과했다는 표시입니다(테스트에 실패하면 'build:failed'라는 배치가 표시됩니다). 이처럼 CI도구와 예계하면 소스 코드를 지속해서 테스트할 수 있습니다. 코드의 신뢰성을 유지하는 요령이죠. 

지금의 DeZero는 작은 소프트웨어이지만 앞으로 더 큰 소프트웨어로 성장시킬 것입니다. 여기에서 설명한 테스트 방식을 도입하면 성장 과정에서도 코드의 신뢰성을 꾸준히 유지할 수 있을 것입니다.

댓글 없음: