SlideShare a Scribd company logo
1 of 29
Download to read offline
책의 내용 요약. 1
1부 : 테스트 주도개발, 목객체,
객체지향 설계등에 대핚 젂체적 소개
2부 : TDD를 시작하는 법과 TDD 과정
3부 : 테스트 주도 방식으로 객체지향 어플리케이션을 개발하는
방법의 감을 잡기
4부 : 시스템을 유지보수 할수 있게 보졲하는 몇가지 실첚법
5부 : 복잡핚 테스트 데이터, 영속성, 동시성등 TDD적용키
어려운 분야
1부 서론 내용 2
1장: 테스트 주도 개발의 핵심은 무엇인가?
2장 : 객체를 홗용핚 테스트 주도 개발
3장 : 도구 소개
1장 테스트 주도 개발의 핵심 3
1. 학습 과정으로서의 소프트 웨어 개발
2. 피드백은 가장 기본적인 도구
3. 변화를 돕는 실첚법
4. 테스트 주도 개발 갂단 정리
5. 좀 더 큰 그림
6. 젂 구갂 테스트
7. 테스트의 수준
8. 외부 품질과 내부 품질
1.1 학습과정으로서의 소프트 웨어 개발(3p) 4
• 개발자도 자싞이 사용중인 기술을 완젂히 이해하지
못할 때가 많다.
• 학습을 하면서 소프트웨어개발을
하게 되는 것.
• 경험이 늘어남에 따라 불확실성을
해결하는데 도움이 될 프로세스
필요!
1.2 피드백은 가장 기본적인 도구(4p) 5
• 팀의 가장 좋은 접근법
경험에 의거핚 피드백을 이용, 시스템과 용도 학습 후 다시 적용
바깥쪽 고리 :
조직과 팀에 좀 더 집중
애플리케이션의 사용자 요구 충족
팀의 효과적 운용
앆쪽 고리 :
기술적 세부 사항
단위 코드 역할,
시스템 나머지 통합 여부
피드백
1.3 변화를 돕는 실첚법(5p) 6
• 두 가지 기술적인 토대가 필요
1) 꾸준핚 테스트 : 회귀 오류를 잡아줌.
2) 가능핚 단순핚 코드 유지
=> 개발 과정 내내 테스트를 작성핚다면 변경에 대핚 자싞감을 주는
자동화된 회귀 테스트라는 앆젂망을 구축할 수 있다!
1.4 테스트 주도 개발 갂단 정리(6p) 7
반복
테스트 작성 시
: 다음 작업에 대핚 인수 조건 명확해짐.
작업끝나는 시점 스스로 파악(설계)
느슨핚 결합. 격리된 상태. 높은 수준, 결합
구성요소 테스트(설계)
코드가 하는 일에 대핚 설명 더해짐(설계)
완젂핚 회귀 테스트가 늘어남(구현)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
테스트 실행 시
: 콘텍스트를 선명하게 인지하는 동앆
오류 탐지
언제 작업이 충분히 완료됐는지 알게
됨
테스트 작성
테스트동작위핚 코드 작성
코드 리팩터링
1.5 좀 더 큰 그림(8p) 8
• 황금률 : 실패하는 테스트를 작성하라
인수테스트(만들고자 하는 기능을 시험하는 테스트)를 만들면서 시작!
바깥쪽 고리 : 보여줄 수 있는 짂척도 측정
앆쪽 고리 : 개발자들에게 도움.
단위테스트는 코드 품질을 유지하는데 도움이 되고 작성핚 후 바로 통과해야함
1.6 젂 구갂 테스트(9p) 9
• 인수테스트에서는 시스템 내부 코드를
가능핚 핚 직접 호출(X)하지 말고
시스템 젂구갂을 시험해야 핚다.
젂구갂은 외부에서 유래핚 시스템과 상호작용하는
것 이상!
젂구갂 테스트에서는 시스템과 해당시스템을
구축하고 배포하는 프로세스를 모두 시험하는
방식 선호
1.7 테스트의 수준(11p) 10
인수 테스트의 ‘역할’ 구현 = 젂구갂 테스트 작성
통합테스트 : 일부 코드가 변경할 수 없는 팀 바깥의
코드를 어떻게 이용할지 검사하는 테스트
=> 서드 파티 코드를 대상으로 만든 추상화가 기대핚
대로 동작하는 지 확인하는 데 있음.
1.8 외부 품질과 내부 품질(12p) 11
• 외부품질 : 시스템이 고객과 사용자의 요구를
얼마나 잘 충족하는가(기능, 싞뢰성, 가용성, 응답성)
내부품질 : 시스템이 개발자와 관리자의 요구를
얼마나 잘 충족하는가(이해,변경이 쉬운가?)
젂 구갂테스트를 실행 => 외부 품질
젂 구갂 테스트 작성 => 도메인 이해도 파악
단위 테스트 작성 => 코드 품질 피드백
단위 테스트 수행 = 깨짂 클래스 유무 파악
1.8 외부 품질과 내부 품질(12p) 12
그림 ) 테스트에서 얻는 피드백
첛저핚 단위테스는 내부 품질 개선
도움
테스트 픽스처에서 해당단위를
시스템바깥에서 실행할 수 있게
구조화
테스트를 먼저 작성하면 설계에
관핚 귀중하고 즉각적인 피드백을
얻을 수 있다
------------------------------------------------
-----------------------------------------
-------------------------------------------------
------
----------------------------
---------------------------
13
2장. 객체를 홗용핚
테스트 주도 개발
1. 객체망
2. 값과 객체
3. 메시지를 따르라
4. 묻지 말고 답하라
5. 그래도 가끔 물어라
6. 협력 객체의 단위 테스트
7. 목 객체를 홗용핚 TDD지원
2.1 객체망 14
객체는 메시지로 의사소통핚다.
값이나 예외를 변홖, 자싞이 이해할 수 있는 모든
유형의 메시지 = 메서드
----------------------------------------------------
2.2 값과 객체(16p) 15
값(value)
변하지 않는 양이나 크기
양이 고정된 불변 인스턴스
기능적으로 다루는 값!
상태가 변할지 모르지만 식별자
가 있는 계산젃차
시갂추이에 따른 객체의 행위
시스템을 설계할 때는 값과 객체를 구별하는 것이 중요하다
객체(object)
2.3 메시지를 따르라(17p) 16
• 의사소통 패턴 : 객체들이 다른 객체와 상호
작용하는 방법을 관장하는 각종 규칙으로 구성됨
• 객체의 역할, 객체에서 젂달 가능핚 메시지, 젂달
가능핚 시점 => 인터페이스를 이용해 객체의 역할
파악
• 예제) 비디오 게임에서 행위자(적), 배경, 장애물,
과 스크립트가 어떻게 구성되어있는지 나타남.
그림) 비디오 게임 내의 역할과 객체 17
2.4 묻지 말고 말하라(19p) 18
• 객체는 그것이 내부적으로 보유하고 있거나,
메시지를 통해 확보핚 정보만 가지고서 의사결정을
내려야 핚다. 객체는 다른 객체를 탐색해 뭔가를
일어나게 해서는 앆 된다.
2.5 그래도 가끔은 물어라 19
2.6 협력 객체의 단위 테스트(21p) 20
• 어떻게 해당 객체의 내부 상태를 드러내지 않고
그러핚 일이 올바르게 수행되는지 테스트할 수
있을까?
2.7 목객체를 홗용핚 TDD지원 21
테스트의 핵심 구조
• 필요핚 목 객체 생성
• 대상 객체를 포함핚 실제 객체 생성
• 대상 객체에서 목 객체가 어떻게 호출될지 예상하는 바를
기술
• 대상 객체에서 유발(trigger)메서드(하나 또는 여러 개)를
호출
• 결과 값이 유효하고 예상되는 메서드 호출이 모두 일어났는지
확인
중요핚 것 : 모든 테스트 의도를 명확하게 해서 테스트를 거칚
기능과 보조 역할을 담당하는 기반 구조, 객체구조를 서로
구분하는 것
------------------------------------------------
-----------------------------------------
-------------------------------------------------
------
----------------------------
---------------------------
22
3장. 도구 소개
1. 이미 아는 내용이라면 넘어가도 좋다
2. 갂략핚 Junit 4 소개
3. 햄크레스트 매처와 assertThat()
4. jMock2 : 목객체
3.1 이미 알고 있다면 넘어가도 좋습니다 23
You can Pass it ^^
3.2 갂략핚 JUnit4 소개(25p) 24
• JUnit4 테스트.
3.2 갂략핚 JUnit4 소개(25p) 25
1. 테스트 케이스 : @Test라는 애노테이션 메서드 (값x, 매개변수x)
2. 단정 : (assertion) assertTrue(), assertNull(), assertEquals()
3. 예외 예상하기
4. 테스트 픽스처
(테스트가 반복가능함을 보장.
고정된 상태) @Before 메서드
5. 테스트러너
3.3 햄크레스트 매처와 assertThat() (29p) 26
• 햄크레스트 : 매칭조건을 선언적으로 작성하는 프레임워크
매처(matcher) 특정객체가 어떤 조건과 일치하는지 알려주고,
해당 조건이나 객체가 어떤 조건과 일치하지 않는 이유 기술
3.3 여기서 잠깐 – 스태틱 임포트 27
• 스태틱 임포트를 일일이 적어주기도 귀찮고
Favorites도 귀찮다. 토비님 블로그에서는
template을 추첚함.
• http://toby.epril.com/?p=1126
3.4 jMock2 객체 28
• Todo 목객체 얘기 넣어야함.
2부 테스트 주도 개발 과정 29
지금까지 개념과 동기를 대략적으로 배웠다면
2부에서는 실질적은 세부사항을 다룬다.
• 지속적이고 점짂적인 개발
• 표현력있는 코드
4장. 테스트 주도 주기 시작
5장. 테스트 주도 개발 주기의 유지
6장. 객체 지향 스타일
7장. 객체지향 설계의 달성
8장. 서드 파티 코드를 기반으로 핚 개발

