TDD가 뭔데?

turtle-programmer·2022년 9월 22일
0
post-thumbnail

TDD의 정의

이번에는 개발 방법론인 TDD에 대해 알아보도록 하겠습니다.

간단하게 정의하면,

테스트 코드를 작성하고 나서 실제 구현하는 코드를 작성하는 테스트 주도 개발(Test-Driven-Development) 방법론입니다.

그럼 이러한 궁금증이 드실거에요.

"TDD를 쓰면 뭐가 좋은데?"

TDD의 장점

1. TDD를 통해 자연스러운 모듈화가 이루어지게 된다.

TDD를 진행하시게 되면서, 하실 첫 번째 일은 아마 테스트 케이스를 작성하는 것입니다. 테스트 케이스를 작성할 때, 일반적으로 작은 기능 부분의 테스트 부터 작성하기 때문에 해당 기능의 테스트 코드 작성후, 실제 사용될 코드를 작성 시, 작은 기능 부분 별로 코드를 작성하시게 될 것이고, 이는 곧 기능별로 모듈화가 자연스럽게 이루어지게 되는 결과를 만들어주죠. 이는 곧 기능 간의 의존성을 줄여주어, 나중에 특정 기능의 모듈을 추가 또는 삭제하더라도 소프트웨어 전체 구조에 영향을 크게 미치지 않게 도와줄 것입니다.

2. TDD를 하게 되면, 테스트 커버리지가 높아지게 된다.

우선, 테스트 커버리지의 정의부터 살펴볼게요.

테스트 커버리지는 테스트 대상의 전체 범위에서 테스트를 수행한 범위를 의미합니다.

TDD를 진행하시면서, 자연스레 테스트 코드를 작성하시게 되고, 이는 곧 테스트 커버리지가 높아진다는 것을 의미합니다. 테스트 커버리지가 높아지면 추후 리팩토링, 기능 추가, 유지 보수 등을 할 때에 기존에 존재하는 테스트 코드를 실행해 기존의 기능들이 잘 작동하는 지 확인할 수 있기에, 더욱 수월하게 작업을 할 수 있다는 이점이 있습니다.

3. 디버깅 하는데 낭비하는 시간을 최소화 할 수 있습니다.

개발을 하시다 보면 특정 버그가 어떤 코드에서 나왔는지 그리고 원인은 무엇인지 찾기 위해, 열심히 디버깅을 해보신 경험들이 다들 있으실 겁니다. 본인이 짠 부분을 디버깅 하는 경우라면 정신적인 고통이 좀 덜 하겠지만 만약 다른 분이 짠 코드를 디버깅 할 때면....

하지만 여러 테스트 코드들이 있고 테스트 커버리지가 높다면?
완벽하게 원인을 파악하는데 도움이 되지 않을 수도 있지만 도움이 분명히 될 거에요.

TDD의 진행 방법

TDD에 대해 살펴 보았으니 이럼 TDD는 구체적으로 어떻게 진행되는 지 알아볼까요?
우선, TDD는 아래의 순서로 진행이 됩니다.

1. 테스트 케이스에 대한 테스트 코드를 작성한다.

처음 시작은 위의 빨간색 부터라고 보시면 됩니다. 구체적으로 먼저 테스트할 대상인 테스트 케이스를 만들어보는거에요. 그 후에 해당 테스트 케이스에 대한 테스트 코드를 작성합니다. 여기서 중요한 점은 실패하는 테스트 코드를 작성하는 것입니다. 이는 당연한 얘기인데요. 일반적으로 테스트를 통과하는 코드를 작성하기전에 작성한 테스트 코드는 당연히 실패할 것이기 때문이죠.

2. 테스트 코드를 통과하기 위한 실제 코드를 작성한다.

그 다음은 테스트 코드를 통과하기 위한 코드를 작성하는 것입니다. 여기서 중요한 점은, 실패하는 테스트를 통과할 수 있을 정도의 최소한의 코드를 작성하는 것입니다. 즉, 테스트 하려는 부분을 넘어서는 코드를 작성하지 않으며, 완벽한 코드를 짜려고 하는 것이 아니라는 거에요. 우선 테스트를 간신히 통과할 코드를 작성한 후, 다음 단계로 넘어가셔야 합니다.

3. 리팩토링

앞서 2단계에서 코드를 작성 후 테스트를 통과 했다면 다음으로 해야할 일은 2단계에서 작성한 코드를 리팩토링하는 것입니다. 구현한 코드에 중복이 있거나 더 개선시킬 수 있는 방법이 보인다면 리팩토링을 진행하는 것이지요. 리팩토링을 하신 후, 1단계에서 작성한 테스트 코드를 통과 하는지 확인하는 절차도 필요합니다.

4. 1단계 ~ 3단계 반복 반복

위의 3단계까지 끝나셨다면 다시 첫 번째 절차로 돌아가셔서 다음 기능 구현을 위하여 실패하는 테스트 코드를 추가하시고, 성공하는 실제 코드 작성, 리팩토링을 반복하시면 됩니다.

다음 포스팅에서는 자바스크립트로 작성된 프로젝트에서 테스트 자동화를 사용 할 때 사용할 수 있는 도구인 jest에 대해 알아보도록 하겠습니다!

profile
느릿느릿 하지만 꾸준히

0개의 댓글