728x90
TDD : 테스트 주도 개발
What is TDD (Test Driven Development)?
TDD의 정의는 다음과 같다.
Test the Program before you write it. ( 프로그램을 작성하기 전에 테스트 먼저 해라 )
by 켄트 백
"업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것"
고전적인 개발 방법의 문제점
- 특정 모듈의 개발 기간이 길어질수록 개발자의 목표의식이 흐려진다
- 작업 분량이 늘어날수록 확인이 어려워진다
- 개발자의 집중력이 필요해진다
- 논리적인 오류를 찾기가 어렵다
- 코드의 사용 방법과 변경 이력을 개발자의 기억력에 의존하게 되는 경우가 많다
- 테스트 케이스가 적혀 있는 엑셀 파일을 보며 매번 테스트를 실행하는 게 점점 귀찮아져서는 점차 간소화하는 항목들이 늘어난다
- 코드 수정 시에 기존 코드의 정상 동작에 대한 보장이 어렵다
- 등등.....
TDD of purpose
Clean code that works ( 잘 동작하는 깔끔한 코드 )
by 론 제프리
TDD exists primarily to create the conditions for refactoring. The fact that it uses tests (microtests) for this does not make it a testing practice.
TDD는 주로 리팩토링을 위한 조건을 만들기 위해 존재합니다. 이를 위해 테스트를 사용한다는 사실이 테스트 관행이 되지는 않습니다.
The goal of TDD is to create the circumstances for quick refactoring, and most of the higher-level tests are just too slow-running to be useful for this purpose.
TDD의 목표는 빠른 리팩토링을 위한 환경을 만드는 것이며 대부분의 상위 수준 테스트는 이 목적에 유용하기에는 너무 느리게 실행됩니다.
TDD development
TDD의 기본 프로세스 : Ask → Respond → Refine
Java의 JUnit 테스트 프레임워크를 이용한 테스트 코드 작성
public class EqualsTest{
private EqualsClass eualsClass;
@Test
public void 무엇과_무엇에대한_테스트() throws Exception {
// 테스트 코드 작성
equalsClass = new EqualsClass();
equalsClass.setNumer(100);
// 비교 수행 assertEquals([메시지], 기대하는 값, 테스트 코드 수행 결과 값);
assertEquals(100, equalsClass.getNumber());
}
}
class EqualsClass {
private int number;
public void setNumber(int number){
this.number = number;
}
public int getNumber(){
return number;
}
}
로버트 마틴(Robert C. Martin)의 TDD 원칙
- 실패하는 테스트를 작성하기 전에는 절대로 제품 코드를 작성하지 않는다
- 실패하는 테스트 코드를 한 번에 하나 이상 작성하지 않는다
- 현재 실패하고 있는 테스트를 통과하기에 충분한 정도를 넘어서는 제품 코드를 작성하지 않는다.
출처: Coplien and Martin Debate TDD, CDD and Professionalism
해당 책을 공개해주신 작정자님께 감사합니다.
728x90
'Programming > Backend' 카테고리의 다른 글
Mock && Mockito : 가짜 객체 (0) | 2021.10.03 |
---|---|
JUnit : 자바에서 사용하는 가장 대표적인 단위 테스트 프레임 워크 (0) | 2021.10.03 |
API 명세서 뜯어보기 - Functional interface (0) | 2021.10.02 |
API 명세서 뜯어보기 - StringBuilder && StringBuffer Class (0) | 2021.09.28 |
API 명세서 뜯어보기 - String Class (0) | 2021.09.27 |