TDD(테스트 주도 개발) 이란?

Chani·2021년 10월 31일
2
post-thumbnail

해당 포스팅은 아래 링크의 "TDD 실천법과 도구"를 읽고 공부하며 정리한 글입니다.
"TDD 실천법과 도구" 책 전체를 PDF 공개합니다.

TDD가 왜 필요한가?

  • 백엔드 API 테스트 같은 경우, swagger로 테스트 가능하고, 프론트는 바뀌는걸 즉각적으로 확인이 가능한데 따로 테스트를 해줘야 하나??
  • 전통적인 테스트 방법 : console.log로 찍어보기
    • 전통적인 테스트 과정
  • 아무리 간결한 코드더라도 시간이 지나면 까먹게 되어있고, 그때마다 테스트 코드(console.log)를 넣어줘가면서 테스트를 할수는 없다.
  • 작업 분량이 늘어날수록 확인이 어려워진다.
    • 이것저것 console.log에 찍어보고 지웠다 썼다 하면 전에 뭘 테스트 했는지 까먹을수도 있고 여러모로 집중력이 많이 필요한 작업
  • 회귀 테스트 : 이미 개발과 테스트가 완료된 모듈에 수정을 가하게 될 경우, 기존에 동작하던 다른 부분도 정상적으로 동작하는지 확인해야한다.
    • 원칙적으로 기존 모듈에 수정이 가해질 때마다, 해당 모듈뿐 아니라 그 모듈과 연관되어있는 다른 모든 모듈도 변함없이 목표대로 동작하는지를 매번 테스트 해야한다.

TDD란 무엇인가?

  • 업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것
    • TDD 한줄요약
  • 즉, 함수나 모듈을 작성할때 작성 종료조건을 먼저 정해놓고 코딩을 시작한다
  • 아래와 같이 먼저 테스트 코드를 작성하고 이에 맞춰서 함수를 작성한다.
    • 아래 테스트 케이스를 모두 만족하면 sum 메소드가 정상적으로 작성되었다고 판단하기로 한것

TDD의 목표

  • 잘 동작하는 깔끔한 코드
    • 잘 동작할 뿐만 아니라 깔끔함도 잘 동작함과 동등한 수준의 개발목표로 삼는것
    • 즉, 유지보수 편의성, 가독성, 안전성 등 까지도 모두 고려해야한다

TDD의 진행방식

  1. 질문(Ask): 테스트 작성을 통해 시스템에 질문한다.
    • 테스트 수행 결과는 실패
  2. 응답(Respond): 테스트를 통과하는 코드를 작성해서 질문에 대답한다.
    • 테스트 성공
  3. 정제(Refine): 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다
    • 리팩토링
  4. 반복(Repeat): 다음 질문을 통해 대화를 계속 진행한다.

profile
프론트엔드에 스며드는 중 🌊

0개의 댓글