개요
단순 코드 리팩토링 뿐만 아니라 프로젝트 구현의 생산성 증대를 위해서는 TDD는 매우 중요한 것 같다. 따라서 이에 대한 지식 부족으로 공부한다. 향후 나의 밑거름이 도움이 되길 바라는 마음.
해당 내용은 켄트 백의 Test-Driven Development : By Example 도서를 참고하였습니다.
일반적인 TDD의 주기는 다음과 같다.
테스트를 작성한다. 마음 속에 있는 오퍼레이션이 코드에 어떤 식으로 나타나길 원하는지 생각해보라. 이야기를 써내려가는 것이다. 원하는 인터페이스를 개발하라. 올바른 답을 얻기 위해 필요한 이야기의 모든 요소를 포함시켜라
실행 가능하게 만든다. 다른 무엇보다도 중요한 것은 빨리 초록 막대를 보는 것이다. 깔끔하고 단순한 해법이 명백히 보인다면 그것을 입력하라. 만약 깔끔하고 단순한 해법이 있지만 구현하는 데 몇 분 정도 걸릴 것 같으면 일단 적어 놓은 뒤에 원래 문제(초록 막대를 보는 것)로 돌아가자
올바르게 만든다. 이제 시스템이 작동하므로 직전에 저질렀던 일들을 수습해야 한다. 좁고 올곧은 소프트웨어 정의의 길로 되돌아와서 중복을 제거하고 초록 막대로 되돌리자
- 가짜로 구현
상수를 반환하게 하고, 진짜 코드를 얻을 때까지 단계적으로 상수를 변수로 바꾸어 나간다. - 명백한 구현 사용
실제 구현을 입력
- 설계 상의 결함 (Dollar 부작용)을 그 결함으로 인해 실패하는 테스트로 변환했다.
- 스텁구현으로 빠르게 컴파일을 통과하도록 만들었다.
- 올바르다고 생각하는 코드를 입력하여 하나의 테스트를 통과했다.
스텁(Stub)
정해진 질문에 대해서 사전에 준비된 답을 의미한다. 예측 가능한 요청에 대해서 미리 만들어 놓은 응답을 작성한 뒤 해당 응답을 반환하는 것이다. 테스트 스텁을 사용함으로써, 의존하는 것에 독립적으로 개발 및 테스트가 가능하며, 촘촘한 테스트를 할 수 있다. 스텁으로 다양한 응답결과(canned answer) 케이스를 만들어 테스트할 수 있다.
'jvm lang' 카테고리의 다른 글
20170714 엑셀 poi library (0) | 2018.07.14 |
---|---|
20180607 Java is pass by value (Not pass by reference) (0) | 2018.06.07 |
20180503 콜백 메소드에 대해서 (0) | 2018.05.03 |
20180412 자바 CMD로 실행 (0) | 2018.04.12 |
20180408 [java servlet] 자바 서블릿은 어떻게 작동하는가 ? [ stackoverflow ] (0) | 2018.04.08 |