growing object oriented software guided by test

29
책의 내용 요약. 1 1부 : 테스트 주도개발, 목객체, 객체지향 설계등에 대핚 젂체적 소개 2부 : TDD를 시작하는 법과 TDD 과정 3부 : 테스트 주도 방식으로 객체지향 어플리케이션을 개발하는 방법의 감을 잡기 4부 : 시스템을 유지보수 할수 있게 보졲하는 몇가지 실첚법 5부 : 복잡핚 테스트 데이터, 영속성, 동시성등 TDD적용키 어려운 분야

Upload: -

Post on 13-Jan-2017

344 views

Category:

Technology


1 download

TRANSCRIPT

책의 내용 요약. 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장. 서드 파티 코드를 기반으로 핚 개발