728x90

스타트업의 구인공고나 개발 블로그를 보면 TDD라는 단어를 쉽게 접할 수 있다.
TDD는 무엇일까?

TDD란?

Test Driven Development로 '테스트 주도 개발'이라고 한다.
반복적인 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현하는 방법론이다.

TDD의 개발 주기

일반적인 개발 방식 TDD
요구사항 분석 > 설계 > 코드 개발 > 테스트 > 배포 요구사항 분석 > 설계 > 테스트 코드 작성 > 코드 개발 > 리팩토링

 

TDD의 개발 주기

 

1. 테스트 실패

구체적인 하나의 요구사항을 검증하는 하나의 테스트를 추가한다.

추가된 테스트가 실패하는지 확인한다. 실패하는 것을 확인할 수 있어야 테스트 코드가 동작함을 믿을 수 있다.실패하는 이유? 개발 코드가 작성되거나 변경되지 않았기 때문. (테스트 코드의 문제가 아니다.)

 

2. 테스트 성공

추가된 테스트를 포함해, 모든 테스트가 성공하게끔 실제 코드를 개발한다.

테스트의 성공은 모든 요구사항을 만족했음을 의미한다.
테스트 성공을 위해 최소한의 코드 변경만 진행한다.

 

3. 리팩토링

코드를 정리한다.

가독성, 적용성, 성능을 고려한다.

 

간단히 실제 예를 들어보자.
날짜가 주어지면, 해당 날짜에 예약이 되어있는지 판단하는 기능을 만든다고 가정해보자.

1. 요구사항 분석
클라이언트로부터 날짜를 받으면, 해당 날짜가 예약 DB에 있는지 확인해 있으면 true, 없으면 false를 응답한다.

2. 설계 & 테스트코드 작성 (무엇을 테스트할지 설계, 현재는 실패하는 테스트 코드)

2022년이 주어지면 true or false가 나오는 테스트 프로그램을 만든다.

3. 테스트를 통과할 실제 코드 작성

2022년이 주어지면 해당 년도가 예약 DB에 있는지 확인해 있으면 true, 없으면 false를 응답

4. 테스트 프로그램으로 3을 실행한다.

5. 테스트를 통과했다면, 새로운 테스트를 추가한다.

2022년 05월까지 테스트를 추가했을 때 확인하는 프로그램

6. 2-5번을 반복해 기능을 완성한다.

TDD에서 가장 중요한 점

⚠️ 개발자는 기능의 요구사항과 명세를 분명히 이해하고 있어야 한다.

TDD를 사용하는 이유

  1. 소비자의 요구사항이 명확하지 않을 때, 유연하게 개발을 할 수 있어 재 설계 시간이 단축된다.
  2. 디버깅 시간이 단축된다.
  3. 테스트 문서의 대체가 가능하다.
  4. 테스트를 통과할만큼의 최소한의 코드만 개발하기 때문에 오버 엔지니어링을 방지한다.
  5. 추가 구현이 용이하다.

TDD의 단점

  1. 생산성의 저하
  2. 테스트 코드를 작성하기 어렵다.

참고

https://media.fastcampus.co.kr/knowledge/dev/tdd/

https://inpa.tistory.com/entry/QA-📚-TDD-방법론-테스트-주도-개발

썸네일

https://wonkooklee.github.io/thumbnail\_maker/

728x90

'Computer Science > Web programming' 카테고리의 다른 글

Spring 버전별 특징  (2) 2022.08.19
[CS] MSA 구조 정리  (0) 2022.08.04
[Web] REST vs RESTful vs REST API(RESTful API)  (2) 2021.12.31
[Web] DTO와 VO의 차이  (1) 2021.12.17
[Web] Spring의 AOP, Interceptor, Filter  (4) 2021.12.14
복사했습니다!