Post

통합테스트 vs 단위테스트 vs 인수테스트

서론

테스트를 범위에 따라 분류했을때 크게 유닛테스트, 통합테스트, 인수테스트로 나눌 수 있다.
오늘은 이 세가지 테스트의 개념에 대해서 알아보자.

단위테스트

흔히들 Unit Test 라고 부르는 단위테스트는 프로그램에서 테스트 가능한 가장 작은 단위를 실행하여 예상대로 동작하는지 확인하는 테스트를 말한다.

단위테스트에서 테스트 대상 단위가 엄격하게 정해져 있지는 않지만, 일반적으로는 클래스 또는 메소드 수준에서 테스트를 한다.
테스트하는 단위가 작을 수록 복잡성이 낮아지고, 단위 테스트의 동작을 나타내기가 쉬워진다.
즉, 테스트 대상 크기를 작게 설정해서 단위 테스트를 최대한 간단하게 작성해야한다.

단위테스트는 소프트웨어 내부 구조나 구현 방법을 고려하여 개발자 관점에서 테스트를 진행하는 화이트박스 테스트이다.
그러므로 단위 테스트를 진행하기전 어플리케이션의 내부 코드에 대한 지식을 알고있어야한다.

통합테스트

통합테스트는 단위테스트보다 비교적 큰 동작을 테스트한다.
여러가지 모듈들을 모아서 이것들이 의도대로 동작하는지를 확인하는 테스트이다.

외부 라이브러리와 내부의 여러가지 모듈들을 묶어서 정상적으로 동작하는지를 검증한다.
이때 DB에 접근하고, 프로그램이 전체적으로 제대로 동작하는지를 확인하는데 필요한 모든 동작을 수행한다.
하지만, 통합 테스트가 응용 프로그램이 완전하게 작동하는 것을 무조건 증명하는 것은 아니다.

통합테스트의 장점은 단위테스트에서는 발견하기 어려운 버그를 찾을 수 있다는 점이다.
단위테스트 특성상 외부 모듈이나 DB관련된 작업을 Mocking해서 처리하는데, 통합테스트에서는 정상적으로 모듈을 불러와 테스트하므로 이러한 부분을 검증하기 좋다.
또한 실행 환경에 대한 검증을 할 수 있는 것도 장점이다.

단점으로는 통합테스트는 단위테스트보다 더 많은 코드를 실행하기때문에 정확히 어디서 에러가 발생했는지를 확인하는 것이 번거롭다.
또한 테스트를 위해서는 어느정도 코드가 완성된 다음에서야 가능하다는 점도 있다.

인수테스트

통합테스트, 단위테스트가 개발자의 관점에서 진행하는 테스트라면 인수테스트는 비지니스적인 관점에서 진행하는 테스트이다.
사용자의 요구사항이 제대로 반영되었는지, 계획대로 어플리케이션이 개발되었는지를 테스트한다.

인수테스트는 애자일 개발 방법론에서 파생된 개념이다.
통합테스트와 다른점은 ‘누가’, ‘어떤 목적으로’, ‘무엇을 하는가’ 를 테스트 한다는 것이다.
보통 API를 테스트하며 내부 구조나 구현 방법을 고려하기보다는 실제 사용자 관점에서 테스트를 하는 것이 큰 특징이다.
즉, 인수테스트는 코드나 구현에 관심을 가지지 않는 블랙박스 테스트이다.

마치며

오늘은 세가지 테스트 방식에 대해서 알아보았다.
각 상황에 맞는 테스트를 선택해서 활용하는 것이 소프트웨어 개발을 하는데 있어 중요한 부분일 것이다.

This post is licensed under CC BY 4.0 by the author.