본문 바로가기
테크

TDD(테스트 구동 개발)이란?

by 힛스토리 2023. 7. 17.
728x90
반응형

TDD(테스트 구동 개발)이란?

TDD(테스트 구동 개발)이란 최초로 테스트 코드를 기술해, 그 테스트를 통과하도록 프로그램 본체를 실장해 가는 소프트웨어 개발 수법입니다. 

 

테스트 구동 개발에서는 이 순서로 최소한 필요한 기능에서 조금씩 개발을 진행하고 기능을 서서히 추가해 나갑니다. 이처럼 기능을 축적해 나가는 설계 방법을 "증분적인 설계"라고 부릅니다.

 

테스트 구동 개발은 증분 설계에 적합한 개발 기술입니다. 인크리멘탈한 설계를 채용하면, 가능한 한 개발의 낭비를 줄여 가치가 있는 기능을 서서히 축적할 수 있습니다.

 

또한 테스트 구동 개발은 "테스트"라는 단어가 사용되고 있기 때문에 테스트 방법 중 하나로 오해됩니다. 그러나 실제로는 증분적인 설계를 촉진하는 개발 방법이며 테스트 방법론을 나타내는 용어가 아닙니다.

TDD-테스트 구동 개발
TDD 테스트 구동 개발

테스트 우선과의 차이

 

테스트 우선은 프로그램 구현 전에 테스트 코드를 작성하고 실행하는 기술을 말합니다. 테스트 코드를 먼저 만든다는 점에서 테스트 퍼스트와 테스트 구동 개발은 동일합니다.

 

여기서 테스트 우선은 먼저 테스트를 수행한 다음 프로그램 구현을 시작하는 테스트 방법론입니다. 한편 테스트 구동 개발은 테스트 코드를 작성한 후의 순서에 규칙이 있습니다.

 

테스트 구동 개발에서는 다음에 그 테스트를 통과하기 위한 코드를 기술해, 그 후에 작성한 코드를 정리해 간결하게 합니다. 테스트 구동 개발은 이 일련의 순서를 반복함으로써 프로그램의 설계나 구현을 진행하는 소프트웨어 개발 방법입니다.

 

TDD(테스트 구동 개발) 도구

 

테스트 기반 개발을 수행하는 데 필요한 것은 "xUnit"이라는 테스트 프레임 워크입니다. 보다 엄밀하게 말하면, 테스팅 프레임워크에는 PHPUnit, NUnit와 같이 Unit의 머리에 문자가 붙은 종류가 많이 존재합니다. 

 

xUnit은 이러한 테스팅 프레임워크의 총칭입니다. xUnit의 테스팅 프레임워크를 활용하면 테스트 구동 개발을 효율적으로 진행할 수 있습니다.

 

TDD(테스트 구동 개발) 개발 사이클

 

테스트 구동 개발에서는 테스트 코드를 작성한 후 프로그램을 구현할 때까지 정해진 개발 사이클을 반복합니다. 여기에서는 테스트 구동 개발의 개발 사이클을 하나씩 설명합니다.

 

실패(빨간색)

테스트 구동 개발에서는 먼저 테스트 코드를 작성합니다. 프로그램이 구현되지 않은 상태에서 테스트 코드가 실행되므로 이 테스트는 항상 실패합니다. 

 

이 절차를 "RED"라고 부르는 이유는 테스트 도구가 실패를 확인할 때 빨간색 (RED) 막대에 오류가 표시되기 때문입니다.

 

성공(녹색)

그런 다음 테스트를 통과하는 데 필요한 최소한의 코드를 작성합니다. 이것은 테스트를 통과하고 테스트 도구는 성공을 나타내는 녹색 (GREEN) 막대를 표시합니다.

 

여기서 중요한 것은 이 시점에서는 완전한 코드를 기술하는 것이 요구되지 않는다는 점입니다. 테스트를 통과하는 데 필요한 최소한의 코드를 작성하기 전까지 유지하십시오.

 

이것은 조금씩 개발을 진행하는 기능을 쌓아 가기 때문입니다. 개발 사이클을 반복함으로써 단계적으로 전체 프로그램을 완성해 나가는 것이 요구됩니다.

 

