[테스트] TDD (테스트 주도 개발)

2022. 4. 4. 00:44CS/스터디

TDD 란?

 

Test Driven Development의 약자로 테스트 주도 개발이라고 한다.

반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현

짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming의 Test-First 개념에 기반을 둔 단순한 설계를 중요시한다.

 

* eXtreme Programming 이란?

미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토 타입을 완성하는 애자일 방법론 중 하나이다.

추가 요구사항이 생기더라도 실시간으로 빠르게 반영할 수 있다.

* 단위 테스트란?

말 그대로 한 단위만을 테스트하는 것. (일반적으로 class 단위)

 

 

TDD 개발 주기

- Write a failing test  단계에서는 실패 테스트 코드를 먼저 작성

- Make the test pass 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성

- Refactor 단계에서는 중복 코드 제거, 일반화 등의 리팩터링을 수행한다.

 

여기서 실패 테스트 코드를 작성할 때까지는 실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 최소 실제 코드를 작성해야 하는 것이다. 이를 통해 불필요한 설계를 피할 수 있고 정확한 요구사항에 집중할 수 있다.

 

일반 개발 방식

 

요구사항 분석 -> 설계 -> 개발 -> 테스트

 

TDD 개발 방식

 

일반 개발방식과 다르게 테스트 코드를 작성한 뒤에 실제 코드를 작성하는 것.

설계 단계에서 프로그래밍 목적을 미리 정의하고, 어떤 걸 테스트해야 할지 미리 정의해야 한다.

테스트 코드를 작성하는 도중에 발생하는 예외는 테스트 케이스에 추가하고 설계한다.

이후에 테스트가 통과된 코드만 코드 개발 단계에서 실제 코드로 작성.

 

 

TDD Tool

: JUnit , CUnit, CPPUnit, PyUnit

 

TDD 잘하는 방법

 

1. 계속해서 비용 낮출 방법을 생각하자.

예시) 게임 개발하는데 stage 2를 테스트해야 한다.

stage 1을 클리어하고 stage 2를 테스트해야 한다.  

: 이럴 때 stage 1을 거쳐야 하니까 테스트 비용이 증가한다.

 

2. Back Door 접근법

- 테스트할 때 파라미터를 적용하여 본인이 원하는 시스템의 시작점으로 가게 한다.

: 중복적인 코드들을 자동화하도록 업그레이드하는 연습을 해보자.

 

+ 추가)

- TDD 개발 방식에 익숙하지 않고 일반 개발 방식에 익숙해진 사람은 어려워하기 때문에 개발 경력이 적은 사람은 적용하기 쉽다. 

- SI 회사들은 품질보다 납기일 준수가 더 중요하기 때문에 TDD 방식을 잘 사용하지 않는다. (자체 솔루션 회사들은 필수)

- 무조건 JUnit 같은 툴을 사용해야 한다고 생각하지만 이런 규칙에 얽매이는 거부터 애자일한 방식이 아니다...

 

[참고자료]

https://hanamon.kr/tdd%EB%9E%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C/

 

TDD란? 테스트 주도 개발 - 하나몬

TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다.

hanamon.kr

 

728x90