SlideShare uma empresa Scribd logo
1 de 33
Clean Code 
Chapter 9 : 단위 테스트
9.1 TDD 법칙 세 가지
첫 번째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 
두 번째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 
세 번째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
세 가지 규칙을 따를 경우 이익 
개발과 테스트가 30초 주기로 묶임 
매일 수십 개, 매달 수백 개, 매년 수천 개의 테스트 코드가 나옴 
방대한 테스트 코드는 심각한 관리 문제를 유발함
9.2 클린 테스트 코드 유지하기
테스트 코드가 클린 하지 못한다면? 
실제 코드를 짜는 시간 < 테스트 코드를 짜는 시간 
실제 코드를 변경  기존 테스트 케이스 실패  테스트 코드가 부담이 됨 
새 버전을 출시할 때 마다 테스트 케이스 유지보수 비용 증가 
테스트 코드 폐기  프로젝트 결함률 증가 
테스트 코드를 깨끗이 유지해야 한다!!!
9.3 클린 테스트 코드
클린 테스트 코드를 작성시 가장 중요한 것은? 
가독성!!!!!!
가독성이 안 좋은 코드 예 
PathParser 객체 : 
테스트 코드와 무관 테스트 코드의 의도를 흐림 
Responder 객체 생성, response 수집 및 변환 코드 : 
테스트 코드와 무관 테스트 코드의 의도를 흐림
리펙토링 코드 
예제 코드 [목록 9-2] 
의미를 
명확하게 
해줌! 
Build-Operate-Check 패턴이 위와 같은 구조에 적합!
Build Operate Check 패턴
이중 표준 
테스트 코드는 클린코드여야 하지만 효율적일 필요는 없다. 
실제 환경과 테스트 환경은 요구사항이 다르기 때문에 각각의 환경에 
맞는 코드를 작성하면 된다.
예제 코드 [목록 9-3] 
tic() 함수가 뭐하는 거지? 
점검 상태이름 과 상태 값 확인을 
확인하는게 번거로움
대문자 : 켜짐 
소문자 : 꺼짐 
리펙토링 코드 
tic() 함수를 숨김 
문자 : { heater, blower, cooler, hi-temp-alarm, lo-temp-alarm }
리펙토링 코드 
임베디드 시스템 상에선 자원이 제한적일 수 있기 때문에 
StringBuffer를 사용하는게 효율적이다. 
하지만 테스트 환경에선 그럴 필요가 없다. (이중 표준)
참고 : StringBuffer 사용법 
일단 모양은 지저분 하네요… 
성능은 어떨까요?
참고 : StringBuffer vs String 성능 비교 
출처 : http://javacan.tistory.com/entry/39
9.4 테스트 당 assert 하나
Test case 1: 
출력이 XML 이다 
Test case 2: 
특정문자열을 포함한다.
출처 : http://martinfowler.com/bliki/GivenWhenThen.html
코드 중복 발생 
해결책 : 템플릿 메소드 패턴 등등등….  assert 문을 여럿 사용하는 편이 낫다!!!
테스트 당 개념 하나 
한 테스트에 여러 개의 개념을 넣게 되면 각 절이 거기에 존재하는 
이유와 각 절이 테스트 하는 개념을 모두 이해해야 한다.
한 테스트에 3개의 개념이 들어있는 코드
9.5 F.I.R.S.T
FAST(빠르게) 
테스트는 빨라야 한다. 
테스트가 느리면 자주 돌릴 엄두를 못 낸다. 자주 돌리지 못하면 초반에 문제를 찾아내 
고치지 못한다. 코드를 맘껏 정리하지도 못한다. 결국 코드 품질이 망가지기 시작한다.
INDEPENDENT(독립적으로) 
각 테스트는 서로 의존하면 안 된다. 
한 테스트가 다음 테스트가 실행 될 환경을 준비해선 안 된다. 각 테스트는 독립적으로 
그리고 어떤 순서로 실행해도 괜찮아야 한다. 테스트가 서로에게 의존하면 하나가 실패 
할 때 나머지도 잇달아 실패하므로 원인을 진단하기 어려워 지며 후반 테스트가 찾아내 
야 할 결함이 숨어진다.
REPEATABLE(반복 가능하게) 
테스트는 어떤 환경에서도 반복이 가능해야 한다. 
실제환경, QA 환경, 버스를 타고 집으로 가는 길에 사용하는 노트북환경에서도 실행할 
수 있어야 한다. 테스트가 돌아가지 않는 환경이 하나라도 있다면 테스트가 실패한 이유 
를 둘러댈 변명이 생긴다.
SELF-VALIDATING(자가 검증하는) 
테스트는 Bool 값으로 결과를 내야 한다. 
성공 아니면 실패다. 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안 된다. 통과 여 
부를 보려고 텍스트 파일 두 개를 수작업으로 비교하게 만들어서도 안 된다. 테스트가 
스스로 성공과 실패를 가늠하지 않는다면 판단은 주관적이 되어 버리며 지루한 수작업 
평가가 필요하게 되어 버린다.
TIMELY(적시에) 
테스트는 적시에 작성해야 한다. 
단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현 
한 다음에 테스트 코드를 만들면 실제 코드가 테스트 하기 어렵다는 사실을 발견할지도 
모른다. 어떤 실제 코드는 테스트하기 너무 어렵다고 판명 날지 모른다. 테스트가 불가 
능하도록 실제 코드를 설계할지도 모른다.
9.5 결론
테스트 코드를 지속적으로 깨끗하게 관리하자.
End

