
중요한건 실패하는 테스트코드를 작성할 때 까지 실제 코드를 작성하면 안된다.
또한 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야한다.
실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다.
일반 개발 방식 VS TDD 개발 방식
일반 개발 방식
일반적으로 요구사항분석ㅡ>설계ㅡ>개발ㅡ>테스트ㅡ>배포의 형태로 개발주기를 갖는다.
이러한 방법은 개발을 느리게 하는 잠재적 위험이 존재한다.
1. 소비자의 요구사항이 처음부터 명확하지 않을 수 있다.
따라서 첨부터 완벽한 설계는 어렵다.
2. 자체 버그 검출 능력 저하 또는 소스코드의 풀질이 저하될 수 있다.
3. 자체 테스트 비용이 증가할 수 있다.
설계는 처음부터 완벽할 수 밖에 없기 때문에 불필요한 코드를 남거나 중복처리 될 가능성이 크다.
==> 유지보수를 어렵게 만들어 버린다.
작은 부분의 기능 수정에도 모든 부분을 테스트 해야하므로 전체적인 버그를 검출하기 어려워 진다.
==> 자체 버그 검출 능력 저하 ㅡ> 소스코드의 품질 저하, 또한 작은 수정에도 모든 기능을 테스트하기 때문에 테스트 비용 증가
TDD 개발 방식
테스트 코드를 작성한 뒤에 실제 코드를 작성

디자인(설계) 단계에서 프로그래밍 목적을 반드시 미리 정의한다.
또한 무엇을 테스트해야 할지 미리 정의해야한다.
테스트가 통과된 코드만 코드 개발 단계에서 실제 코드로 작성
이렇게 반복적으로 되다보면 재설계 시간이 절감된다.
ex)
JUnit = Java 단위 테스트 프레임워크
그 이후 CUnit, PyUnit ... xUnit 프레임 워크 탄생
TDD 장점
1. 디버깅 시간을 단축
만약 데이터가 잘못 나오면 모든 레이어들을 살펴보아야 하지만, TDD의 경우 자동화 된 유닛테스팅만을 전재하므로
특정 버그를 손 쉽게 찾아 낼 수 있다.
2. 코드가 내 손을 벗어나기 전에 가장 빠르게 피드백 받을 수 있다.
보통 '인수테스트'로 진행한다.
인수테스트란?
클라이언트가 의뢰한 소프트웨어가 사용자 관점에서 사용할 수 있는 수준인지 체크하는 과정
이미 90%이상 완성된 코드를 가지고 테스트하기 때문에 문제를 발견하여도 정확하게 원인이 무엇인지 진단하기 힘들다.
TDD로는 기능단위로 테스트하기 때문에 프로그래머의 손을 떠나기전에 피드백을 받는 것이 가능하다.
즉 코드가 지닌 불안정성과, 불확실성을 지속적으로 해소해준다.
3. 재설계 시간을 단축해준다.
테스트 시나리오를 작성하면서 다양한 예외사항에 대해 생각해볼 수 있다,
4. 추가 구현에 용이하다.
개발이 완료된 코드에 어떤 기능을 추가하려면 그 기능이 기존 코드에 어떤 영향을 미칠지 모른다.
하지만 TDD의 경우 자동화된 유닛 테스팅을 전체하므로 테스트 기간을 획기적으로 단축시킬 수 있다.
하지만 모두가 다 TDD를 하는 건 아니다.
왜일까??
TDD 단점
1. 생산성 저하
중간중간 테스트를 하면서 고치기 때문에 개발 시간이 10~30% 늘어난다.
2. 개발하던 방식을 바꾸기가 어렵다.
여태 일반개발방식으로 개발해왔기 때문에 TDD로 바꾼다는 것은 적용하기 쉽지않다.
3. 구조에 얽매힌다.
테스트는 말 그대로 테스트인데 실제 코드가 더 중요한 상황임에도 불구하고 테스트에 얽매여 다음으로 넘어가지 못하는 경우가 생긴다.
사실 이론만으로는 TDD가 무엇인지 정확히 감이 잡히지 않는다.
다음에는 실제로 코드로 쳐보면서 TDD가 무엇인지 이해해 보겠다.
https://velog.io/@miot2j/TDD-TDD%EB%9E%80-%EB%AC%B4%EC%97%88%EC%9D%B8%EA%B0%80
[TDD] TDD란 무었인가?(+TDD 예제코드)
이 포스트는 TDD의 정의와 TDD예제코드를 통해 TDD를 소개하기 위해 작성되었습니다.
velog.io
참고:
🧪 TDD 방법론 (테스트 주도 개발) - 알기 쉽게 정리
TDD(Test Driven Development) 란? TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는
inpa.tistory.com
'백엔드 > 뎁스스터디' 카테고리의 다른 글
5- 동시성 처리 (2) (1) | 2024.05.28 |
---|---|
5- 동시성 처리 (1) (0) | 2024.05.20 |
4- 스프링 시큐리티 + jwt(2) (0) | 2024.05.13 |
3- 스프링 시큐리티 + jwt (1) (0) | 2024.05.07 |
2- TDD(2) (1) | 2024.04.07 |