프로그래밍 공부

[TDD] Test-Driven-Development란 무엇인가

1. TDD란 무엇인가

많은 개발자들이 개발보다는 디버깅에 많은 시간을 소요한다고 한다.

'만들긴 했는데... 문제가 있어...!' '조금 수정했는데... 갑자기 프로그램이 안 돌아가!'

싶은 문제들이 계속 발견된다는 것. 

 

"왜... 되는 거지?"와 "왜... 안 되는 거지?"가 반복되다 보면 개발자들은 절망에 빠지게 된다.

간단하게 정리하자면 이런 느낌이다.

사실 나도 해야 되는데... 만 생각하고 늘 미루던 것이 TDD였기에, 우테코에서 실행하며 계속 감을 잡고 있는 중이다.

 

1.1 TDD란

이때, 이를 해결하기 위한 방법으로 나타난 것이 TDD,Test Driven Development이다.

좌측이 구현코드, 우측이 테스트 코드 (feat. 로또 미션)

이는 말 그대로 테스트가 주도하는 개발을 의미하는데, 반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

다만, 왜 굳이 Driven이라는 단어를 썼는지에 집중해볼 필요가 있다. 

TDDTFD(Test First Development)리팩터링이 더해진 구조라고 볼 수 있는데, 즉, 테스트를 먼저 작성하고, 계속적으로 리팩터링을 진행하면서 코드를 보다 나은 방향으로 수정한다는 의미가 들어간다고 보면 될 것 같다.

 

1.1 TDD를 하는 이유

  • 디버깅 시간을 줄여준다. + 심신의 안정
  • 동작하는 문서 역할을 한다.
  • 변화에 대한 두려움을 줄여준다.
  • 구체적인 구현 내용이나 세부적인 사항보다는 그것이 무엇을 하는지 확인하는 용도
  • TDD를 하다보면 객체의 역할을 확인할 수 있게 됨.

 

 

 

2. TDD의 개발 주기

TDD의 대표적인 개발주기 그림. Red - Green - Refactor.

 

TDD의 개발 주기는 위의 그림에서 잘 나타나 있는데, 간단하게 설명하자면

<Red> 단계에서는실패하는 테스트 코드를 먼저 작성하고,
<Green> 단계에서는테스트 코드를 성공시키기 위한 실제 코드를 작성하며,
<Yellow> 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행하는 것으로 마무리한다.

이때 원칙은,

 

  • 원칙 1 - 실패하는 단위 테스트를 작성할 때까지 프로덕션 코드를 작성하지 않는다.
    = Red -> Green -> Refactor의 순서를 지킨다.
  • 원칙 2 - 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
  • 원칙 3 - 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
    = 필요한 기능 이외의 기능이나, 불필요한 것들을 더하지 않기 위해서. (오버엔지니어링 방지!)

 

3. TDD, 그래서 해야 되는가.

GDD. God-Driven-Development. 일단 신한테 빌어보자.

 

백엔드 엔지니어로서 느끼는 것은, 한번 터지면 정말 답이 없다는 것이다.

(현재 프로젝트하던 것에서도 문제가 하나 생겨서 밤잠을 줄였다... 빌드할 때마다 빌었다... TDD 했을걸...)

 

개발자 중에 분명 천재는 있고, 실수하지 않는 사람은 있지만, 나를 포함한 대다수는 분명히 실수를 한다. 작은 실수를 했을 때 빨리 찾으면 좋겠지만, 그것이 숨겨져 있다면 '무엇이 문제인지'를 찾는 데에도 오래 걸린다.

 

그렇기에, 결과적으로 TDD가 처음에 드는 노력이나, 시간의 양이 많아서 비효율적인 것처럼 보이더라도, 일단 해보고 난 이후의 입장을 이야기하자면, 훨씬 안정감이 든다는 것이다.

 

처음부터 완벽한 설계나 구현을 짜는 것은 어렵다. 그렇기 때문에 일단 테스트를 통과하는 코드를 짜고, 계속 고쳐 나가다 보면 보다 나은 코드를 만들 수 있다.

즉, 테스트를 통한 빠른 피드백으로 더 많은 삽질과 고민, 개발자로서 역량을 강화할 수 있다.

 

 

즉, TDD 한번 해보자라는 말을 길게 늘여쓴 것이다.

사실 귀찮고 어려워 보여서 힘들지만, 초반의 어려운 점을 부딪히다 보면 언젠가 GDD 대신 TDD를 할 수 있을 것이다.

 

 

참고자료

https://wooaoe.tistory.com/33

2022.02.22 우테코 TDD 강의