[SW 설계 및 테스트] 테스트 주도 개발
테스트 주도개발의 개념
테스트 주도 개발 방식은 테스트를 기반으로 코드를 구현하는 개발 방식이다. TDD(Test Driven Development)라고도 부른다. 보통 개발의 경우, 코드 구현을 모두 마친 후, 테스트를 진행한다. 그러나 테스트 주도 개발 방식의 경우에는 테스트를 먼저 하면서, 테스트에 걸리지 않을 최소한의 개발 하고, 다음 테스트를 진행하는 형식으로 개발이 이루어진다.
테스트 주도 개발 방식을 사용하는 이유는 다음과 같다. 보통 개발 중 오류가 아예 없을 순 없는데, 오류를 최대하 빨리 발견하는 것이 오류를 최대한 빠르게 해결하도록 해주며, 오류를 빨리 해결하게되면 그만큼의 시간과 돈을 아낄 수 있다. 이해를 돕기 위해 간단한 그래프를 보면서 이야기해보자.
이 그래프에서 오류가 들어간 시점과 오류를 발견한 시점이 짧을수록, 오류가 어디있는지 찾아서 고치는 시간이 줄어든다. 오류를 발견한 시점이 짧다 즉, Td가 짧다는 것은, 버그가 발생한 시점과 버그를 발견한 시점이 짧기 때문에 최근 작성한 부분에서 버그가 생겼을 확률이 높기 때문이다. 그래서 결국 버그의 위치를 찾아 고치는 시간까지 줄어든다는 장점이 있다.
테스트 주도 개발 과정
그렇다면 테스트 주도 개발방식은 정확하게 어떻게 돌아가는 것일까?
테스트 주도 개발 시 꼭 지켜야 하는 원칙이 총 5가지가 있다.
① 처음 실패하는 test 코드를 작성하기 전까지 절대 소스코드를 먼저 작성해서는 안된다.
② 소스코드가 실패한 만큼의 test코드만 작성하고 소스코드를 작성하여야 한다. 절대, 소스코드가 실패하는 테스트 코드임에도 불구하고 test코드를 더 작성해서는 안된다.
③ 테스트 코드를 통과할 만큼만 소스코드를 작성해야 한다. 테스트 코드를 통과했음에도 소스코드를 추가로 작성해서는 안된다.
④ 작성하는 소스코드는 모든 테스트 코드를 통과해야 한다.
⑤ 중복되는 부분을 제거하여 코드를 단순화한다.(리팩토링)
이렇게 되면, 소스코드 내 문제를 바로바로 알 수있다는 장점이 있다.
테스트 주도 개발 방식의 장점
테스트 주도 개발 방식으로 소스코드 개발을 진행한다면, 테스트 코드가 실제 동작하는 일종의 명세서 같은 역할을 해준다. 자연스럽게 코드의 모든 부분이 테스트 된다. 테스트를 통해 코드를 문서화 할 수 있고, 테스트를 지속적으로 진행하기 때문에 빠르게 피드백을 받아올 수 있다는 장점이 있다. 추가적으로 테스트 주도 개발을 통해 간단한 설계를 가져온다.