카테고리 없음

TDD(Test Driven Development)란?

Potwings 2021. 12. 28. 15:23

단위 테스트

 

좋은 단위 테스트의 특징

FIRST 규칙을 따라야한다.

Fast : 빠르게

Independent : 독립적으로

Repetable : 반복 가능한

Self-Validation : 결과값이 boolean으로 결과 값을 내어 자체적으로 검증이 되어야한다.

Timely : 적시에 테스트하려는 실제 코드를 구현하기 직전에 구현해야한다.

 

단위 테스트를 진행하는데 있어서 비용이 너무 클 경우 통합 테스트를 진행하는 것이 오히려 좋다.

 

 

TDD(Test Driven Development)

빨간 막대 - 초록 막대 - 리팩토링

 

TDD의 순서

>

1. 테스트 작성 : 테스트를 생성하기위해 동작 요구 기능 기반 인터페이스 개발

2. 코드 작성 : 테스트를 통과하기 위해 테스트 실행 코드 빠른 개발

3. 리팩토링 : 코드를 정돈하기 위하여 중복코드 & 임시코드 제거 후 모듈화 & 디자인 패턴 적용

4. 체크인 : 피드백을 위하여 모든 테스트를 동작시키고 요구 기능을 고도화하고 테스트를 발전시킨다.

 

>

1. 실패하는 작은 단위 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다.

2. 빨리 테스트를 통과하기 위해 프로덕션 코드를 작성한다. 이를 위해 정답이 아닌 가짜 구현 등을 작성할 수도 있다.

3. 그 다음 테스트 코드를 작성한다. 실패 테스트가 없을 경우에만 성공 테슽르르 작성한다.

4. 새로운 테스트를 통과하기 위해 프로덕션 코드를 추가 또는 수정한다.

5. 1~4 단계를 반속하여 실패/성공의 모든 테스트 케이스를 작성한다.

6. 개발된 코드들에 대한 모든 중복을 제거하며 리팩토링한다.

 

이와 같은 과정을 따라 개발을 진행하면 자연스럽게 프로덕션 코드보다  테스트 코드를 먼저 작성하게 될 것이다. 또한 이를 Spring과 같은 프레임워크에 적용하는 것은 다른 영역이다. 이러한 경우 ATDD(Application TDD)라고 불린다.

Spring에서는 TDD를 어떻게 적용할 수 있는지 알아보도록하자.

 

TDD 접근 방법

가짜로 구현하기 : 최대한 빨리 테스트를 통과하기 위해 정답이 아닌 가짜 정답을 구현하는 방법

- 실패하는 테스트를 가장 빠르게 구현하는 방법은 아무 값이나 반환하도록 하는 것이다. 그리고 테스트가 통과하면 단계적으로 상수를 변수를 사용하도록 변환한다.

변수를 사용하지 않고 상수를 반환하여 답이 아닌 방법으로 가짜 구현하여 최대한 테스트를 빨리 통과하는 것이 가짜 구현 방법이다. 가짜 구현으로 연습을 많이 해두면 복잡한 코드일 경우 단계를 잘게 쪼개서 TDD로 문제없이 개발하는 능력을 갖출 수 있다. 가짜 구현으로 개발하면 다음과 같은 2가지 효과를 얻을 수 있다.

- 심리학적 : 빨간 막대와 초록 막대 상태는 완전 다르다. 막대가 초록색이라면 어느 위치인지 알고 거기서부터 리팩토링해 갈 수 있다.

- 범위 조절 : 하나의 구체적인 예에서 일반화를 함으로써 불필요한 고민으로 혼동되는 일을 예방할 수 있다.

 

 

삼각측량법 : 값이 다른 여러 테스트를 작성하고, 이를 일반화하여 정답을 구현하는 방법

- 테스트 주도로 추상화된 과정을 일반화 하는 과정이다. 삼작 측량 방법은 테스트 예시가 2개 이상일 때에만 추상화를 해야 한다.

when

1 + 1

2 + 2

 

then

result == 2

result == 4

 

 

명백하게 구현하기: 정답을 바로 구현하는 방법

- 명백하게 구현하는 방법은 가짜 구현이라 삼각 측량 방법을 사용하지 않고 바로 정답을 구현하는 방법이다.

쉬운문제의 경우 바로 진짜 구현을 해도 괜찮다.

 

가짜로 구현하기와 삼각측량은 매우 작은 발검을이다. 그러므로 무엇을 타이핑해야 할지 알고 그걸 재빨리 할 수 있다면 그냥 구현해버리는 것이 좋다. 그러다가 만약 손가락이 머리를 따라오지 못하기 시작하면 다른 구현 기법을 사용하도록 하자.

 

출처 : https://mangkyu.tistory.com/182