14. 전통적인 개발 진행
문제발생 요구사항 발생
기능구현
Console 에 값 찍어
보기
간단한 테스트
Yes
15. 에러발생?
No
16. 완료!
9
17. 일반적인 개발
1. 특정 모듈의 개발 기간이 길어질수록 개발자의 목표의식이 흐려진다.
“어디까지 짰더라?”
“아, 내가 지금 뭘 하는 거였지?”
“이 모듈이 무슨 기능을 해야 한대더라?”
2. 작업 분량이 늘어날수록 확인이 어려워진다.
“로그가 어디 있더라?”
“이것도 화면으로 출력해보고…”
10
18. 일반적인 개발
3. 개발자의 집중력이 필요해진다.
“앗! 화면 지나갔다!”
4. 논리적인 오류를 찾기가 어렵다.
“여기서 그러니까 이 값이 들어가면 나와야 하는 게… 아… 이게 맞던가?”
5. 코드의 사용 방법과 변경 이력을 개발자의 기억력에 의존하게 되는 경우가 많다.
“맞아! 개인고객 인증을 고치면 법인 고객인증 부분도 함께 고쳤어야 했었지!!”
6. 테스트 케이스가 적혀 있는 엑셀 파일을 보며 매번 테스트를 실행하는 게 점점 귀찮아져서
는 점차 간소화하는 항목들이 늘어난다.
“날짜? 1111. 주민번호? 우선 222222-2222222. 주소? 서울 개똥이네”
11
19. 일반적인 개발
7. 코드 수정 시에 기존 코드의 정상 동작에 대한 보장이 어렵다.
“휴~ 찾았다. 여길 고쳐야 하는 거였군! 아, 근데 이 금칙어 필터 모듈 혹시 다른 데서도 쓰는
거 아냐?”
8. 테스트를 해보려면 소스코드에 변경을 가하는 등, 번거로운 선행 작업이 필요할 수 있다.
“입고 처리를 테스트하려면, 주문이 완료됐다고 테이블에 직접 업데이트를 해줘야…”
9. 그래서 소스 변경 시 해야 하는 회귀 테스트3는 곧잘 희귀 테스트(rare test)가 되기 쉽다.
“아, 그걸 언제 다 다시 테스트해? 우선 급한 불부터 끄고 보자구.
집에 안 갈거야?”
12
98. Test Driven Development Cycle
q 질문 Ask : 테스트를 작성함으로써 시스템에 질문한다.
(FAIL)
q 응답 Respond : 테스트를 통과하는 코드를 작성해서 질문에 대답한다.
(PASS)
q 정제 Refine : 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은
명확히 해서 대답을 정제한다. (REFACTORING)
q 반복 Repeat : 다음 질문을 통해 대화를 계속 진행한다.
20
101. 어떤 애자일 기법을 적용하고 있습니까?
관리 기법을 제외한 개발 테크닉으로만 순위를 뽑아보면 다음과 같다.
1위: 단위 테스트(Unit Testing)
2위: 지속적인 통합(Continuous Integration)
3위: 자동화된 빌드(Automated Builds)
4위: 테스트 주도 개발(TDD)
5위: 짝 프로그래밍(Pair Programming)
2009년 7월부터 12월까지 88개국 총 2570명을 대상으로 조사한 결과다.
23
103. 가장 큰 효과를 봤던 Agile 기법
CI와 일일 스탠드업 미팅, TDD
가장 배우기 어려웠던 Agile 기법
개발/인수 TDD, 짝 프로그래밍
25
104. Start Test with JUnit
1. xUnit Test Frmawork 중 하나
2. Text base 혹은 GUI(Swing) base 로 구동됨
3. xUnit Style을 따른다.
assert (예상값, 실제값)
4. 결과는 성공:녹색/실패:붉은색 중 하나로 표시
26
150. 테스트 주도 개발을 통한
품질 향상 실체화 연구
출처 : 테스트 주도 개발을 통한 품질 향상 실체화: 업계 개발팀 네 팀들에 대한 적용 결과와 경
험들 (Nachiappan Nagappan E. Michael Maximilien Thirumalesh Bhat Laurie
Williams)
32
168. Comments
네비게이터 네비게이터는 개발의 방향을 주도하
는 사람입니다. 속칭 ‘브레인’에 해당
하는 셈이죠. 드라이버를 움직이는
인물이기도 하죠. 때때로 내 맘 같지
않은 답답한 마음에 운전대를 뺏고
싶을 때가 종종 있을테지만, 그러면
안됩니다.
여정을 같이 하는 동료를 인내하고
신뢰해 주세요. 조금 돌아가면 어때
요? 서로를 이해하고 새로운 교훈을
받아 들일 자세가 되어 있다면 여정
은 즐거운 여행이 될 수 있습니다.
드라이버
Comments
드라이버는 네비게이터의 의견대로 개발을 진행해 나가는 사
람입니다. 자발적인 의지로 개발을 지휘한다기 보다는 최대한
네비게이터를 믿고 따라 줍니다. 물론 자신의 경험과 스킬을
기반으로 끊임없이 네비게이터와 대화하고 질문하고 의도를
파악해 나갑니다.
50
169. - 명시적인 역할 전환
- 오래 한 역할을 하지 않을 것!
- 둘 다 편안한 자세를 잡을 것!
198. Mockito
CreateMock
인터페이스에 해당하는 Mock 객체를 만든다.
Stub
테스트에 필요한 Mock 객체의 동작을 지정한다
(단, 필요 시에만).
Exercise
테스트 메소드 내에서 Mock 객체를 사용한다.
Verify
메소드가 예상대로 호출됐는지 검증한다.
80