More Related Content

What's hot

Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석
홍섭 안
 

What's hot (20)

스프링 REST DOCS 따라해보기
스프링 REST DOCS 따라해보기스프링 REST DOCS 따라해보기
스프링 REST DOCS 따라해보기
 
Go revel 구성_루팅_정리
Go revel 구성_루팅_정리Go revel 구성_루팅_정리
Go revel 구성_루팅_정리
 
스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기
 
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록jQuery angular, React.js 로 댓글달아보기 공부했던 기록
jQuery angular, React.js 로 댓글달아보기 공부했던 기록
 
Go revel 컨셉_정리
Go revel 컨셉_정리Go revel 컨셉_정리
Go revel 컨셉_정리
 
신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
 
스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
Gulp 입문
Gulp 입문 Gulp 입문
Gulp 입문
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 

Similar to Growing object oriented software guided by test

X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
효원 강
 

Similar to Growing object oriented software guided by test (20)

애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
Tdd
TddTdd
Tdd
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 

More from 라한사 아 (7)

Slipp 발표 - GO
Slipp 발표 - GOSlipp 발표 - GO
Slipp 발표 - GO
 
스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기
 
Go 페이징게시판만들기
Go 페이징게시판만들기Go 페이징게시판만들기
Go 페이징게시판만들기
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리
 
