tdd ver.2
TRANSCRIPT
Made by. Lee Jung Woo
TDD (Test-Driven Development)
단기 교육 세미나15.01.30
24-1기 이정우
테스트 주도 개발
Chapter1
Test-Driven Development(테스트 주도 개발)
1999년 XP(eXtreme Programing)이라는 애자일(Agile) 기반의 방법론이 자리잡을 때 처음 소개
소프트웨어 회사 약 77.5% 이상이 TDD 적용
소스코드 작성 전에 테스트 코드를 먼저 작성하면 어떨까?
디자인 코드 작성 테스트(수동)
TDD란?
기존의 개발 프로세스
설계 수정
TDD의 소개
Maker Sig
Chapter1
디자인 Test 코드 작성 코드 작성
TDD란?
TDD 프로세스
설계 수정
TDD의 소개
Maker Sig
Test-Driven Development(테스트 주도 개발)
1999년 XP(eXtreme Programing)이라는 애자일(Agile) 기반의 방법론이 자리잡을 때 처음 소개
소프트웨어 회사 약 77.5% 이상이 TDD 적용
소스코드 작성 전에 테스트 코드를 먼저 작성하면 어떨까?
Chapter1 TDD의 소개
• 보다 튼튼한 객체지향적인 코드 생산 가능
• 재설계 시간 단축
• 디버깅 시간 단축
• 테스트 문서의 대체 가능
• 추가 구현의 용이함
TDD의 장점
TDD가 코드의 재 사용성 보장
사전에 확고하게 정의된 코드 정체성
모든 레이어 디버깅 X 유닛 테스트 결과에 따름
테스트 자동화→ 보다 정확한 테스트 근거
새 기능 추가가 기존 코드에 미치는 영향력 쉽게 검증
Maker Sig
Chapter1 TDD의 소개
• 코드 생산성 하락
TDD의 단점
1. 빠른 결과물을 원하는 환경이라면 도입이 어려움
2. 예외 대처에 취약한 테스트 원칙
3. 실제 코드를 수정 해야 할 시 오히려 늘어나는 유지보수 작업
정확한 프로그래밍 목적을 디자인 단계에서 반드시 미리 정의해야만 하고 또 무엇을 테스트해야 할지 확실히 정의해야만 한다.
그래도 실보다 득이 훨씬 많다!
Maker Sig
Chapter1 TDD의 소개
TDD 순서도
Maker Sig
테스트(재)작성
테스트가실패하는가?
업무 코드작성
작성한 테스트들을 실행
코드 정련
테스트 통과
테스트 실패
실패하는테스트 존재
모든 테스트통과
반복
Chapter2 예제로 살펴보는 TDD 개발
1부터 20까지의 수를 출력하는 프로그램을 작성하시오. 단, 3의 배수에서는 숫자대신 “JOEL”를 5의 배수에서는 “SARAH” 그리고 3과 5의 배수에서는 “JOEL SARAH” 를 출력하시오.
일반적인개발자
바로 소스코드 작성 후실행 테스트
Maker Sig
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
가장 중요한 단계!!
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부터 본격적으로 개선.
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
실제 코드를 작성할프로젝트 생성 !
TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
Unit 테스트프로젝트 생성 !
TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
TDD 이용개발자
Maker Sig
실제(업무) 코드 틀(JSTest) 작성
Chapter2 예제로 살펴보는 TDD 개발
TDD 이용개발자
Maker Sig
MSTest의 Attribute들
[TestInitialize]
[TestCleanup]
[TestClass]
[TestMethod]
[Owner]
[Description]
[Ignore]
[Priority]
[WorkItem]
[TestContext]
테스트 호출 관련
테스트 클래스와 메서드 식별
테스트 실행 관련 정보 저장
테스트 식별 및 정렬
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
테스트 코드 작성 !TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
TDD 이용개발자
Maker Sig
Assert Class
AreEqual
AreNotEqual
AreSame
AreNotSame
Fail
IsFalse
IsTrue
IsNull
IsNotNull
Ex) Assert.AreEqual참/거짓 명제를 사용하여 단위 테스트의조건을 확인
Chapter2 예제로 살펴보는 TDD 개발
2. 테스트 코드 작성 (MSTest 이용)
TDD 이용개발자
Maker Sig
테스트를 한번해보자
Chapter1 TDD의 소개
TDD 순서도
Maker Sig
테스트(재)작성
업무 코드작성
작성한 테스트들을 실행
코드 정련
테스트 통과
테스트 실패
실패하는테스트 존재
모든 테스트통과
반복
테스트가실패하는가?
Chapter2
Chapter2 예제로 살펴보는 TDD 개발
3. 실제 기능 코드 작성
드디어실제(업무) 코드 작성 !
TDD 이용개발자
Maker Sig
Chapter2 예제로 살펴보는 TDD 개발
4. 단위 테스트 실행!
TDD 이용개발자
Maker Sig
실제 코드 작성 후단위 테스트 실행
검증 완료
Chapter2 예제로 살펴보는 TDD 개발
4. 개발된 기능 적용
TDD 프로세스를 따르면 결론적으로 질높고 모듈화된 소스코드를 짜게 됨!
TDD 이용개발자
Maker Sig
Mock이란?
Maker Sig
Chapter3 Mock을 이용한 TDD
사전적 의미는 가짜의, 모형의 라는 뜻TDD를 할 때 발생하는 한계 돌파를 위한 노력 중 하나
Mock 객체실제 모듈과 비슷하게 보이도록 만든 가짜객체.
비용과시간이 많이 들거나 의존성이 길게걸쳐져 있는 객체를 대체하여 Test 구성
언제 Mock객체를 사용할 것인가?
Maker Sig
Chapter3 Mock을 이용한 TDD
• 테스트 작성을 위한 환경 구축이 어려울 때
• 테스트가 특정 경우나 순간에 의존적 일 때
• 테스트 시간이 오래 걸릴 때기능 수행 자체보다 다른 부분으로 인한 시간이 오래 걸릴 경우
특정 모듈을 아직 가지고 있지 않을 때특정 과정이 타 부서와의 협의나 승인이 필요할 때
순간적인 특정 테스트 상황을 만들기가 어려울 때ex) 접속 시도 후 4초가 지난 상황에서의 테스트
Maker Sig
Chapter3 Mock을 이용한 TDD
사용자 암호 저장 기능에 대한 테스트를 만드시오
Maker Sig
Chapter3 Mock을 이용한 TDD
사용자 암호 저장 기능에 대한 테스트를 만드시오
+ 암호화 과정을 꼭 거쳐야 함!
암호학 까지 공부해야 하나....
Maker Sig
Chapter3 Mock을 이용한 TDD
사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!
언제까지 기다리지... X Mock객체 사용!
Maker Sig
Chapter3 Mock을 이용한 TDD
사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!
암호화를 수행해주는 Cipher를 흉내 낸 Mock객체 생성
Maker Sig
Chapter3 Mock을 이용한 TDD
사용자 암호 저장 기능에 대한 테스트를 만드시오 + 암호화 과정을 꼭 거쳐야 함!
Mock객체를 이용한 테스트 코드 작성 완료!
Mock 개념의 세분화
Maker Sig
Chapter3 Mock을 이용한 TDD
Test Double
Dummy Object
Test Stub
Test SpyMock
ObjectFake
Object
Test Double : 스턴트맨을 나타내는 Stunt Double에서 차용해온 단어Mock에 대한 개념을 세분화 하고 있다.
Maker Sig
Chapter3 Mock을 이용한 TDD
• Dummy
• Test Stub
• Test Spy
• Mock
• Fake
TestStub과 비슷하지만 로직이 있다. 예상대로 메소드가 호출 되지않으면 테스트 실패
단지 인스턴스화 될 수 있는 수준으로만 구현한 객체
Mock 개념의 세분화
더미 객체를 실제로 동작하는 것 처럼 특정 상태를 구현해 놓은 객체로직 x, 실패 x
객체 내부를 감시하는 로직이 추가 되어있다. ex) 수행 횟수 카운터
마치 구현이 되어 있는 것처럼 내부 동작까지 구현 해 놓은 객체
기능 상, 구조 상 차이가 있긴 하지만 구별이 애매한 것들이 많다.
Chapter4 TDD에 대한 결론
초보 개발자들에게 진입장벽이 낮은 편은 절대 아님!
But!• 결과적으로 객체지향적이고 질 높은 코드 작성하게 해줌.• 개발자의 실력향상에도 큰 도움이 됨.• 어떻게 보면 객체지향적 코드 작성을 위한 가이드 역할• 길게 내다보면 생산성과 유지보수 비용 절감에 큰 도움!
Maker Sig
Q & A