SlideShare une entreprise Scribd logo
1  sur  43
17장 프로젝트 냄새
1. 테스트를 작성하지 않는 개발자 2. 버그 투성이 테스트 3. 높은 테스트 유지 비용 4. 제품 버그
테스트를 작성하지 않는 개발자 증상 : 개발자가 테스트를 작성하지 않는다. 버그가 왜 이렇게 많죠?거긴 테스트를 안만들었는데요…
테스트를 작성하지 않는 개발자 미치는 영향 : 자동 테스트를 작성하지 않는 것은 팀의 미래를 저당 잡히는 짓! 테스트 빚(test debt)을 지게 되므로길게 봤을때 개발 속도저하를 가져오고리팩토링도 점점 더 어려워지고결국 지옥문으로 되돌아가는 길이 될 것.
테스트를 작성하지 않는 개발자 원인 : 부족한 시간 테스트하기 힘든 코드 잘못된 자동화 전략
테스트를 작성하지 않는 개발자 원인 1: 부족한 시간 ,[object Object]
개발자가 테스트 작성법을 몰라.
개발자에게 필요한 건? 테스트 개발을 학습할 시간과 그에 따른 일정조정
테스트 작성에 드는 시간은디버깅에 드는 시간을 줄여줌으로써 벌충,[object Object],[object Object]
깨지기 쉬운 테스트테스트 실행에 영향이 안가게SUT를 변경하지만아.. 테스트가 컴파일이 안돼… 실행이 안돼…
애매한 테스트테스트 정보가 너무 많고 복잡해테스트를 한눈에 이해하기 어려워,[object Object]
개발자에게 적절한 권한과 시간을.
테스트 도입으로 프로세스가 금방 향상되지는 않아. 현실적이고 단계적 목표가 중요.,[object Object]
버그 투성이 테스트 완전자동테스트를 도입했지만 어딘가 문제 있음을 알려주는 프로젝트 단위의 신호 코드는 정상인데 테스트가 실패(거짓양성 – 양치기 소년, 신뢰 상실) 실제 버그가 발생하는데 테스트는 성공(거짓음성 – 테스트가 바보)
버그 투성이 테스트 원인 : 깨지기 쉬운 테스트 애매한 테스트 테스트 하기 힘든 코드
버그 투성이 테스트 원인 1: 깨지기 쉬운 테스트 (Fragile Test) ,[object Object],해결법 : 4가지 민감함을 살펴보자. ,[object Object]
동작에 민감함?
데이터에 민감함?
문맥에 민감함 ?테스트 대역과 리팩토링으로 해결해보자.,[object Object],[object Object]
힘드니 간접테스팅(Indirect Testing)을 하고 그러니 깨지기 쉬워.해결법 : ,[object Object]
SUT API를 캡슐화해서 변경시 영향 받는 테스트 코드를 최소화.,[object Object]
5 Why로 문제 핵심에 도달해야 한다.Q : 왜이런 일이 생겼을까?A : 찾았어! 요게 문제 발생 요인이야.Q : 그럼 어떤 이유로 요런 요인이 생겼을까?새로운 정보가 나오지 않을 때까지 반복!,[object Object]
개발자에게 충분한 시간을주자.- 테스트 잘 작성하는 법 학습- 레거시 코드는 리팩토링- 테스트 먼저 작성,[object Object]
높은 테스트 유지 비용 어플 개발도 힘든데 테스트까지 유지 보수 해야 하다니… 너무 힘들어요. 기능 추가할 때 마다 테스트도 많이 고쳐야 해요.  새로운 기능 개발에 드는 기간이 점점 늘어나요. 테스트 유지 보수 때문에 팀의 생산력이 떨어져요. 그 동안의 노력이 물거품이 되는 한이 있더라도 테스트를 없애버리고 싶어요!
높은 테스트 유지 비용 대부분은 다음 냄새와 동반한다.  ,[object Object]
너무 많은 테스트가 같은 픽스처 설계에 의존하는깨지기 쉬운 테스트
공유 픽스처가 문제의 원인인 변덕스러운 테스트,[object Object]
높은 테스트 유지 비용 원인 1: 깨지기 쉬운 테스트 ,[object Object]
근본원인은 4가지 민감함에 있을 수 있다.해결법 : 민감함으로 부터 최대한 보호 ,[object Object]
각자 테스트 할 수 있게 작은 컴포넌트나 클래스로 나누자.,[object Object],[object Object]
테스트 유틸리티 메소드를 사용한 SUT API 캡슐화로 테스트 코드의 양을 줄이자.,[object Object]
무엇이 문제인지를 잘 파악하고
좋은 방법을 찾도록 개발자들을 독려하고 지원해 주어야.
추가 기능 조절, 개발속도 조절, 테스트 리팩토링 스토리 기간을 만들어 시간을 벌어주어야.
지금 해결하지 못하면 점점 악화만 될 뿐.,[object Object]
제품 버그 그렇게 노력했건만,공식테스팅이나 제품에 버그가 너무 많아. 개발시 버그 제거 시간 보다 공식 테스트 기간일 때 더 오래 걸리고,제품에서 발견될 때는 더더더 오래 걸린다. 미뤄지는 출시일, 개발비용의 상승, 회사의 신뢰도 추락 등
제품 버그 원인 : 드문 테스트 실행 놓친 테스트 빠진 단위 테스트 테스트 안 된 코드 테스트 안 된 요구 사항 절대 실패하지 않는 테스트
제품 버그 원인 1: 드문 테스트 실행 ,[object Object]
테스트 실행이 너무 오래 걸려서.
상관없는 실패가 너무 많아.
테스트를 할 때마다 직접 조정 해줘야 해서.(수동 조정 Manual Intervention)
개발자가 테스트 환경을 재시작해야 해서.,[object Object],[object Object]
예전에는 테스트가 걸러주던 버그인데 재발…찾아보니 해당 테스트가 비활성화 되어.

