미션 후기
미션을 통해 배운 점
- 인수 테스트 기반 리팩터링 방법 학습
- 인수 테스트 기반 TDD 학습
- 주 생성자 지정하여 주 생성자 한 곳에서 인스턴스 변수 초기화 관리
- 인터페이스를 활용하여 외부 라이브러리 의존성 제거
3주 차 미션에서 인수 테스트(ATDD)에 대한 맛보기를 경험했다면
이번 미션은 조금 더 심화 과정의 느낌이었다
가장 중요한 포인트는 ATDD를 통해 코드를 보호하고 그 안에서 레거시 코드를 리팩터링 하는 경험을 하는 것이었다
확실히 인수 테스트의 장점은 느낄 수 있었다
사실 인수 테스트의 장점이라기보단 테스트 코드의 장점이기도 했지만
리팩터링 하다가 기능이 작동하지 않는 부분이 생기면 빠르게 캐치할 수 있었다
인수 테스트를 미리 작성하게 되면 가장 큰 장점은 '다음은 어떤 걸 개발해야 하지?'에 대한 이정표 역할을 해준다는 점이 가장 좋았다
많은 피드백을 받았던 과정이라 힘들긴 했지만 그만큼 얻은 것도 많았던 미션이었다
인수 테스트 특징과 활용법
추천 방법
- Top-Down으로 방향을 잡고, Bottom-Up으로 구현하기
- 인수 테스트 작성을 통해 요구사항과 기능 전반에 대한 이해를 선행
- 내부 구현에 대한 설계 흐름을 구상
- 설계가 끝나면 도메인부터 차근차근 TDD로 기능 구현
- 만약 도메인이 복잡하거나 설계가 어려울 경우 이해하고 있는 부분부터 기능 구현
인수 테스트를 이용한 리팩터링의 장점
- 인수 테스트 작성 후 리팩터링을 하면 사이드 이펙트에 대한 피드백을 바로 받을 수 있음
- 기능을 구현하다 꼬이거나 잘못되어도 인수 테스트가 성공한 시점으로 리셋할 수 있음
- 안심하고 작은 단위로 메서드를 분리
TDD가 어려운 이유 중 하나는 명확하지 않다는 점이다
TDD의 규칙 자체는 간단하지만 잘하고 있는지 알기 어렵고
대부분 추상적이다
ATDD를 활용하면 이런 부분에 대해서 약간의 가이드 역할을 해줄 수 있다
인수 테스트로 TDD로 개발할 방향을 제시해주며, 중간에 길을 잃더라도 인수 테스트를 기점으로 다시 롤백이 가능하다
리팩터링에 대한 부담이 줄어드는 것이다 :)
또한 TDD는 도메인 부분부터 개발하는 경우가 대부분인데, 이때 도메인 설계에 대한 지식이 부족하다면 테스트 코드를 작성하기란 정말 어렵다
도메인이 너무 복잡하거나 어렵다면 인수 테스트 작성을 통해 요구사항에 가이드를 잡고
이해하는 부분부터 차근차근 TDD를 통해 구현하는 게 많은 도움이 된다
Code / Feedback
🚀 1단계 - 인수 테스트 기반 리팩터링
https://github.com/next-step/atdd-subway-service/pull/527
🚀 2단계 - 경로 조회 기능
https://github.com/next-step/atdd-subway-service/pull/551
🚀 3단계 - 인증을 통한 기능 구현
https://github.com/next-step/atdd-subway-service/pull/570
🚀 4단계 - 요금 조회
https://github.com/next-step/atdd-subway-service/pull/609
'개발 교육 > 우아한 테크캠프 Pro' 카테고리의 다른 글
7. 레거시 코드 리팩터링 (0) | 2022.07.12 |
---|---|
6. 서비스 진단하기 (0) | 2022.07.12 |
4. 그럴듯한 서비스 만들기 (0) | 2022.07.11 |
3. 인수 테스트 주도 개발 (0) | 2022.07.07 |
2. JPA (0) | 2022.07.07 |