Backend/기타
단위테스트( Unit Test ) 와 테스트 주도 개발( TDD )
chjysm
2022. 11. 14. 16:00
단위 테스트( Unit Test ) 란?
응용프로그램에서 테스트 가능한 가장 작은 소프트웨어( Java에서는 주로 클래스 )를 실행하여
예상대로 동작하는지 확인하는 테스트이다.
이러한 테스트 방식은 테스트 주도 개발 개념( TDD )과 합쳐지면 더 강력해진다.
테스트 주도 개발( TDD ) 이란?
테스트 주도 개발이란 테스트 위주의 반복 테스트를 이용한 소프트웨어 방법론이다
기존 방식과의 차이점
일반 개발 방식
요구사항 분석, 설계, 개발, 테스트, 배포 의 개발 절차를 가지게 되는데
여러 잠재적 문제점을 가지고 있다.
- 소비자의 요구사항이 처음부터 명확하지 않을 수 있다.
- 개발자가 이해하고 구현한 내용과 소비자의 요구사항이 다를 수 있다.
- 완벽한 설계가 사실상 불가능하다.
- 전체 기능을 한번에 테스팅하기 때문에 자잘한 버그 또한 있을 수 있다.
- 위의 사항으로 인해 짧은 기간에 재설계 및 재구현과 같은 비효율적이고 좋지 않은 개발 절차를 가지게 될 가능성이 높다.
TDD
- 테스트 케이스를 먼저 작성
- 테스트 케이스에 맞는 실 개발 진행
- 테스트 진행
- 피드백 및 추가 기능 구현, 리팩토링
- 반복
위 와 같은 개발 절차를 가지고 진행한다.
단위 테스트 + TDD의 장점과 단점
장점
-
코드의 유지보수성 향상
-
객체 지향적인 코드 생산
-
프로그래밍 시간이 단축된다
- 테스트 문서 대체
- 테스팅에 대한 시간과 비용을 절감
단점
- 기존의 개발 방식을 바꿔야 한다.
- 처리 기한이 급한 경우 생산성이 저하된다.
좋은 단위테스트의 조건
- 1개의 테스트 함수에 대해 assert를 최소화하라
- 1개의 테스트 함수는 1가지 개념 만을 테스트하라
좋고 깨끗한 테스트 코드는 FIRST라는 5가지 규칙을 따라야 한다.
- Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다.
- Repeatable: 어느 환경에서도 반복 가능해야 한다.
- Self-Validating: 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.
참조
https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/