개발노트

TDD (Test Driven Development) 본문

Computer Science/Software Enginerring

TDD (Test Driven Development)

개발자? 2023. 5. 4. 00:28

 

Unit Test (단위 테스트)

단위 테스트는 프로그램의 기본 단위가 되는 모듈을 테스트하는 것이다. 모듈 테스트라고도 한다.

개발자가 개발한 모듈이 의도대로 동작하는지를 테스트한다.

TDD 싸이클을 기반하여 테스트하게되면,

모듈 내의 데이터 흐름에 대한 예외 케이스를 작성(Red)하고, 이를 통과하도록 모듈을 개발(Green) 한다. 이때, 가짜 객체(Mock object)를 사용하여 테스트를 진행할 수 있다.

웹의 백엔드에서 단위테스트를 진행하는 레이어는 service,  controller 이며, 각각 내부 기능들에 대해 단위 테스트를 진행한다.

Repository 레이어는 보통 통합 테스트 대상이다.


TDD (Test Driven Development)

TDD 란 Test Driven Development 의 약자로, 테스트 주도 개발을 의미한다. 

즉, 테스트 코드를 먼저 작성하고, 이에 맞춰 실제 서비스 코드를 작성하는 방식의 개발 방법론이다.

 

TDD Cycle 4단계

출처) https://wooaoe.tistory.com/33

1. Red : Fail 되는 테스트 코드 작성

2. Green : 동작하는 실제 모듈 코드 작성

3. Refactor : Clean code - FIRST 원칙

4. 이를 반복한다.

 

TDD 장점

1. TEST 를 먼저 작성하기 때문에 입출력 요구사항이 아주 명확해진다.

2. Code Coverage 확보 가능

3. bug 발생률 감소

4. 쉬운 테스트 작성부터 마련하기 때문에 코드의 응집도가 높아지고 결합도는 낮아진다.

 

TDD 단점

1. Unit Test 를 만들기 어려운 모듈이 있다. 예) GUI, 네트워크, ..

     → 반론: 노하우가 쌓이면 이런 모듈도 Test 가 가능하다

2. 비용이 많이 든다.

3. Unit Test 가 너무 많다.

     → 반론: Unit Test 가 많을수록 코드 품질관리가 용이해진다. 비싼 과제는 품질 확보가 무엇보다 중요하다.

 

좋은 Test Code 작성 방법

Clean Code 에서는 좋은 테스트 코드 작성시 FIRST 원칙을 제안한다.

1. Fast : 테스트는 자주 실행시킬 수 있을 만큼 빨라야한다.

2. Independent : 각각의 테스트 코드는 독립적이어야 한다.

3. Repeatable : 어느 환경에서도 반복 가능해야 한다.

4. Self-Validating : 테스트는 결과를 boolean 으로 반환하고, 이 결과로 자체적 검증이 가능하도록 해야한다.

5. Timely : 테스트 코드는 적시에(→ 서비스 코드 구현하기 직전) 작성되어야 한다. 

 

무엇을 Test 해야 하는가?

Right : 올바른 결과를 보여주는가?

Error conditions : 오류 조건을 강제로 일어나게 할 수 있는가?

Bounary conditions : 경계 조건을 준수했는가?

Inverse relationships : 역 관계를 검사할 수 있는가? 결과를 되돌렸을 때 초기값으로 돌아오는가?

Cross checking using other means : 다른 수단을 사용해 교차 검증이 가능한가?

Performance characteristics: 성능 조건은 기준에 부합하는가?

 

TDD 를 위한 라이브러리

  • JUnit
  • AssertJ
  • Mockito

 


참고 블로그

 

 

반응형

'Computer Science > Software Enginerring' 카테고리의 다른 글

Clean Code | 주석  (0) 2023.05.24
Clean Code | 함수  (2) 2023.05.21
SOLID 객체지향 5가지 원칙  (0) 2023.04.24
Refactoring 리팩토링  (0) 2023.04.24
IntelliJ 유용한 단축키 모음  (0) 2023.04.18
Comments