tdd ver.2

33
Made by. Lee Jung Woo TDD (Test-Driven Development) 단기 교육 세미나 15.01.30 24-1기 이정우 테스트 주도 개발

Upload: henry-lee

Post on 16-Jul-2015

94 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Tdd ver.2

Made by. Lee Jung Woo

TDD (Test-Driven Development)

단기 교육 세미나15.01.30

24-1기 이정우

테스트 주도 개발

Page 2: Tdd ver.2

Chapter1

Test-Driven Development(테스트 주도 개발)

1999년 XP(eXtreme Programing)이라는 애자일(Agile) 기반의 방법론이 자리잡을 때 처음 소개

소프트웨어 회사 약 77.5% 이상이 TDD 적용

소스코드 작성 전에 테스트 코드를 먼저 작성하면 어떨까?

디자인 코드 작성 테스트(수동)

TDD란?

기존의 개발 프로세스

설계 수정

TDD의 소개

Maker Sig

Page 3: Tdd ver.2

Chapter1

디자인 Test 코드 작성 코드 작성

TDD란?

TDD 프로세스

설계 수정

TDD의 소개

Maker Sig

Test-Driven Development(테스트 주도 개발)

1999년 XP(eXtreme Programing)이라는 애자일(Agile) 기반의 방법론이 자리잡을 때 처음 소개

소프트웨어 회사 약 77.5% 이상이 TDD 적용

소스코드 작성 전에 테스트 코드를 먼저 작성하면 어떨까?

Page 4: Tdd ver.2

Chapter1 TDD의 소개

• 보다 튼튼한 객체지향적인 코드 생산 가능

• 재설계 시간 단축

• 디버깅 시간 단축

• 테스트 문서의 대체 가능

• 추가 구현의 용이함

TDD의 장점

TDD가 코드의 재 사용성 보장

사전에 확고하게 정의된 코드 정체성

모든 레이어 디버깅 X 유닛 테스트 결과에 따름

테스트 자동화→ 보다 정확한 테스트 근거

새 기능 추가가 기존 코드에 미치는 영향력 쉽게 검증

Maker Sig

Page 5: Tdd ver.2

Chapter1 TDD의 소개

• 코드 생산성 하락

TDD의 단점

1. 빠른 결과물을 원하는 환경이라면 도입이 어려움

2. 예외 대처에 취약한 테스트 원칙

3. 실제 코드를 수정 해야 할 시 오히려 늘어나는 유지보수 작업

정확한 프로그래밍 목적을 디자인 단계에서 반드시 미리 정의해야만 하고 또 무엇을 테스트해야 할지 확실히 정의해야만 한다.

그래도 실보다 득이 훨씬 많다!

Maker Sig

Page 6: Tdd ver.2

Chapter1 TDD의 소개

TDD 순서도

Maker Sig

테스트(재)작성

테스트가실패하는가?

업무 코드작성

작성한 테스트들을 실행

코드 정련

테스트 통과

테스트 실패

실패하는테스트 존재

모든 테스트통과

반복

Page 7: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

1부터 20까지의 수를 출력하는 프로그램을 작성하시오. 단, 3의 배수에서는 숫자대신 “JOEL”를 5의 배수에서는 “SARAH” 그리고 3과 5의 배수에서는 “JOEL SARAH” 를 출력하시오.

일반적인개발자

바로 소스코드 작성 후실행 테스트

Maker Sig

Page 8: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

1부터 20까지의 수를 출력하는 프로그램을 작성하시오. 단, 3의 배수에서는 숫자대신 “JOEL”를 5의 배수에서는 “SARAH” 그리고 3과 5의 배수에서는 “JOEL SARAH” 를 출력하시오.

1. 테스트 요소 분석

• 숫자가 3의 배수일 때 JOEL 반환

• 숫자가 5의 배수일 때 SARAH 반환

• 숫자가 3과 5의 배수일 때 JOEL SARAH 반환

• 숫자가 3의 배수도 5의 배수도 아닐 때 숫자를 반환

TDD 이용개발자

Maker Sig

가장 중요한 단계!!

Page 9: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성

TDD 이용개발자

Maker Sig

UnitTest Framework의 종류

• xUnit - 가장 널리 쓰이는 오픈소스 Test Framework

- 자동화된 Test기법 제공

- JUnit, NUnit, CppUnit, DBUnit 등으로 발전

• MSTest - MS의 VisualStudio가 제공하는 Test Framework

- 05부터 VisualStudio에 내장. 사용이 쉬움.- xUnit에 밀림. 하지만 2012부터 본격적으로 개선.

Page 10: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

실제 코드를 작성할프로젝트 생성 !

TDD 이용개발자

Maker Sig

Page 11: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

Unit 테스트프로젝트 생성 !

TDD 이용개발자

Maker Sig

Page 12: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

TDD 이용개발자

Maker Sig

Page 13: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

TDD 이용개발자

Maker Sig

Page 14: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

TDD 이용개발자

Maker Sig

실제(업무) 코드 틀(JSTest) 작성

Page 15: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

TDD 이용개발자

Maker Sig

MSTest의 Attribute들

[TestInitialize]