Mais conteúdo relacionado

Mais procurados

Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료seungdols
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.Kwangsung Ha
 
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서Kim kyoung-song
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?선협 이
 
파싱테이블 만들기 Project
파싱테이블 만들기 Project파싱테이블 만들기 Project
파싱테이블 만들기 ProjectK
 
프레젠테이션3
프레젠테이션3프레젠테이션3
프레젠테이션3Yoo Jaeeun
 
smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)영주 박
 
개발자들 뭐 하는 건가요?
개발자들 뭐 하는 건가요?개발자들 뭐 하는 건가요?
개발자들 뭐 하는 건가요?Skyler Shin
 
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업Junseo Youn
 
[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
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programmingJaejin Yun
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기인서 박
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장Jong Pil Won
 

Mais procurados (17)

Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
Tdd bdd
Tdd bddTdd bdd
Tdd bdd
 
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
 
파싱테이블 만들기 Project
파싱테이블 만들기 Project파싱테이블 만들기 Project
파싱테이블 만들기 Project
 
프레젠테이션3
프레젠테이션3프레젠테이션3
프레젠테이션3
 
smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)
 
개발자들 뭐 하는 건가요?
개발자들 뭐 하는 건가요?개발자들 뭐 하는 건가요?
개발자들 뭐 하는 건가요?
 
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
20211030 청소년이 바꾸는 세상 톡톡 진로콘서트 - 개발자라는직업
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기프로그래밍 대회 문제 제작하기
프로그래밍 대회 문제 제작하기
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장[2012 01 28]cleancode 1장
[2012 01 28]cleancode 1장
 

Destaque

Clean code(05)
Clean code(05)Clean code(05)
Clean code(05)규열 김
 
Clean code chapter11 - systems
Clean code   chapter11 - systemsClean code   chapter11 - systems
Clean code chapter11 - systemsitomcc
 
Clean code(02)
Clean code(02)Clean code(02)
Clean code(02)규열 김
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)규열 김
 
Clean code(04)
Clean code(04)Clean code(04)
Clean code(04)규열 김
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php versionukjinkwoun
 
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장ukjinkwoun
 

Destaque (11)

Clean code(05)
Clean code(05)Clean code(05)
Clean code(05)
 
Clean code chapter11 - systems
Clean code   chapter11 - systemsClean code   chapter11 - systems
Clean code chapter11 - systems
 
코드 Ch20
코드 Ch20코드 Ch20
코드 Ch20
 
Clean code(02)
Clean code(02)Clean code(02)
Clean code(02)
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)
 
