#1 ATTD 강의 - ATTD란
Published on 04 Jul 2020
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를 해서 재사용을 할 수도 있음
- 테바테