TDD ?

Pink Chun·2022년 12월 15일
3
post-thumbnail

1. TDD ?

TDD(Test-Driven Development)는 소프트웨어 개발방법론 중 하나로 'Red','Green','Refactor' 총 3단계의 사이클을 가지고 있다. 구현을 위한 테스트 코드 작성 이후 최소 구현 코드를 작성하고, 리팩토링을 구현하는 과정을 점진적으로 반복하며 개발하는 코드를 개선한다.

 1) Red 단계 : 개발하려는 것이 무엇인지 고려하고 먼저 테스트 코드를 작성한다.

 2) Green 단계 : 테스트 코드를 성공시키기 위한 최소화된 코드를 작성한다.

 3) Refactor 단계 : Green단계에서 구현된 최소화된 코드로 중복 코드 제거, 효율적인 개선 등을 고려하여 리팩토링을 수행하고 구조화한다.

2. TDD 알아보기

1) 개념
TDD는 TFD(Test-First-Development)에 리팩토링을 더한 것으로, 소프트웨어 개발 방법론 중 하나이다. 기능 개발 전 테스트 코드를 먼저 작성하는 테스트 주도 개발 방식으로 Production Code(프로그램 구현을 담당하는 부분으로 사용자가 '실제로 사용하는 소스코드'를 의미함)를 작성하기 전에 단위 테스트를 작성한 다음 코드를 리팩토링 한다. TDD는 기능 코드를 작성하기 전 요구 사항이나 디자인을 검토하는 하나의 방법이며 목표는 잘 동작하는 깔끔한 코드를 실현하는 것이다.

  • TDD : test driven development 테스트 주도 개발
  • TFD : test first development 테스트 우선 개발

2) 특징

 2-1) Red

 ⓐ구현을 위한 테스트 작성 (Write test to drive implementation)

 ⓑRed 단계는 항상 TDD 사이클의 시작점이며 이 단계의 목표는 구현할 항목을 정의하는 것이다.

 ⓒ테스트 결과 오류를 보며 구현에 대한 접근 방식을 생각할 수 있다.

 2-2) Green

 ⓐ최소 구현 코드 작성 (Write minimal implementation code)

 ⓑGreen 단계는 Red 단계에 있는 테스트를 통과하기 위해 코드를 구현하는 단계이며, 최적화는 고려하지 않는다.

 ⓒ이 단계가 끝나도 똑같은 Green 단계인 동시에 Refactor 단계이므로 이때 최적화를 생각해 볼 수 있다.

 2-3) Refactor

 ⓐ리팩토링 구현 및 테스트 코드 (Refactor implementation and test code)

 ⓑRefactor 단계는 여전히 Green 단계이며 나의 코드를 어떻게 최적화해서 효율적을 ㅗ구현할 것인지를 고혀한다.

 ⓒRefactor 단계에서 이러한 고민을 하면 더 완벽하고 신뢰할 수 있는 빠른 앱을 완성할 수 있다.

3. Unit Test & TDD 비교

TDD를 테스트 주도 개발이라고 해서 Unit Test와 동일시하는 경우가 종종 있는데 실제로는 아예 다른 개념이다.

Unit Test는 하나의 함수 또는 메소드에 대한 테스트 케이스(Test Case)를 작성하는 '절차'를 말한다. 반면 TDD는 '철학'이자, 테스트 코드를 먼저 설계하여 구현을 진행하는 '개발방법론'이다. 따라서 이러한 철학적 요소에 대한 이해 없이 TDD를 도입하면 기술의 장단점도 모르고 사용하는 것이기에 위험할 수 있다. 실제로 TDD 기반으로 개발한다고 이야기하는 많은 회사와 개발자 또한 철학적인 요소에 맞게 수행하지 못하는 경우도 상당히 많으며 TDD를 사용할 거면 제대로 이해하고 사용해야 한다. TDD는 회사의 작업 방식, 업무 환경, 프로젝트 규모에 따라 선택적으로 사용된다. 따라서 TDD 개발 방식을 채택하여 사용하지 않는 이상 접하기가 어렵다.

4. 일반 개발 방식과 TDD 개발 방식 비교

1) 일반 개발 방식
일반 개발 방식은 '코드개발 -> 테스트 코드' 사이클을 가지고있다. 이러한 방식은 개발을 더디게 하는 '잠재적 위험'이 존재한다. 코드를 분리해야 할 기능들을 한 메소드에 몰아 넣어 강한 결합도를 가지게 된다. 이렇게 되면 테스트 코드 작성 시 전체적인 오류를 검출하기 어려우며 잘못된 코드마저 고치지 못하게 된다.

2) TDD 개발 방식
TDD 개발 방식은 '테스트 코드 -> 코드 개발' 사이클을 가지고 있다. TDD 개발 방식은 원하는 기능의 테스트 코드를 먼저 작성해서 개발자가 어떤 메소드와 기능이 필요한지를 정의하여 테스트한다. 따라서 코드 개발 전에 올바르게 동작하는 코드를 확인할 수 있도록 도와준다. 코드 개발 시 검증된 테스트 코드로 구현하므로 더 깔끔하고 신뢰 할 수 있는 코드르 구현할 수 있다.


[참고도서] 개발자가 되기 위해 꼭 알아야 하는 IT용어

profile
최룰루의 개발일지(코린이)

0개의 댓글