리팩토링(REFACTOR)

리팩토링(REFACTOR)은 외부에서 본 프로그램의 동작을 바꾸지 않고 소스 코드의 내부 구조를 정리하고 청소하는 것입니다. 테스트 구동 개발에서는 테스트에 통과하는 최소한의 코드가 작성된 단계에서 리팩토링을 실시합니다.

 

프로그램의 규모가 커진 상태에서 리팩토링을 하면, 코드를 수정해 정리하는 수고도 커져 버리기 때문입니다. 그렇게 되지 않도록 조금씩 실장을 진행해 나가는 것이 테스트 구동 개발의 특징입니다.

TDD(테스트 구동 개발)의 장점

초기 단계에서 버그를 감지하고 수정할 수 있습니다. 테스트 구동 개발의 이점으로서 우선 주는 것이, 버그를 조기에 발견할 수 있는 점입니다. 

 

프로그램의 규모가 작은 단계부터 세세하게 테스트를 반복하는 것으로, 버그를 검지·수정하기 쉬워집니다. 만약 버그가 발견되어도, 초기 단계에서 발견되고 있기 때문에 수정의 부담도 크지 않습니다. 

 

속 나중에 버그가 발견되면 되돌아가야 할 만큼 수정의 부담이 방대해 버립니다. 

 

시스템 요구 사항 및 사양을 깊이 이해할 수 있습니다. 

테스트 코드를 작성하려면 시스템 요구 사항과 사양을 자세히 파악해야 합니다. 테스트 구동 개발에서는 기능을 조금씩 추가하는 과정에서 테스트 코드 작성이나 테스트를 반복하므로 시스템에 대한 이해를 깊게 할 수 있습니다. 

 

개발자의 불안을 줄일 수 있습니다. 

테스트 구동 개발에서는 테스트를 반복하면서 최소한의 기능에서 꾸준히 개발을 진행합니다. 그 때문에 만일 나중에 사양 변경이나 버그 수정의 필요가 생겨도, 테스트 결과의 축적도 있어 대응해야 할 내용을 정리하기 쉬워집니다. 

 

이에 따라 방대한 수정의 부담이 생기거나 프로그램의 수정에 의해 새로운 버그가 태어나는 것을 예방할 수 있습니다. 개발자에게 큰 부하가 걸리기 어려워지므로, 심리적인 불안도 경감됩니다. 

 

낭비 없이 가치 있는 프로그램을 구현할 수 있습니다. 테스트 구동 개발에서는 최소한 필요한 기능에서 조금씩 구현을 진행합니다. 이것에 의해 인크리멘탈인 설계를 실현해, 정말로 필요하고 가치가 높은 기능을 낭비 없이 개발하기 쉬워집니다.

TDD(테스트 구동 개발)의 단점

개발에 드는 비용이 커지기 쉽다. 

테스트 구동 개발에서는, 프로그램 본체의 코드는 물론, 테스트 코드도 마찬가지로 보수·관리하지 않으면 안 됩니다. 만약 큰 사양 변경이 생겼을 경우, 테스트 코드를 수정하는 부담도 커집니다. 

 

따라서 테스트 코드를 관리하는 비용이 커지기 쉽다는 단점이 있습니다. 또 테스트 구동 개발에 의해 개발자가 테스트를 실시했다고 해도 다른 테스트가 필요 없게 되는 것은 아닙니다. 

 

예를 들어 사용자를 위한 인터페이스가 있는 프로그램에서는 인터페이스에서도 비슷한 테스트를 다시 수행해야 합니다. 이중 테스트를 수행해야 하므로 비용도 증가하는 경향이 있습니다.

 

모달 창이란? 모달과 팝업의 차이점!

 

모달 창이란? 모달과 팝업의 차이점!

모달 창이란? 모달 창은 원래 화면 위에 다른 창을 표시하고 사용자에게 정보를 전달하는 화면입니다. 특정 작업을 수행하지 않으면 다른 작업을 수행할 수 없으므로 사용자에게 경고 메시지나

heeestoryy.tistory.com

 

반응형

댓글