TDD를 안 해봐서 궁금한 것들

 

질문 : 딴지 거는게 아니라 테스트코드를 짜본적이 없어서 궁금해서 질문 드립니다.!

  • 보통 한 api를 만드는건 혼자 담당할텐데 api를 구현 한 후 postman이나 스웨거 혹은 화면단과 연동 하고 가짜 데이터 넣어서 찍어 보는 것과 테스트 코드에서 목데이터로 테스트 해보는 것엔 어떤 차이가 있나요?
  • 1번의 케이스는 사람이 단순하게 몇 개의 데이터로 찍어볼테지만 테스트코드에선 보통 반복문 같은거로 수많은 데이터로 검증? 하는것 같더라구요 아마 그 검증하는 데이터 크기의 차이 때문에 tdd를 하는 것인지 궁금합니다.
  • 간단한 단위 테스트 정도는 해본적있습니다. 근데 뭔가 같은 일을 두 번 하는 느낌 밖에 안 들어서 깊은 공감을 못했습니다..


답변 : 답변드립니다.

  • 우선 소프트웨어를 테스팅하는 것과 개발자가 TDD를 수행하는 것이 다르다는 점을 느끼셔야하는데 대부분의 경우 이 부분에서 잘 설득이 되지 않는점을 양해해주시기 바랍니다. 
  •  TDD시 Mock을 이용하는 이유
    • SW테스팅 : API가 요구사항에 맞게 동작하는지 테스트케이스를 설계하고 테스트용 데이터를 생성한 후 검증하며, 개발완료 후 테스팅이 수행됨
    • TDD : API를 개발하기 위한 프론트와 백엔드간의 협업 매개체 (문서) 작성이 주 목적임 (예: Spring RestDocs)
  • 테스트 데이터의 차이
    • SW테스팅 : 요구사항에 부합하는 테스트 데이터를 케이스별로 설계하고 해당 테스트 케이스를 검증. 테스트케이스 설계방식에 따라 수십, 수백가지에 대한 데이터.
    • TDD : 개발자가 필요하다고 생각한 만큼의 데이터만 테스트. 주로 메인흐름, 대안흐름, 예외흐름에 대한 1건씩 정도
  • 일을 두 번 한다는 느낌

    • 지금 까지의 개발 방식 : 코드를 짠다 → 애플리케이션을 구동한다 → 테스트한다 → 수정한다 → 개발완료 후 테스터가 테스트 → 오류 있으면 코드 수정 후 테스트 

    • 첫 TDD를 적용: 레이어별 crud에 대한 단위(unit) 테스트코드 작성 → 끝
    • TDD의 개발 방식 : 유스케이스 1에 대한 코드를 짠다 → 1에 대한 테스트코드를 실행한다 → 성공하면 앞 사이클 반복 → 실패하면 수정 → 사이드 이펙트가 예상되면 관련 테스트코드를 실행하고 에러나는 곳 수정 및 리펙토링 

      • 도메인의 유스케이스 중심으로 개발이 진행됨


댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기