Avatar 창조적이고 생산적이고 싶은 개발자

#1 ATTD 강의 - ATTD란

ATTD와 함께 클린 API로 가는 길

TDD가 어려운 이유?

  • 관계도에 대한 설정이 낮을수록 TDD는 어려움
  • 단위 테스트에 초점이 맞춰져 있어서 통합시에 문제가 발생하기도 함
    • 커버리지는 높아도 국한된 부분에 대해서만 테스트를 하기 때문에 통합시에 문제가 발생

      추천 도서

  • 테스트 주도 개발 - 켄트백
  • 소트워크 엔솔로지 - 엉클밥
  • 테스트 주도 개발로 배우는 객체 지향 설계와 실전 - 있음
  • Clean architecture - 있음
  • RESTFul Web API - 동물책

ATTD

  • TDD Cycle 앞에 인수 테스트를 추가
  • ATTD를 미리 작성해서 TDD를 작성하는데 많은 도움을 줌

강의 진행 순서

  • 매주 미션을 하나씩 4주동안
  • 하루 최소 1~2시간은 해야 할만한 분량
  • 리뷰는 4번정도는 해줘야 함
  • 리뷰어마다 다른 의견이 있으면 그걸 즐겨라
  • 리뷰에 대해서 익숙해져라
  • 다 하고나서 지우도 또 해봐라
  • 정답에 집착하지 말기

ATTD 리팩토링

단위 테스트 기반 리팩토링

  • 섹션 별로 분리
  • 각 섹션을 테스트로 작성
  • 리팩토링
  • 도메인 지식이 풍부할 경우 유용

인수 테스트 기반 리팩토링

  • 단위 테스트를 작성하기에는 도메인 지식이 부족하면 TDD Cycle진행이 어려움
  • 인수테스트를 미리 작성하면 리팩토링시 발생할 수 있는 사이드 이펙트를 보장받을 수 있음
  • 도메인 지식이 부족한 상태에서의 기존 코드 리팩토링

ATTD란?

  • 애자일의 방법론 중 하나
  • 다양한 관점을 가진 팀원(디자이너, 기획자, 테스터)들에게 공통의 이해를 심어주기 위한 테스트
    • 사용자 스토리, 인수 조건 등

인수 조건

  • 인수 테스트가 충족해야 하는 조건
  • 다른 업체에 팔아먹을 수 있도록 누구나 알아 들을 수 있도록 작성
  • Given/When/Then

    TDD : 테스트 주도 개발 ATDD : 인수 테스트 주도 개발 BDD : 행위를 정의하고 주도하는 개발

인수 테스트

  • 인수 조건을 바탕으로 인수테스트 작성
  • 작업 진행도를 어느정도 파악할 수 있음
  • 비용이 가장 비싼 테스트

Mock 서버 & DTO 정의

  • 인수테스트를 만들고 req duo, res dto를 정의, 목 서버 정의
    • 인수테스트가 일단 통과함
    • 병렬로 작업하는데 아주 유용함(프론트엔드 개발자가 목 데이터 달라고 하는게 좀 편해짐)

문서화

  • Spring Rest Docs를 활용하여 API 문서화
  • 커뮤니케이션을 원활하게 하기 위해서

기능구현 with TDD

  • 작은 단위로 줄여가면서
  • 반대로도 가능

    Q&A

    인수테스트 작성

    인수 조건 작성

  • 사용자 관점에서 올바르게 작동하는 조건을 작성
  • 요청에 대한 검증단계까지 포함되어야 함

    스프링 with ATDD

  • 클라이언트 RestAssured + SpringBootTest등 어노테이션을 활용한 테스트 서버
  • 목서버를 만들고 요청을 보내면 목 데이터를 내려줌
  • 목서버를 실제 비즈니직을 구현해주고 목 데이터가 테스트 데이터를 내려주도록 수정
  • 최종적으로 실제 환경에서 테스트

    인수테스트 작성

    인수테스트 작성 팁

  • 간단한 테스트를 만들어 성공시켜라
  • 다만 의미가 있는 테스트를 만들어라
  • When -> Then -> Given 순서로 작성
  • extract를 해서 재사용을 할 수도 있음
    • 테바테