Clean code(04)
Clean code(04)Clean code(04)
Clean code(04)
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php version
 
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
만들면서 배우는 Cocos2d x 멀티 플랫폼 게임 프로그래밍 10-11장
 
Clean code Chapter.2
Clean code Chapter.2Clean code Chapter.2
Clean code Chapter.2
 
Chean code chapter 1
Chean code chapter 1Chean code chapter 1
Chean code chapter 1
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 

Semelhante a Clean code chapter9

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit TestingYeon Soo Kim
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17Yoon Hee Hwang
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 

Semelhante a Clean code chapter9 (20)

Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
TDD or TFD
TDD or TFDTDD or TFD
TDD or TFD
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
TDD
TDDTDD
TDD
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
 
Tdd
TddTdd
Tdd
 

Mais de ukjinkwoun

Chapter 1 0 이야기
Chapter 1 0 이야기Chapter 1 0 이야기
Chapter 1 0 이야기ukjinkwoun
 
Head first chapter 1
Head first chapter 1Head first chapter 1
Head first chapter 1ukjinkwoun
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4ukjinkwoun
 
프로그래머로 사는법 챕터16
프로그래머로 사는법   챕터16프로그래머로 사는법   챕터16
프로그래머로 사는법 챕터16ukjinkwoun
 
프로그래머로 사는법 챕터9
프로그래머로 사는법   챕터9프로그래머로 사는법   챕터9
프로그래머로 사는법 챕터9ukjinkwoun
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법ukjinkwoun
 
대규모 구조
대규모 구조대규모 구조
대규모 구조ukjinkwoun
 
도메인 객체의 생명주기
도메인 객체의 생명주기도메인 객체의 생명주기
도메인 객체의 생명주기ukjinkwoun
 

Mais de ukjinkwoun (10)

Chapter 1 0 이야기
Chapter 1 0 이야기Chapter 1 0 이야기
Chapter 1 0 이야기
 
Head first chapter 1
Head first chapter 1Head first chapter 1
Head first chapter 1
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4
 
코드 Ch23
코드 Ch23코드 Ch23
코드 Ch23
 
코드 Ch4
코드 Ch4코드 Ch4
코드 Ch4
 
프로그래머로 사는법 챕터16
프로그래머로 사는법   챕터16프로그래머로 사는법   챕터16
프로그래머로 사는법 챕터16
 
프로그래머로 사는법 챕터9
프로그래머로 사는법   챕터9프로그래머로 사는법   챕터9
프로그래머로 사는법 챕터9
 
프로그래머로 사는법
프로그래머로 사는법프로그래머로 사는법
프로그래머로 사는법
 
대규모 구조
대규모 구조대규모 구조
대규모 구조
 
도메인 객체의 생명주기
도메인 객체의 생명주기도메인 객체의 생명주기
도메인 객체의 생명주기
 

