TDD는 꼭 필요할까

Hyunji·2023년 8월 2일
0

공부

목록 보기
33/35

개발을 하고 있다면 ... 커밋하기 전 유닛테스트가 얼마나 중요한지 .. 당신은 알 것이다

며칠 전, 폴더 네이밍을 변경하면서 너무 바보같이 그 안에서 선언되어있는 파일은 수정하지 않는 .. 정말 기초적이고 바보같은 실수를 저질러버리고 마는데...

다행히 한 줄이었어서 바로 해결하긴 했지만, 실제 운영중인 서비스에 그런 짓을 했다고 생각하면 손이 떨리고 눈물이 나는 것이다 (울지마 어차피 해결해야한다)

python TDD 도입을 위해 가장 많이 사용 하는 것 같은 unittestpytest 를 비교해봤는데, 결론적으로는 pytest 를 사용하려고 한다.

자, 일단 TDD가 뭐냐고?

TDD 란, Test Driven Dvelopment 의 약자로, 테스트 주도적인 개발.. 이라고 생각하면 된다.
비즈니스 코드를 먼저 작성하고 테스트 하는 것이 아니라, 테스트가 중심이 되어 전체 개발 방향을 이끌고 나간다. 라고 생각하자.

wikipedia 에는 TDD란

Test-driven development(TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against all test cases.

라고 정의하고 있다.

즉, 다시말해
TDD는 소프트웨어 개발 프로세스 중 하나인데, 먼저 요구사항을 검증하는 자동화된 테스트케이스를 먼저 작성하고, 그 테스트케이스를 통과하기위한 코드를 작성한다. 라고 생각하면 된다.

이제 이해가 좀 쉽게 되는가?

자, 그러면 TDD가 이제 뭔지는 알겠는데
어차피 비즈니스 코드를 먼저 작성하고, 테스트 후 에러가 난 부분에 대해서 코드를 수정하는 것과
테스트 코드를 먼저 작성한 뒤 수정과정을 거치고 개발에 들어가는것과 결국 순서의 차이가 아니냐 라는 의문점도 생길 것 같다.

그러면 TDD의 장점을 알아보자.

장점

  1. 디버깅 시간을 단축시킨다.
    프로젝트에 많은 개발자들이 참여하다보면, 본인이 담당한 부분 이외에는 알 수 없는 부분이 늘어날것이다. 혹은 내가 수정한 코드가 다른 부분에까지 영향을 미칠수도 있을 것이다. 규모가 클 수록 이런 문제가 발생했을 때, 하나하나 테스트 하며 원인을 찾아내는 것은 쉬운일이 아닐 것이다. 하지만 TDD의 경우, 어느 부분이 어느 테스트코드까지 통과했는지, 어느 부분에 문제가 생겼는지 명확하고 빠르게 알 수 있으므로 디버깅 시간을 단축시킬 수 있다.
  2. 코드의 품질 향상
    TDD는 코드를 철저히 테스트하고, 오류 및 버그를 확인한다. 이미 작성된 테스트 코드가 있기 때문에 반복적인 테스트가 더 쉬워지게되고, 개발자는 간단하고 유지 관리가 가능한 코드를 작성할 수 있게된다.
  3. 설계에 대해 구체적으로 작성 가능
    테스트코드를 먼저 작성하고 개발에 들어가기 때문에 내가 지금 무엇을 해야하는지 분명하게 정의하고 개발을 시작하게 된다. 또한 테스트코드를 작성하며 다양한 예외상황에 대해서도 생각해볼 수 있을 것이다.

그럼 무조건 TDD를 도입해야하는 거 아니야?

라고 생각하는 사람도 있을테니 단점도 알려준다.

단점

  1. 생산성 저하
    어떻게보면 생산성의 저하는 가장 큰 단점일 수 있다. 비즈니스 코드부터 작성하면 처음부터 하나의 코드만 작성하면 되는 반면 TDD를 할 경우, 처음부터 2개의 코드를 작성해야하고 테스트를 하면서 고쳐나가야하기 때문에 TDD방식의 개발 시간은 일반적 개발 방식에 비해 대략 10%~30% 정도 늘어난다고 한다.
  2. 내가 가진 개발 방식의 변화
    기존에 TDD방식으로 개발을 하던 사람이 아니라면, 내가 가진 개발 방식에 변화를 줘야한다.

장기적으로 봤을 때에는 TDD 방식을 도입하는 것이 개발에 있어 전체적인 시간을 축소시키고, 품질 좋은 코드를 생산해낼 수 있는 것이 아닐까한다.

profile
성장중인 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기