Tdd
TDD
Test Driven Development 은 Kent Beck 의 한 저서 1 를 계기로 널리 퍼진 프로그래밍 방법론 중에 하나이다.
핵심은 Test 를 먼저 작성하고 구현을 하라는 메시지이다. 그러면 Test 를 작성하면서 설계도 고민할 수 있고(특히 깔끔한 Test 를 만들기 위해 더 좋은 설계를 고민하게 되고), Tests 가 쌓여가면 자신이 만든 코드에 확신을 가질 수도 있고(특히 설계를 바꿀 때 예상치 못한 문제를 감지할 수 있고), 등 다양한 장점을 취할 수 있게 된다.
이때의 Test 는 보통 개발자 수준의 TDD 인 Unit Test 를 말한다. 물론 Application 수준의 Test 로 개발을 주도할 수도 있고 병행할 수도 있다. 그러면 실제 사용에 쓸데없는 기능을 적게 만들 수 있는 장점이 있지만, Test 성공까지의 기간도 길 수 있고 사용자가 할 일이 늘어날 수도 있어 단점도 꽤 있다.
그리고 개발 결과에 대해 스트레스, 성능, 통합, 사용자 Test 등을 하는 것은 또 다른 이야기이다.
Cycle
보통 다음과 같은 Cycle 을 반복하게 된다.
Test 작성(빨간불) -> Test 성공시키기(초록불) -> Refactoring -> Test 작성
Test 작성 시 다음의 순서를 고려해보자.
- User Story(XP 에서 비격식적 요구사항과 비슷, 뭘 개발할건가)
- 이를 위해 필요한 작은 기능을 Todo List 로 만들고
- Test 를 작성할 때 Assert 먼저 적고 역으로 추척
이때 고려할 수 있는 사항은 다음과 같다.
- Test 사이의 커플링은 최대한 지양해야한다. 보통 설계를 고치면 해결된다.
- Test Coverage 를 높히는 가장 간단한 방법은 코드를 간단하게 하는 것이다.
- Test Data 는 의도를 쉽게 유추할 수 있어야 한다. 그래서 난수보단 0, 1 같은 간단한 값이나 실제 데이터를 사용하는게 좋다.
- Mock 객체, self shunt 패턴 등의 기법을 고려할 수 있다.
NUnit
Unit Test 를 위한 Framework 중에 .Net 에서 쓸 수 있는 것은 크게 xUnit, nUnit, msTest 가 있다.
nUnit 은 Unity Game Engine 과 상당히 결합되어 있다2. 그래서 Unity 를 쓰려면 반필수라고 한다.
자동으로 VS 에서 Unit Test 를 자동으로 생성하게 하는 방법으로 정성태 블로그 를 참고하자.
댓글남기기