Clean code chapter9

  • 1. Clean Code Chapter 9 : 단위 테스트
  • 2. 9.1 TDD 법칙 세 가지
  • 3. 첫 번째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 두 번째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 세 번째 법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • 4. 세 가지 규칙을 따를 경우 이익 개발과 테스트가 30초 주기로 묶임 매일 수십 개, 매달 수백 개, 매년 수천 개의 테스트 코드가 나옴 방대한 테스트 코드는 심각한 관리 문제를 유발함
  • 5. 9.2 클린 테스트 코드 유지하기
  • 6. 테스트 코드가 클린 하지 못한다면? 실제 코드를 짜는 시간 < 테스트 코드를 짜는 시간 실제 코드를 변경  기존 테스트 케이스 실패  테스트 코드가 부담이 됨 새 버전을 출시할 때 마다 테스트 케이스 유지보수 비용 증가 테스트 코드 폐기  프로젝트 결함률 증가 테스트 코드를 깨끗이 유지해야 한다!!!
  • 8. 클린 테스트 코드를 작성시 가장 중요한 것은? 가독성!!!!!!
  • 9. 가독성이 안 좋은 코드 예 PathParser 객체 : 테스트 코드와 무관 테스트 코드의 의도를 흐림 Responder 객체 생성, response 수집 및 변환 코드 : 테스트 코드와 무관 테스트 코드의 의도를 흐림
  • 10. 리펙토링 코드 예제 코드 [목록 9-2] 의미를 명확하게 해줌! Build-Operate-Check 패턴이 위와 같은 구조에 적합!
  • 12. 이중 표준 테스트 코드는 클린코드여야 하지만 효율적일 필요는 없다. 실제 환경과 테스트 환경은 요구사항이 다르기 때문에 각각의 환경에 맞는 코드를 작성하면 된다.
  • 13. 예제 코드 [목록 9-3] tic() 함수가 뭐하는 거지? 점검 상태이름 과 상태 값 확인을 확인하는게 번거로움
  • 14. 대문자 : 켜짐 소문자 : 꺼짐 리펙토링 코드 tic() 함수를 숨김 문자 : { heater, blower, cooler, hi-temp-alarm, lo-temp-alarm }
  • 15. 리펙토링 코드 임베디드 시스템 상에선 자원이 제한적일 수 있기 때문에 StringBuffer를 사용하는게 효율적이다. 하지만 테스트 환경에선 그럴 필요가 없다. (이중 표준)
  • 16. 참고 : StringBuffer 사용법 일단 모양은 지저분 하네요… 성능은 어떨까요?
  • 17. 참고 : StringBuffer vs String 성능 비교 출처 : http://javacan.tistory.com/entry/39
  • 18. 9.4 테스트 당 assert 하나
  • 19. Test case 1: 출력이 XML 이다 Test case 2: 특정문자열을 포함한다.
  • 21. 코드 중복 발생 해결책 : 템플릿 메소드 패턴 등등등….  assert 문을 여럿 사용하는 편이 낫다!!!
  • 22.
  • 23. 테스트 당 개념 하나 한 테스트에 여러 개의 개념을 넣게 되면 각 절이 거기에 존재하는 이유와 각 절이 테스트 하는 개념을 모두 이해해야 한다.
  • 24. 한 테스트에 3개의 개념이 들어있는 코드
  • 26. FAST(빠르게) 테스트는 빨라야 한다. 테스트가 느리면 자주 돌릴 엄두를 못 낸다. 자주 돌리지 못하면 초반에 문제를 찾아내 고치지 못한다. 코드를 맘껏 정리하지도 못한다. 결국 코드 품질이 망가지기 시작한다.
  • 27. INDEPENDENT(독립적으로) 각 테스트는 서로 의존하면 안 된다. 한 테스트가 다음 테스트가 실행 될 환경을 준비해선 안 된다. 각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 한다. 테스트가 서로에게 의존하면 하나가 실패 할 때 나머지도 잇달아 실패하므로 원인을 진단하기 어려워 지며 후반 테스트가 찾아내 야 할 결함이 숨어진다.
  • 28. REPEATABLE(반복 가능하게) 테스트는 어떤 환경에서도 반복이 가능해야 한다. 실제환경, QA 환경, 버스를 타고 집으로 가는 길에 사용하는 노트북환경에서도 실행할 수 있어야 한다. 테스트가 돌아가지 않는 환경이 하나라도 있다면 테스트가 실패한 이유 를 둘러댈 변명이 생긴다.
  • 29. SELF-VALIDATING(자가 검증하는) 테스트는 Bool 값으로 결과를 내야 한다. 성공 아니면 실패다. 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안 된다. 통과 여 부를 보려고 텍스트 파일 두 개를 수작업으로 비교하게 만들어서도 안 된다. 테스트가 스스로 성공과 실패를 가늠하지 않는다면 판단은 주관적이 되어 버리며 지루한 수작업 평가가 필요하게 되어 버린다.
  • 30. TIMELY(적시에) 테스트는 적시에 작성해야 한다. 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현 한 다음에 테스트 코드를 만들면 실제 코드가 테스트 하기 어렵다는 사실을 발견할지도 모른다. 어떤 실제 코드는 테스트하기 너무 어렵다고 판명 날지 모른다. 테스트가 불가 능하도록 실제 코드를 설계할지도 모른다.
  • 32. 테스트 코드를 지속적으로 깨끗하게 관리하자.
  • 33. End