개발방법론

[TDD] Test code를 작성하는 이유와 Unit test와 Integraion test의 차이

반응형
Test code를 작성하는 이유

 

개발과정이 길어지게 되면 초반의 문제들을 모르고 지나가는 경우들이 많습니다. 그렇게 되면 나중에 작성된 코드들을 다시 수정해야 한다거나 무너지는 경우들이 있기에 테스트 코드들로 문제를 미리 발견하여 짚고 넘어 가야합니다. 여기서 "애자일한 방법"이라는 용어가 사용되는데 이게 뭔지 살펴보겠습니다.

 

애자일(Agile) 방법

간단하게 말하면 개발 방식을 유연하게 가져가겠다는 뜻입니다. 기획문서만 보고 개발하는 것이 아닌 디자이너, 기획자 등 참여하는 모든 사람들과 소통하며 피드백을 더해서 개발해 나간다는 의미 입니다. 애자일 프로세스는 민첩한 변화 대응을 중요시 합니다.

 

 

다시 본론으로 돌아와서 test code를 작성하는 이유를 애자일 방법론에 빗대어 설명하면 작은 단위의 프로그램을 피드백과 함께 테스트해나가면서 개발하기 위함입니다.

 

정리

  • 기능 추가 및 수정과정에서 버그를 줄이기 위함
  • 코드에 대한 신뢰성 향상

 

 

Unit test란

 

어플리케이션의 하나의 모듈단위 테스트를 말합니다. 하나의 클래스나 함수단위를 테스트하는 것을 말합니다. 

테스트를 성공한 함수나 클래스는 예상치 못한 에러가 발생할 확률이 낮아집니다. 

 

하지만 주의해야할 점은 private 함수는 테스트하지 못한다는 점입니다. 이 경우 별도의 컴파일러 등을 통해 테스트해야 합니다. 그렇지 않으면 테스트를 위해서 어플리케이션 코드들을 수정해야하는 경우가 생길 수도 있습니다.

 

 

 

Integration test란

 

unit test로는 충분히 테스트할 수 없는 함수나 클래스는 Integration test를 통해 테스트할 수 있습니다. 이런 경우에는 Integration test가 더 효과적일 수도 있습니다. unit test와는 다르게 어플리케이션의 시작부터 검사를 실시하기 때문에 DB에 연결하여 가져오는 데이터들이 올바른지 확인할 수 있습니다.

 

Integration test는 unit test에서 나오는 불분명한 에러들을 찾을 수 있게 해줍니다. Integration test에서 이 에러들을 찾아서 제거하는데 시간이 꽤 걸릴 수 있습니다. 이 부분은 개발하고자하는 어플리케이션의 인적, 시간적 자원에 맞춰서 실행하시는 것을 추천드립니다.

 

 

결론

 

unit test와 integration test는 서로를 대체하는 테스트가 아닙니다. unit test는 빠르게 작성할 수 있고 integration test는 어플리케이션의 신뢰성을 높일 수 있습니다. 따라서 무엇이 정답이다라고 할 수 있는 것이 아니라 어플리케이션에 따라 두 테스트 모두 해야하는 경우가 생길 수 있습니다.

 

 

반응형