1. TDD?

  1. [설명]
    1. 테스트 주도 개발(Test-Driven Developement)는 S/W 개발 방법론 중 하나로 선 개발 후 Test방식이 아닌 선 Test후 개발 방식의 프로그래밍 방법을 말합니다
    2. 자동화된 Test코드를 작성한 후 Test를 통과하기 위한 코드를 개발하는 방식을 말합니다
  2. [이용방법]
    1. 테스트 케이스 작성하는 법
      1. Test코드가 개발을 주도하기 위해서는 반드시 실패를 포함하는 Test 코드의 작성이 우선적으로 실행되야 합니다
    2. 테스트 케이스를 통과하는 코드 작성하는 법
      1. Test 케이스를 통과하는 코드를 작성됨을 말합니다
    3. 작성한 코드 리팩토링하는 법
      1. 작성된 코드는 개선될 수 있는 많은 여지를 포함한 코드를 말합니다
      2. 리팩토링 단계를 개선하는 법이 있습니다
  3. [장점]
    1. 객체 지향적인 코드 개발
      1. 코드의 재사용 보장을 명시하므로 TDD를 통한 S/W 개발시 기능별로 모듈화가 이루어집니다
      2. 의존성과 종속성이 낮은 모듈로 조합된 S/W개발을 가능하게 하며 필요에 따라 모듈을 추가하거나 제거해도 S/W 전체 구조에 영향을 미치지 않게 됩니다
    2. 설계 수정시간의 단축
      1. Test코드를 먼저 작성하기 때문에 최초 설계안을 만족하게 하며 입출력 구조와 기능의 정의를 명확하게 하게 되므로 설계의 구조적 문제를 바로 찾아낼 수 있습니다
    3. 유지보수(리팩토링)의 용이성
      1. 기본적으로 단위 테스트 기반의 테스트 코드를 작성하기 때문에 추후 문제가 발생하였을 때 각각의 모듈별로 테스트를 진행해보면 문제의 지점을 쉽게 찾을 수 있습니다
    4. 테스트 문서의 대체 가능
      1. 대부분의 개발 프로젝트에서 Test를 진행하는 경우 단순 Test에 지나지 않습니다
      2. TDD를 하게 될 때 Testing을 자동화 시킴과 동시에 더욱 정확한 Test근거를 산출해 정의서를작성할 수 있습니다
  4. [단점]
    1. 사전준비기간
      1. 프로젝트에 도입하려면 사전에 필요한 지식을 습득하고 개발환경을 구축해야한다
      2. TDD를 효과적으로 사용할 수 있는 수준으로 개발자를 교육하는 데 보통은 1~6개월간의 시간이 피요하다
    2. 생산성저하
      1. 프로젝트를 진행할 때 경험 때문에 어떤 예외상황이 발생할지 눈에 뻔히 보이는 경우가 종종 있다
      2. 단발성 개발 기간이 타이트하게 잡히는 경우가 있는데, TDD를 이용해 테스트코드를 작성하고그에 통과하기 위한 코드를 작성한다면 비효율적이게 된다
  5. [Tools]
    1. JUnit
      1. Java의 표준 단위 테스트 프레임 워크입니다
      2. 에릭 감마와 켄트백이 개발하였으며, JUnit을 시작으로 XUnit FrameWork가 탄생하였고 JUnit 활용에서 예시코드를 확인할 수 있다