본문 바로가기

카테고리 없음

TechStudy -07 TDD?

TDD(Test Driven Development)란 ?

테스트 주도 개발(Test-driven development TDD)은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링한다. 이 기법을 개발했거나 '재발견' 한 것으로 인정되는 Kent Beck은 2003년에 TDD가 단순한 설계를 장려하고 자신감을 불어넣어준다고 말하였다.

출처 - 위키백과


"프로그램을 작성하기 전에 먼저 테스트를 하라!" - 켄트 백

프로그램을 작성하지도 않았는데 테스트를 먼저하라니, 마치 자동차를 만들기도 전에 주행 테스트를 먼저 하라는 말만큼이나 이상하다. 

"업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것"
코드를 검증하는 테스트 코드를 먼저 만든 다음에 실제 작성해야 하는 프로그램 코드 작성에 들어가라는 뜻이다. 최초에는 테스트 우선 개발이라고 불렸으나 지금은 테스트 주도 개발이라 불리낟. 테스트 코드부터 작성한다는 TDD의 정의가 다소 과격하게 들릴 수도 있지만, 메소드나 함수 같은 프로그램 모둘을 작성할 때 '작성 종료조건을 먼저 정해놓고 코딩을 시작한다'는 의미로 받아들이면 편하다. 이를테면, 두 숫자의 합을 구해서 반환하는 SUM이라는 메소드를 작성한다고 할때 

작성 메소드 이름 

SUM 

기능 구현에 필요한 재료 

int a, int b 

반환 값의 타임  

int 

정상 동작 만족 조건(작성 종료조건) 

a와 b를 더한 값을 결과로 돌려줌 


위 표는 만들고자 하는 메소드를 일종의 설계문서(Spec)처럼 간단히 적어본 것이다. 사실 이런 형식은 굳이 TDD라는 용어를 꺼내지 않더라도, 우리가 프로그램을 작성할 때 머릿속으로 생각하는 내용과 별반 다르지 않다. 다만 '문서로 만들어 머리로 생각하고 눈으로 확인할 것인가?' 아니면 '예상 결과를 코드로 표현해놓고 해당 코드가 자동으로  판단하게 할 것인가?'의 차이가 있다.



TDD의 목표

우리가 TDD라는 방식을 통해 얻고자 하는 최종 목적은 '잘 동작하는 깔끔한 코드'이다. 이는 일반적인 소프트웨어 개발의 목표와 변반 다르지 않다. 다만 TDD에선 정상적으로 동작하는 코드만을 개발의 목표로 삼지 않고, 작성된 코드도 명확한 의미를 전달할 수 있게 작성돼야 한다고 말한다. 

TDD의 기원

애자일 개발 방식 중 하나인 XP의 실천 방식 중 하나이다. XP는 2000년대 초반에 급부상한 애자일 소프트웨어 개발론의 하나로 단순성, 상호소통, 피드백, 용기 등의 원칙에 기반해 '고객에게 최고의 가치를 최대한 빨리 전달하는 것'을 목표로 삼는다. TDD, Pair Programming, Daily Build, 지속적인 통합 등 다양한 실천 방법을 제시하고 있다. 



출처