Contenu connexe

Tendances

테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종guest7178884
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basicCurt Park
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testingSangIn Choung
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDSuwon Chae
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsChang Hak Yeon
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)ChulHui Lee
 
Test driven development
Test driven developmentTest driven development
Test driven developmentJinho Song
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GDG Korea
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4stupidfox
 

Tendances (19)

테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basic
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testing
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDD
 
TDD
TDDTDD
TDD
 
Tdd
TddTdd
Tdd
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + Jenkins
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4
 

En vedette

그녀가언어를익히는방법
그녀가언어를익히는방법그녀가언어를익히는방법
그녀가언어를익히는방법Yoon Hee Hwang
 
Timing wheels
Timing wheelsTiming wheels
Timing wheelssupperniu
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장sung ki choi
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.sung ki choi
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장sung ki choi
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장sung ki choi
 
트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기종빈 오
 
ApprenticeshipPatterns/Chapter3
ApprenticeshipPatterns/Chapter3ApprenticeshipPatterns/Chapter3
ApprenticeshipPatterns/Chapter3Yoon Hee Hwang
 

En vedette (10)

그녀가언어를익히는방법
그녀가언어를익히는방법그녀가언어를익히는방법
그녀가언어를익히는방법
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
Timing wheels
Timing wheelsTiming wheels
Timing wheels
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장[120316] node.js 프로그래밍 5장
[120316] node.js 프로그래밍 5장
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기
 
ApprenticeshipPatterns/Chapter3
ApprenticeshipPatterns/Chapter3ApprenticeshipPatterns/Chapter3
ApprenticeshipPatterns/Chapter3
 

Similaire à xUnitTestPattern/chapter17

테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16suitzero
 
테스트 냄새
테스트 냄새테스트 냄새
테스트 냄새SukYun Yoon
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법SangIn Choung
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
xUnitTestPattern/chapter3
xUnitTestPattern/chapter3xUnitTestPattern/chapter3
xUnitTestPattern/chapter3수윤 장
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기Luavis Kang
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드Mijeong Park
 
[GDG And Kor] 아장아장 테스트 첫걸음
[GDG And Kor] 아장아장 테스트 첫걸음[GDG And Kor] 아장아장 테스트 첫걸음
[GDG And Kor] 아장아장 테스트 첫걸음Wooseop Kim
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 

Similaire à xUnitTestPattern/chapter17 (20)

테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16
 
테스트 냄새
테스트 냄새테스트 냄새
테스트 냄새
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
xUnitTestPattern/chapter3
xUnitTestPattern/chapter3xUnitTestPattern/chapter3
xUnitTestPattern/chapter3
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
TDD or TFD
TDD or TFDTDD or TFD
TDD or TFD
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
[GDG And Kor] 아장아장 테스트 첫걸음
[GDG And Kor] 아장아장 테스트 첫걸음[GDG And Kor] 아장아장 테스트 첫걸음
[GDG And Kor] 아장아장 테스트 첫걸음
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 

xUnitTestPattern/chapter17