본문 바로가기
Develop/Spring

TDD

by jaeyoungb 2022. 11. 13.

TDD란?

Test Driven Development의 약자로, 테스트 주도 개발이라는 뜻이다.

테스트 주도 개발이란 건 테스트를 먼저 하고 코드 구현은 그 다음에 한다는 의미이다.

 

 

TDD 개발 방식

실패하는 테스트 → 실패하는 테스트를 성공할 만큼의 기능 구현 → 성공하는 테스트
→ 리팩토링 → 실패하는 테스트와 성공하는 테스트 확인

 

유효한 패스워드인지 검증하는 방식을 예로 들면 다음 과정과 같다.

  1. 패스워드가 특수문자를 포함하면서 알파벳 소문자를 포함하는지 테스트, 검증, 리팩토링 단계 반복
  2. 패스워드가 특수문자 + 알파벳 소문자 + 알파벳 대문자를 포함하는지 테스트, 검증, 리팩토링 단계 반복
  3. 패스워드가 특수문자 + 알파벳 소문자 + 알파벳 대문자 + 숫자를 포함하는지 테스트, 검증, 리팩토링 단계 반복
  4. 패스워드가 특수문자 + 알파벳 소문자 + 알파벳 대문자 + 숫자를 포함하면서 8 ~ 20 길이(length)를 만족하는지 테스트, 검증, 리팩토링 단계 반복

 

 

TDD 특징

  • 모든 조건에 만족하는 테스트를 먼저 진행한 뒤, 조건에 만족하지 않는 테스트를 단계적으로 진행하면서 실패하는 테스트를 점진적으로 성공시켜나감
  • 테스트 실행 결과가 'failed'인 테스트 케이스를 지속적으로 그리고 단계적으로 수정하면서 테스트 케이스 실행 결과가 'passed'가 되도록 만듬
  • 테스트가 'passed' 될 만큼의 코드만 우선 작성
  • 실패하는 테스트 → 실패하는 테스트를 성공할 만큼의 기능 구현 → 성공하는 테스트
    → 리팩토링 → 실패하는 테스트와 성공하는 테스트 확인
     흐름을 반복
  • 실제 TDD 방식으로 잘 진행된다면, 테스트와 기능 구현, 리팩토링까지 빠르게 진행이 가능

 

 

TDD의 장점

  • 테스트를 통과 할 만큼의 기능을 구현하기 때문에, 한번에 많은 기능을 구현할 필요가 없다.
  • 단순한 기능에서 복잡한 기능으로 확장 되기 때문에, 그때 그때 검증을 빼먹지 않고 할 수 있다.
  • 그때 그때 리팩토링을 빠르게 진행하기 때문에, 리팩토링의 비용이 상대적으로 적어진다.
  • 항상 테스트 케이스가 존재하기 때문에, 기존 코드를 수정 하더라도 상대적으로 안전하다.
  • 리팩토링을 통해 꾸준히 코드를 개선하기 때문에, 코드의 품질을 일정 부분 유지할 수 있다.
  • 수정 결과를 그때 그때 확인할 수 있기 때문에, 잘못된 코드가 남아있을 가능성이 상대적으로 줄어든다.
  • 결과적으로 야근 시간이 줄어들 수 있다.

 

 

TDD의 단점

  • 익숙한 개발 방식은 아니기 때문에, 어려울 수 있다.
  • 테스트 코드 작성에 부정적인 개발자에게는 좋지 않은 방식일 수 있다.

 

 

TDD 개발 방식은 함께 하는 팀원들 간에 사전 협의가 되어야 한다. TDD 방식에 대한 논의가 필요하고, 팀원들 각자가 TDD를 수용하고, 적용해 보려는 합의가 필요하다.

 

https://yoojin99.github.io/cs/TDD/

 

추가

'Develop > Spring' 카테고리의 다른 글

Intellij에서 MySQL 연동 및 DB에 데이터 저장  (3) 2022.11.16
Spring Rest Docs - Asciidoc  (0) 2022.11.14
Testing - Mockito  (1) 2022.11.13
Spring Rest Docs  (0) 2022.11.12
Spring MVC - API 문서화  (1) 2022.11.12