PSD( Private-Self-Development )

단위테스트( Unit Test ) 와 테스트 주도 개발( TDD ) 본문

Backend/기타

단위테스트( Unit Test ) 와 테스트 주도 개발( TDD )

chjysm 2022. 11. 14. 16:00

단위 테스트( Unit Test ) 란?

응용프로그램에서 테스트 가능한 가장 작은 소프트웨어( Java에서는 주로 클래스 )를 실행하여

예상대로 동작하는지 확인하는 테스트이다.

이러한 테스트 방식은 테스트 주도 개발 개념( TDD )과 합쳐지면 더 강력해진다.

 

테스트 주도 개발( TDD ) 이란?

테스트 주도 개발이란 테스트 위주의 반복 테스트를 이용한 소프트웨어 방법론이다 

 

기존 방식과의 차이점

일반 개발 방식

요구사항 분석, 설계, 개발, 테스트, 배포 의 개발 절차를 가지게 되는데

여러 잠재적 문제점을 가지고 있다.

  • 소비자의 요구사항이 처음부터 명확하지 않을 수 있다.
  • 개발자가 이해하고 구현한 내용과 소비자의 요구사항이 다를 수 있다.
  • 완벽한 설계가 사실상 불가능하다.
  • 전체 기능을 한번에 테스팅하기 때문에 자잘한 버그 또한 있을 수 있다.
  • 위의 사항으로 인해 짧은 기간에 재설계 및 재구현과 같은 비효율적이고 좋지 않은 개발 절차를 가지게 될 가능성이 높다.

 

TDD

  1. 테스트 케이스를 먼저 작성
  2. 테스트 케이스에 맞는 실 개발 진행
  3. 테스트 진행 
  4. 피드백 및 추가 기능 구현, 리팩토링 
  5. 반복

위 와 같은 개발 절차를 가지고 진행한다.

 

 

단위 테스트 + TDD의 장점과 단점

장점

  • 코드의 유지보수성 향상
  • 객체 지향적인 코드 생산
  • 프로그래밍 시간이 단축된다
  • 테스트 문서 대체
  • 테스팅에 대한 시간과 비용을 절감

단점

  • 기존의 개발 방식을 바꿔야 한다.
  • 처리 기한이 급한 경우 생산성이 저하된다.

 

좋은 단위테스트의 조건

  1. 1개의 테스트 함수에 대해 assert를 최소화하라
  2. 1개의 테스트 함수는 1가지 개념 만을 테스트하라

 

좋고 깨끗한 테스트 코드는 FIRST라는 5가지 규칙을 따라야 한다.

  1. Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
  2. Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다.
  3. Repeatable: 어느 환경에서도 반복 가능해야 한다.
  4. Self-Validating: 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
  5. Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.

 


참조

https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/

https://namu.wiki/w/%ED%85% 8C% EC% 8A% A4% ED% 8A% B8%20% EC% A3% BC% EB% 8F%84%20% EA% B0% 9C% EB% B0%9C

https://wooaoe.tistory.com/33

https://mangkyu.tistory.com/143