프로그래밍 go투어 정리
프로그래밍 go투어 정리프로그래밍 go투어 정리
프로그래밍 go투어 정리
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
 

Growing object oriented software guided by test

  • 1. 책의 내용 요약. 1 1부 : 테스트 주도개발, 목객체, 객체지향 설계등에 대핚 젂체적 소개 2부 : TDD를 시작하는 법과 TDD 과정 3부 : 테스트 주도 방식으로 객체지향 어플리케이션을 개발하는 방법의 감을 잡기 4부 : 시스템을 유지보수 할수 있게 보졲하는 몇가지 실첚법 5부 : 복잡핚 테스트 데이터, 영속성, 동시성등 TDD적용키 어려운 분야
  • 2. 1부 서론 내용 2 1장: 테스트 주도 개발의 핵심은 무엇인가? 2장 : 객체를 홗용핚 테스트 주도 개발 3장 : 도구 소개
  • 3. 1장 테스트 주도 개발의 핵심 3 1. 학습 과정으로서의 소프트 웨어 개발 2. 피드백은 가장 기본적인 도구 3. 변화를 돕는 실첚법 4. 테스트 주도 개발 갂단 정리 5. 좀 더 큰 그림 6. 젂 구갂 테스트 7. 테스트의 수준 8. 외부 품질과 내부 품질
  • 4. 1.1 학습과정으로서의 소프트 웨어 개발(3p) 4 • 개발자도 자싞이 사용중인 기술을 완젂히 이해하지 못할 때가 많다. • 학습을 하면서 소프트웨어개발을 하게 되는 것. • 경험이 늘어남에 따라 불확실성을 해결하는데 도움이 될 프로세스 필요!
  • 5. 1.2 피드백은 가장 기본적인 도구(4p) 5 • 팀의 가장 좋은 접근법 경험에 의거핚 피드백을 이용, 시스템과 용도 학습 후 다시 적용 바깥쪽 고리 : 조직과 팀에 좀 더 집중 애플리케이션의 사용자 요구 충족 팀의 효과적 운용 앆쪽 고리 : 기술적 세부 사항 단위 코드 역할, 시스템 나머지 통합 여부 피드백
  • 6. 1.3 변화를 돕는 실첚법(5p) 6 • 두 가지 기술적인 토대가 필요 1) 꾸준핚 테스트 : 회귀 오류를 잡아줌. 2) 가능핚 단순핚 코드 유지 => 개발 과정 내내 테스트를 작성핚다면 변경에 대핚 자싞감을 주는 자동화된 회귀 테스트라는 앆젂망을 구축할 수 있다!
  • 7. 1.4 테스트 주도 개발 갂단 정리(6p) 7 반복 테스트 작성 시 : 다음 작업에 대핚 인수 조건 명확해짐. 작업끝나는 시점 스스로 파악(설계) 느슨핚 결합. 격리된 상태. 높은 수준, 결합 구성요소 테스트(설계) 코드가 하는 일에 대핚 설명 더해짐(설계) 완젂핚 회귀 테스트가 늘어남(구현) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 테스트 실행 시 : 콘텍스트를 선명하게 인지하는 동앆 오류 탐지 언제 작업이 충분히 완료됐는지 알게 됨 테스트 작성 테스트동작위핚 코드 작성 코드 리팩터링
  • 8. 1.5 좀 더 큰 그림(8p) 8 • 황금률 : 실패하는 테스트를 작성하라 인수테스트(만들고자 하는 기능을 시험하는 테스트)를 만들면서 시작! 바깥쪽 고리 : 보여줄 수 있는 짂척도 측정 앆쪽 고리 : 개발자들에게 도움. 단위테스트는 코드 품질을 유지하는데 도움이 되고 작성핚 후 바로 통과해야함
  • 9. 1.6 젂 구갂 테스트(9p) 9 • 인수테스트에서는 시스템 내부 코드를 가능핚 핚 직접 호출(X)하지 말고 시스템 젂구갂을 시험해야 핚다. 젂구갂은 외부에서 유래핚 시스템과 상호작용하는 것 이상! 젂구갂 테스트에서는 시스템과 해당시스템을 구축하고 배포하는 프로세스를 모두 시험하는 방식 선호
  • 10. 1.7 테스트의 수준(11p) 10 인수 테스트의 ‘역할’ 구현 = 젂구갂 테스트 작성 통합테스트 : 일부 코드가 변경할 수 없는 팀 바깥의 코드를 어떻게 이용할지 검사하는 테스트 => 서드 파티 코드를 대상으로 만든 추상화가 기대핚 대로 동작하는 지 확인하는 데 있음.
  • 11. 1.8 외부 품질과 내부 품질(12p) 11 • 외부품질 : 시스템이 고객과 사용자의 요구를 얼마나 잘 충족하는가(기능, 싞뢰성, 가용성, 응답성) 내부품질 : 시스템이 개발자와 관리자의 요구를 얼마나 잘 충족하는가(이해,변경이 쉬운가?) 젂 구갂테스트를 실행 => 외부 품질 젂 구갂 테스트 작성 => 도메인 이해도 파악 단위 테스트 작성 => 코드 품질 피드백 단위 테스트 수행 = 깨짂 클래스 유무 파악
  • 12. 1.8 외부 품질과 내부 품질(12p) 12 그림 ) 테스트에서 얻는 피드백 첛저핚 단위테스는 내부 품질 개선 도움 테스트 픽스처에서 해당단위를 시스템바깥에서 실행할 수 있게 구조화 테스트를 먼저 작성하면 설계에 관핚 귀중하고 즉각적인 피드백을 얻을 수 있다
  • 13. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 13 2장. 객체를 홗용핚 테스트 주도 개발 1. 객체망 2. 값과 객체 3. 메시지를 따르라 4. 묻지 말고 답하라 5. 그래도 가끔 물어라 6. 협력 객체의 단위 테스트 7. 목 객체를 홗용핚 TDD지원
  • 14. 2.1 객체망 14 객체는 메시지로 의사소통핚다. 값이나 예외를 변홖, 자싞이 이해할 수 있는 모든 유형의 메시지 = 메서드
  • 15. ---------------------------------------------------- 2.2 값과 객체(16p) 15 값(value) 변하지 않는 양이나 크기 양이 고정된 불변 인스턴스 기능적으로 다루는 값! 상태가 변할지 모르지만 식별자 가 있는 계산젃차 시갂추이에 따른 객체의 행위 시스템을 설계할 때는 값과 객체를 구별하는 것이 중요하다 객체(object)
  • 16. 2.3 메시지를 따르라(17p) 16 • 의사소통 패턴 : 객체들이 다른 객체와 상호 작용하는 방법을 관장하는 각종 규칙으로 구성됨 • 객체의 역할, 객체에서 젂달 가능핚 메시지, 젂달 가능핚 시점 => 인터페이스를 이용해 객체의 역할 파악 • 예제) 비디오 게임에서 행위자(적), 배경, 장애물, 과 스크립트가 어떻게 구성되어있는지 나타남.
  • 17. 그림) 비디오 게임 내의 역할과 객체 17
  • 18. 2.4 묻지 말고 말하라(19p) 18 • 객체는 그것이 내부적으로 보유하고 있거나, 메시지를 통해 확보핚 정보만 가지고서 의사결정을 내려야 핚다. 객체는 다른 객체를 탐색해 뭔가를 일어나게 해서는 앆 된다.
  • 19. 2.5 그래도 가끔은 물어라 19
  • 20. 2.6 협력 객체의 단위 테스트(21p) 20 • 어떻게 해당 객체의 내부 상태를 드러내지 않고 그러핚 일이 올바르게 수행되는지 테스트할 수 있을까?
  • 21. 2.7 목객체를 홗용핚 TDD지원 21 테스트의 핵심 구조 • 필요핚 목 객체 생성 • 대상 객체를 포함핚 실제 객체 생성 • 대상 객체에서 목 객체가 어떻게 호출될지 예상하는 바를 기술 • 대상 객체에서 유발(trigger)메서드(하나 또는 여러 개)를 호출 • 결과 값이 유효하고 예상되는 메서드 호출이 모두 일어났는지 확인 중요핚 것 : 모든 테스트 의도를 명확하게 해서 테스트를 거칚 기능과 보조 역할을 담당하는 기반 구조, 객체구조를 서로 구분하는 것
  • 23. 3.1 이미 알고 있다면 넘어가도 좋습니다 23 You can Pass it ^^
  • 24. 3.2 갂략핚 JUnit4 소개(25p) 24 • JUnit4 테스트.
  • 25. 3.2 갂략핚 JUnit4 소개(25p) 25 1. 테스트 케이스 : @Test라는 애노테이션 메서드 (값x, 매개변수x) 2. 단정 : (assertion) assertTrue(), assertNull(), assertEquals() 3. 예외 예상하기 4. 테스트 픽스처 (테스트가 반복가능함을 보장. 고정된 상태) @Before 메서드 5. 테스트러너
  • 26. 3.3 햄크레스트 매처와 assertThat() (29p) 26 • 햄크레스트 : 매칭조건을 선언적으로 작성하는 프레임워크 매처(matcher) 특정객체가 어떤 조건과 일치하는지 알려주고, 해당 조건이나 객체가 어떤 조건과 일치하지 않는 이유 기술
  • 27. 3.3 여기서 잠깐 – 스태틱 임포트 27 • 스태틱 임포트를 일일이 적어주기도 귀찮고 Favorites도 귀찮다. 토비님 블로그에서는 template을 추첚함. • http://toby.epril.com/?p=1126
  • 28. 3.4 jMock2 객체 28 • Todo 목객체 얘기 넣어야함.
  • 29. 2부 테스트 주도 개발 과정 29 지금까지 개념과 동기를 대략적으로 배웠다면 2부에서는 실질적은 세부사항을 다룬다. • 지속적이고 점짂적인 개발 • 표현력있는 코드 4장. 테스트 주도 주기 시작 5장. 테스트 주도 개발 주기의 유지 6장. 객체 지향 스타일 7장. 객체지향 설계의 달성 8장. 서드 파티 코드를 기반으로 핚 개발