우리가 원하는 대로 예상하는 대로 동작하는지 확인하는 작업!
함수, 특정한 기능, UI, 성능, API 스펙 등 우리가 개발할 때 원하는 조건에 충족하는지!
프로그램을 작성하기 전에 테스트를 먼저 하라!
Test the program before you write it!
-켄트 벡 (Kent Beck)
TDD는 Test-driven developemt, "테스트 주도 개발"이예요.
풀어서 "개발(코드를 작성하기) 전에 테스트 코드를 먼저 작성하는 방식"을 말해요.
즉, TDD는 특정한 기술을 말하는 것이 아니라 우리가 어떻게 개발해 나갈 건지를 정의하는 개발 방식, 개발 방법론 중 하나예요!
우리가 쇼핑몰을 만든다고 해볼까요?
제가 "아주 세분화해서 코드를 작성해요"라고 계속 강조하죠??
이렇게 기능을 세밀하게 세분화해서 코드를 작성해서 테스트가 성공하도록 해야하는 것이 중요해요!
처음 해당 기능의 테스트 코드를 작성했을 때, fail이 나오는건 어찌보면 당연하죠. (인공지능이 아닌이상..)
fail을 두려워하지 마세요! TDD의 시작은 fail에서부터 시작하니까요.
TDD의 핵심은 fail이 나오면 최대한 빠르게 pass를 만드는 거예요!
테스트 코드를 작성할 때 함수 명을 a로 했다면, 어떤 함수를 알 수 있게 리팩토링.
return의 값이 마음에 들지 않는다면 리팩토링.
if문과 for문 같이 조건문과 반복문이 마음에 들지 않는다면 리팩토링.
중복되는 코드가 있다면 리팩토링.
한 줄로 줄일 수 있다면 리팩토링.
1, 2, 3의 과정을 겪는다면 결국 밑의 그림처럼 됩니다.
기능을 세분화해서 테스트 코드를 작성.
fail이 나오면 pass할 때까지 더 쉽게 pass하도록 세분화.
pass가 나오면 리팩토링.
리팩토링을 하려면 또 코드를 수정하고 돌려서 fail
fail이 나오면 또 더 쉽게 pass하도록 세분화.
이러한 반복이 진행됩니다.
참고 할 수 있는 유튜브:
내가 TTD에 집착하는 이유는? - 코드스쿼드,
테스트 코드와 TDD 🧪 - 드림코딩 by 엘리
예정대로 테스트를 진행할 수 있다.
테스트를 나중에 하게 되면 지금 당장 편하지만,
나중에는 시간문제와 방대한 양의 코드, 귀찮음으로 테스트를 제대로 진행하지 못하게된다.
코드에 대한 신뢰도 상승과 심리적인 안정감이 매우 크다.
개발자는 배포할 때 종교인이 되어 기도한다. 집에가도 가는 것이 아닌 영혼보내기.
나의 코드에 신뢰가 쌓이면 자연스럽게 흥미 유발이 될 것이고 심리적으로도 안정이 될 것이다.
처음에는 오래걸려도 테스트코드가 쌓이다보면 방대한 양의 코드도 쉽게 유지보수 가능하다.
후임이 프로젝트의 유지보수를 맡더라도 회사입장에서 안정적이게 맡길 수 있다.
지금 당장의 성과를 보여주어야 하는 스타트업과 같은 경우에는 TDD 적용이 매우 어렵다.
심적으로 시간적으로 여유가 부족. -> 적용하기 어려운 가장 큰 이유
정말정말정말 애자일 프로세스에 적합하다. 애자일을 모른다면 클릭
쉽게 말해서, 애자일은 최대한 빠르게 기능을 만들어서 고객에게 보여주고 피드백을 받은 후 다시 고치고 하는 반복작업을 하는거예요.
반복 작업을 할 때에는 미리 만들어 놓은 테스트코드가 정말 중요하겠죠!
참고 할 수 있는 유튜브: 애자일의 꽃 TTD에 대한 상념 - 닥코