728x90
얕은 지식으로 정리해보는 TDD!!
한두달 간의 프리코스 기간에는 재미없고 뭔지 모르기만 했던 테스트 주도 개발이 약 2주일만에 재밌고, 편해졌다!
TDD란?
- 테스트 코드를 먼저 작성 후 작성된 테스트코드에 맞춰 제품 코드를 작성하는 프로그래밍 방법
- 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나
- TDD는 단순한 설계를 장려하고 자신감을 불어 넣어 준다.
TDD가 좋은 이유
- 내 코드 및 개선한/개선할 코드에 자신감을 준다.
- 코드를 이래저래 개선해도 '테스트 코드가 지켜줄거야!' 라는 자신감이 붙는다.
따라서 개선에 대해 두려움이 없어지고, '일단 바꿔보자'라는 생각을 할 수 있게 된다.
즉, 망설임이 없어진다. (= 개발에 속도가 붙는다.)
- 코드를 이래저래 개선해도 '테스트 코드가 지켜줄거야!' 라는 자신감이 붙는다.
- 기능 명세 및 테스트 명세를 대신할 수 있게 된다.
- 테스트명을 Given-When-Then 방법과 같이
테스트 내용을 상세하게 나타낼 수 있는 이름을 사용한다면
그것이 문서 그 자체가 된다.
- 테스트명을 Given-When-Then 방법과 같이
TDD가 안좋은 이유
- 적응 기간, 배우는 기간이 오래 걸린다.
- 개발 초기의 개발 기간이 증가한다.
TDD가 어려운 이유
- 적용해본 경험이 없어서
- 설계가 기본이 되기에 (설계 경험이 없어서)
→ 즉 긴 시간동안 축적되는 설계 노하우, 연습, 훈련 등이 기본적으로 필요하기 때문에 어렵다고 할 수 있다.
→ 테스트 작성을 하는 것이 아닌 테스트 주도 개발의 순서와 싸이클을 익혀야하는 것이다.
TDD를 적용하는 방법 (이론)
0. 기능을 설계한다.
- 단위테스트를 작성한다.
- 물론, 테스트할 기능이 구현되지 않았으므로 테스트가 실패하는 테스트 코드가 탄생한다.
- 기능을 구현한다.
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
- 리펙터링 한다.
- 리팩터링 - 일단 테스트를 통과하게만 하는 와중에 생겨난 모든 중복을 제거한다.
TDD를 적용하는 방법 (코드 예시)
로또 문제
- 로또 구입 금액을 입력하면 구입 금액에 해당하는 로또를 발급해야 한다. (로또 1장의 가격은 1000원)
- 지난주 당첨 번호와 보너스 볼을 입력하면 당첨 순위에 해당하는 당첨 개수와 수익률을 계산해 출력한다.
설계
- 기능을 설계한다.
단위 테스트 작성
- 기능목록 : [ ] 구입금액을 가진다.
- PurchaseAmount의 구입 금액에 대한 테스트를 작성한다.
- PurchaseAmount와 구입 금액을 저장할 매개변수가 없으므로 오류가 발생한다.
기능 구현
- 구입 금액을 생성하는 테스트 및 기능 명세에 맞춰 기능을 만든다.
이렇게 한 번의 사이클 끝.
단위 테스트 작성
- 기능목록 : [ ] 구입금액이 1000원 이상이 아니고 5만원을 초과하면 에러가 발생한다.
- PurchaseAmount 구입 금액의 범위를 확인하고 에러를 발생시키는 기능을 작성한다.
- PurchaseAmount 구입 금액을 확인하는 기능이 없으므로 에러가 발생하지 않아 테스트에 오류가 발생한다.
기능 구현
- 구입 금액의 범위를 확인하는 테스트 및 기능 명세에 맞춰 기능을 만든다.
리펙터링
- 코드가 중복되거나 분리할 수 있는 것들을 리펙터링 한다.
이렇게 또 한 번의 사이클 끝.
위 예시의 순서대로, TDD 사이클대로 계속해서 구현해 나가는 것... 그것이 TDD!
(아래 링크는 부끄럽지만 제 코드...)
각 커밋을 보면 초기 기능 명세에 따라 테스트와 함께 기능이 구현되는 것을 확인할 수 있다.
비록 테스트만 따로 커밋을 하기에는 커밋이 너무 많아질 것 같아 페어와 합의 후 기능 하나별로 커밋을 하였다.
(커밋을 처음으로 그나마 정상적으로 작성했다... 글로 덕분이다... 첵오...)
https://github.com/woowacourse/kotlin-lotto/compare/main...otter66:kotlin-lotto:step1
프리코스를 하고, 코테를 보는 두어달 동안은 전혀 이해 하지 못했지만,
우테코를 하며 1~2주 동안 배우고 공부한 TDD는 재밌었다! TDD랑 조금은 친해진 것 같다!
728x90
'우아한테크코스 5기 > 정리' 카테고리의 다른 글
레벨 4 미션 정리 (0) | 2023.11.01 |
---|---|
레벨 3, 레벨 4 팀 프로젝트 총정리 (0) | 2023.10.29 |
우아한테크코스 5기 모바일 레벨2 총정리 (0) | 2023.06.18 |
우아한테크코스 5기 모바일 레벨1 총정리 (0) | 2023.04.08 |
[git] origin에 merge된 브랜치에서 추가로 진행된 commit 이동하기 (4) | 2023.02.27 |
댓글