[TestCleanup]

[TestClass]

[TestMethod]

[Owner]

[Description]

[Ignore]

[Priority]

[WorkItem]

[TestContext]

테스트 호출 관련

테스트 클래스와 메서드 식별

테스트 실행 관련 정보 저장

테스트 식별 및 정렬

Page 16: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

테스트 코드 작성 !TDD 이용개발자

Maker Sig

Page 17: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

TDD 이용개발자

Maker Sig

Assert Class

AreEqual

AreNotEqual

AreSame

AreNotSame

Fail

IsFalse

IsTrue

IsNull

IsNotNull

Ex) Assert.AreEqual참/거짓 명제를 사용하여 단위 테스트의조건을 확인

Page 18: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

2. 테스트 코드 작성 (MSTest 이용)

TDD 이용개발자

Maker Sig

테스트를 한번해보자

Page 19: Tdd ver.2

Chapter1 TDD의 소개

TDD 순서도

Maker Sig

테스트(재)작성

업무 코드작성

작성한 테스트들을 실행

코드 정련

테스트 통과

테스트 실패

실패하는테스트 존재

모든 테스트통과

반복

테스트가실패하는가?

Chapter2

Page 20: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

3. 실제 기능 코드 작성

드디어실제(업무) 코드 작성 !

TDD 이용개발자

Maker Sig

Page 21: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

4. 단위 테스트 실행!

TDD 이용개발자

Maker Sig

실제 코드 작성 후단위 테스트 실행

검증 완료

Page 22: Tdd ver.2

Chapter2 예제로 살펴보는 TDD 개발

4. 개발된 기능 적용

TDD 프로세스를 따르면 결론적으로 질높고 모듈화된 소스코드를 짜게 됨!

TDD 이용개발자

Maker Sig

Page 23: Tdd ver.2

Mock이란?

Maker Sig

Chapter3 Mock을 이용한 TDD

사전적 의미는 가짜의, 모형의 라는 뜻TDD를 할 때 발생하는 한계 돌파를 위한 노력 중 하나

Mock 객체실제 모듈과 비슷하게 보이도록 만든 가짜객체.

비용과시간이 많이 들거나 의존성이 길게걸쳐져 있는 객체를 대체하여 Test 구성

Page 24: Tdd ver.2

언제 Mock객체를 사용할 것인가?

Maker Sig

Chapter3 Mock을 이용한 TDD

• 테스트 작성을 위한 환경 구축이 어려울 때

• 테스트가 특정 경우나 순간에 의존적 일 때

• 테스트 시간이 오래 걸릴 때기능 수행 자체보다 다른 부분으로 인한 시간이 오래 걸릴 경우

특정 모듈을 아직 가지고 있지 않을 때특정 과정이 타 부서와의 협의나 승인이 필요할 때

순간적인 특정 테스트 상황을 만들기가 어려울 때ex) 접속 시도 후 4초가 지난 상황에서의 테스트

Page 25: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

사용자 암호 저장 기능에 대한 테스트를 만드시오

Page 26: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

사용자 암호 저장 기능에 대한 테스트를 만드시오

+ 암호화 과정을 꼭 거쳐야 함!

암호학 까지 공부해야 하나....

Page 27: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!

언제까지 기다리지... X Mock객체 사용!

Page 28: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!

암호화를 수행해주는 Cipher를 흉내 낸 Mock객체 생성

Page 29: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!

Mock객체를 이용한 테스트 코드 작성 완료!

Page 30: Tdd ver.2

Mock 개념의 세분화

Maker Sig

Chapter3 Mock을 이용한 TDD

Test Double

Dummy Object

Test Stub

Test SpyMock

ObjectFake

Object

Test Double : 스턴트맨을 나타내는 Stunt Double에서 차용해온 단어Mock에 대한 개념을 세분화 하고 있다.

Page 31: Tdd ver.2

Maker Sig

Chapter3 Mock을 이용한 TDD

• Dummy

• Test Stub

• Test Spy

• Mock

• Fake

TestStub과 비슷하지만 로직이 있다. 예상대로 메소드가 호출 되지않으면 테스트 실패

단지 인스턴스화 될 수 있는 수준으로만 구현한 객체

Mock 개념의 세분화

더미 객체를 실제로 동작하는 것 처럼 특정 상태를 구현해 놓은 객체로직 x, 실패 x

객체 내부를 감시하는 로직이 추가 되어있다. ex) 수행 횟수 카운터

마치 구현이 되어 있는 것처럼 내부 동작까지 구현 해 놓은 객체

기능 상, 구조 상 차이가 있긴 하지만 구별이 애매한 것들이 많다.

Page 32: Tdd ver.2

Chapter4 TDD에 대한 결론

초보 개발자들에게 진입장벽이 낮은 편은 절대 아님!

But!• 결과적으로 객체지향적이고 질 높은 코드 작성하게 해줌.• 개발자의 실력향상에도 큰 도움이 됨.• 어떻게 보면 객체지향적 코드 작성을 위한 가이드 역할• 길게 내다보면 생산성과 유지보수 비용 절감에 큰 도움!

Maker Sig

Page 33: Tdd ver.2

Q & A