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