해당 포스팅은 아래 링크의 "TDD 실천법과 도구"를 읽고 공부하며 정리한 글입니다.
"TDD 실천법과 도구" 책 전체를 PDF 공개합니다.
TDD가 왜 필요한가?
- 백엔드 API 테스트 같은 경우, swagger로 테스트 가능하고, 프론트는 바뀌는걸 즉각적으로 확인이 가능한데 따로 테스트를 해줘야 하나??
- 전통적인 테스트 방법 : console.log로 찍어보기
- 아무리 간결한 코드더라도 시간이 지나면 까먹게 되어있고, 그때마다 테스트 코드(console.log)를 넣어줘가면서 테스트를 할수는 없다.
- 작업 분량이 늘어날수록 확인이 어려워진다.
- 이것저것 console.log에 찍어보고 지웠다 썼다 하면 전에 뭘 테스트 했는지 까먹을수도 있고 여러모로 집중력이 많이 필요한 작업
- 회귀 테스트 : 이미 개발과 테스트가 완료된 모듈에 수정을 가하게 될 경우, 기존에 동작하던 다른 부분도 정상적으로 동작하는지 확인해야한다.
- 원칙적으로 기존 모듈에 수정이 가해질 때마다, 해당 모듈뿐 아니라 그 모듈과 연관되어있는 다른 모든 모듈도 변함없이 목표대로 동작하는지를 매번 테스트 해야한다.
TDD란 무엇인가?
- 업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것
- 즉, 함수나 모듈을 작성할때 작성 종료조건을 먼저 정해놓고 코딩을 시작한다
- 아래와 같이 먼저 테스트 코드를 작성하고 이에 맞춰서 함수를 작성한다.
- 아래 테스트 케이스를 모두 만족하면 sum 메소드가 정상적으로 작성되었다고 판단하기로 한것
TDD의 목표
- 잘 동작하는 깔끔한 코드
- 잘 동작할 뿐만 아니라 깔끔함도 잘 동작함과 동등한 수준의 개발목표로 삼는것
- 즉, 유지보수 편의성, 가독성, 안전성 등 까지도 모두 고려해야한다
TDD의 진행방식
- 질문(Ask): 테스트 작성을 통해 시스템에 질문한다.
- 응답(Respond): 테스트를 통과하는 코드를 작성해서 질문에 대답한다.
- 정제(Refine): 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다
- 반복(Repeat): 다음 질문을 통해 대화를 계속 진행한다.