SlideShare ist ein Scribd-Unternehmen logo
1 von 13
TDD or TFD
MMVENTURES 박영일
테스트의 안내
테스트를 기반으로 개발을 진행하고 테스트로부터 피드백을 받는 데 집중
TDD는 뭐야?
TDD 시작하기
동작하는 골격
TDD 3가지 법칙
중첩된 고리형 시스템
기존 시스템 대상
TDD 유지하기
TDD and TAD
순 서
TDD는 뭐야? TDD 3가지 법칙
-> 단순히 결함을 예방하는 테스트 코드 X
-> 기능을 테스트하는 유닛테스트 X
-> 회기 테스트 X
-> TDD는 설계활동 O
-> TDD가 왜 설계활동이라 불리는지 지금부터
알아봅시다.
1) failing test가 있을 때에만 제품 코드를 작성해야한
다.
2) 테스트 코드를 작성시에 실패를 나타낼 수 있는
최소의 코드만 작성하라.
즉, 내가 원하는 기능이 동작하지 않는 경우를 나타낼
수 있을 정도만!
3) 2번의 failing test code가 딱 성공할 만큼만 제품 코
드를 작성하라.
TDD 시작하기
-> 어떻게 시작해? : 중첩된 고리형 시스템 만들기
중첩된 고리형 시스템
문제 이해 대략적인 설계
(아키텍처)
자동화
- 빌드
- 배포
- 전 구간 테스트
실패하는
인수 테스트
작성
실패하는
단위 테스트
작성
테스트
통과시키기
배포 가능
시스템
제품 출시
자동화된 빌드, 배포, 테스트 주기 전체를 구현해야한다.
 빌드, 배포, 테스트 주기 전체에 대한 피드백을 받기 위해서
피드백을 통해서 예상 가능했던 문제들은 예를들어 어떤것들?
 손으로 배포(일명 손배포)는 오류가 발생하기 쉬운 활동이므로 배포 과정의 자동화
 개발 팀이 조직의 다른 부분과 접촉하기도 하며, 운영이 실제로 어떻게 되는지도
배워야하므로 이 과정을 통해 피드백을 충분히 받아야한다.
리팩터링
최초의 기능이 필요하다.
1) '동작하는 골격'을 대상으로 빌드, 배포, 테스트하는 방법을 파악
2) 그 기반 구조를 이용해 유의미한 첫 기능에 대한 인수테스트를 작성
동작하는 골격
이것의 요구사항은 대략적인 시스템 구조를 제안하고 그것의 유효성을 검증할
수 있을 정도. 딱 그정도.
예) 가령 데이터 베이스를 활용하는 웹 어플리케이션이라면 골격에서는
데이터베이스 필드가 보여질 것이다.
*동작하는 골격의 외형 결정
 이것은 애플리케이션의 개괄적인 구조를 결정하기 시작한다는 의미다.
 어떤 전체 구조에 관한 구상 없이는 빌드, 배포, 테스트 주기를 자동화할 수 없다.
 주요 시스템 컴포넌트와 그러한 컴포넌트의 상호 작용 방식에 대한 대략적인 그림.
* 동작하는 골격의 핵심
 팀에서 코드 작성을 시작하기 전에 반드시 취해야 할 필수적인 의사결정을 첫 테스트를
작성하는 과정을 활용해 프로젝트의 맥락을 짚어내는 데 있다.
 이는 애자일 개발에서 좋지 않게 보는 " 과도한 사전 설계"와 혼동할 수 있다. 정교한
클래스 설계를 하는것이 아니라 단순히 현재 생각하고 있는 바가 틀릴 가능성이
있으므로 시스템이 성장해 가면서 세부 사항을 파알하는 방식을 선호하는 것.
 위 말은 불확실성을 일찍 드러내어 초기에 각종 쟁점을 드러낸다. But, 프로젝트
초기라면 시간과 예산, 쟁점을 해결할 의지가 있을 때!
기존 시스템 대상
* 동작하는 골격을 만드는 것으로 프로젝트를 시작할 수 없다.
 기본 구조가 아무리 부적당해도 그것을 이용해야 한다는 의미
 일단은 빌드와 배포과정을 자동화한 다음, 변경하고자 하는 코드의 영역을 포괄하는
*전 구간 테스트*를 추가. 그렇게 코드 영역을 보호해 두면 좀 더 확신을 갖고 기능을
추가할 때마다 코드를 리팩터링하고 단위 테스트를 도입하며 내부 품질 문제를 해결.
* 전 구간 테스트 기반 구조를 구축하는 가정 쉬운 방법 : 시스템을 관통하는 가장 단순한
경로를 이용하는 것. TDD 유지하기 시작과 비슷
TDD 유지하기
새로운 기능 추가 -> 실패하는 인수테스트로 시작한다.
실패하는
인수 테스트
작성
실패하는
단위 테스트
작성
테스트
통과시키기
실패하는 인수테스트로 시작한다.
=> 당연히 구현이 되지 않았으므로 인수 테스트는 실패
리팩터링
< TDD 주기 유지 >
실패하는
단위 테스트
작성
테스트
통과시키기
리팩터링
테스트 코드는 가장 간단하고 사소한것부터 쓸때없는 것 -> 어렵고 중요한 것
1) 빨리 녹색을 볼 수 있어 기분이 좋아진다.
2) 어렵고 중요한 테스트 코드부터 작성하게 된다면 나중에 쉬운 case를 테스트할 수가
없다. 그리고 이미 다 되어있거나 그것만 따로 분리시킬 수 있는 구조가 아님.
RED GREEN
BLUE
나중에 시간될때?
지금해!!빾!!!!
TDD and TAD
TDD의 좋은 점.
1.디버깅 시간 단축
2.Decoupling
3.change to courage
4.trust(테스트는 낙하산에 비교)
TAD의 안좋은 점.
1. 신뢰할 수 없다.
2. 불안하다.
3. Test code를 작성하는 시간이 지루하다.
4. 그 시간이 낭비적으로 느껴진다.
당신은 낙하산을 만들고 뛰어내릴 것인가. 뛰어내린 뒤에 낙하산을 만들것인가.
Q n A
Live coding start…

Weitere ähnliche Inhalte

Was ist angesagt?

파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101정주 김
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basicCurt Park
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
BDD with Spock
BDD with SpockBDD with Spock
BDD with SpockSukjin Yun
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
Responding to change
Responding to changeResponding to change
Responding to change기룡 남
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자Taeyeop Kim
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDSuwon Chae
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9명환 안
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitKyunghun Jeon
 

Was ist angesagt? (20)

C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basic
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
BDD with Spock
BDD with SpockBDD with Spock
BDD with Spock
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
Responding to change
Responding to changeResponding to change
Responding to change
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDDTDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDD
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnit
 

Andere mochten auch

March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROI
March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROIMarch 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROI
March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROIHighRoad Solution
 
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.Casa no José Conrado de Araújo 3/4 sendo 1 suíte.
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.Elias Almeida
 
Boletín Técnico colec. Marzo de 2017
Boletín Técnico colec. Marzo de 2017Boletín Técnico colec. Marzo de 2017
Boletín Técnico colec. Marzo de 2017Ricardo Rivas Montiel
 
Fortune 1000 HR Leader Survey Results
Fortune 1000 HR Leader Survey ResultsFortune 1000 HR Leader Survey Results
Fortune 1000 HR Leader Survey ResultsChuck Solomon
 
Asterisk 13-reference
Asterisk 13-referenceAsterisk 13-reference
Asterisk 13-referenceSergi Duró
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionDionatan default
 
TDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleTDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleNoam Kfir
 
Spring으로 콩 심기
Spring으로 콩 심기Spring으로 콩 심기
Spring으로 콩 심기경원 이
 
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose preso
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose presoTest Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose preso
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose presoElad Elrom
 
TDD and more than 9000 tries to sell it to a customer
TDD and more than 9000 tries to sell it to a customerTDD and more than 9000 tries to sell it to a customer
TDD and more than 9000 tries to sell it to a customerAnuar Nurmakanov
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugbeom kyun choi
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)Brian Rasmussen
 
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...Sven Amann
 
ProInversión - diciembre 2016
ProInversión - diciembre 2016ProInversión - diciembre 2016
ProInversión - diciembre 2016agroalimentaria.pe
 

Andere mochten auch (20)

March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROI
March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROIMarch 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROI
March 17 2017 Inbound Lunch Bunch: Building Digital Ecosystems that Deliver ROI
 
Act. 5.2
Act. 5.2Act. 5.2
Act. 5.2
 
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.Casa no José Conrado de Araújo 3/4 sendo 1 suíte.
Casa no José Conrado de Araújo 3/4 sendo 1 suíte.
 
Subitización 1 a 4 panadería
Subitización 1 a 4  panaderíaSubitización 1 a 4  panadería
Subitización 1 a 4 panadería
 
Boletín Técnico colec. Marzo de 2017
Boletín Técnico colec. Marzo de 2017Boletín Técnico colec. Marzo de 2017
Boletín Técnico colec. Marzo de 2017
 
Fortune 1000 HR Leader Survey Results
Fortune 1000 HR Leader Survey ResultsFortune 1000 HR Leader Survey Results
Fortune 1000 HR Leader Survey Results
 
Asterisk 13-reference
Asterisk 13-referenceAsterisk 13-reference
Asterisk 13-reference
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in Action
 
TDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleTDD and the Legacy Code Black Hole
TDD and the Legacy Code Black Hole
 
Trabajo en equipo
Trabajo en equipoTrabajo en equipo
Trabajo en equipo
 
Spring으로 콩 심기
Spring으로 콩 심기Spring으로 콩 심기
Spring으로 콩 심기
 
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose preso
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose presoTest Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose preso
Test Driven Development (TDD) with FlexUnit 4 - 360|Flex San Jose preso
 
TDD and more than 9000 tries to sell it to a customer
TDD and more than 9000 tries to sell it to a customerTDD and more than 9000 tries to sell it to a customer
TDD and more than 9000 tries to sell it to a customer
 
TDD Overview
TDD OverviewTDD Overview
TDD Overview
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)
 
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...
TDD is for Dreamers, not for Real Developers, Isn't It? - Entwicklertag Frank...
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 
Brekaout ppt
Brekaout pptBrekaout ppt
Brekaout ppt
 
ProInversión - diciembre 2016
ProInversión - diciembre 2016ProInversión - diciembre 2016
ProInversión - diciembre 2016
 

Ähnlich wie TDD or TFD

Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
iOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestiOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestDoyKim
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
애자일 하라
애자일 하라애자일 하라
애자일 하라진수 허
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1대영 노
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)Kay Kim
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기현승 배
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17Yoon Hee Hwang
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 

Ähnlich wie TDD or TFD (20)

Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
TDD
TDDTDD
TDD
 
Tdd
TddTdd
Tdd
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
iOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestiOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit Test
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
애자일 하라
애자일 하라애자일 하라
애자일 하라
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
실전 애자일 게임 개발 (Agile Game Agile Game Development From The Trenches)
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 

TDD or TFD

  • 2. 테스트의 안내 테스트를 기반으로 개발을 진행하고 테스트로부터 피드백을 받는 데 집중
  • 3. TDD는 뭐야? TDD 시작하기 동작하는 골격 TDD 3가지 법칙 중첩된 고리형 시스템 기존 시스템 대상 TDD 유지하기 TDD and TAD 순 서
  • 4. TDD는 뭐야? TDD 3가지 법칙 -> 단순히 결함을 예방하는 테스트 코드 X -> 기능을 테스트하는 유닛테스트 X -> 회기 테스트 X -> TDD는 설계활동 O -> TDD가 왜 설계활동이라 불리는지 지금부터 알아봅시다. 1) failing test가 있을 때에만 제품 코드를 작성해야한 다. 2) 테스트 코드를 작성시에 실패를 나타낼 수 있는 최소의 코드만 작성하라. 즉, 내가 원하는 기능이 동작하지 않는 경우를 나타낼 수 있을 정도만! 3) 2번의 failing test code가 딱 성공할 만큼만 제품 코 드를 작성하라.
  • 5. TDD 시작하기 -> 어떻게 시작해? : 중첩된 고리형 시스템 만들기 중첩된 고리형 시스템 문제 이해 대략적인 설계 (아키텍처) 자동화 - 빌드 - 배포 - 전 구간 테스트 실패하는 인수 테스트 작성 실패하는 단위 테스트 작성 테스트 통과시키기 배포 가능 시스템 제품 출시 자동화된 빌드, 배포, 테스트 주기 전체를 구현해야한다.  빌드, 배포, 테스트 주기 전체에 대한 피드백을 받기 위해서 피드백을 통해서 예상 가능했던 문제들은 예를들어 어떤것들?  손으로 배포(일명 손배포)는 오류가 발생하기 쉬운 활동이므로 배포 과정의 자동화  개발 팀이 조직의 다른 부분과 접촉하기도 하며, 운영이 실제로 어떻게 되는지도 배워야하므로 이 과정을 통해 피드백을 충분히 받아야한다. 리팩터링
  • 6. 최초의 기능이 필요하다. 1) '동작하는 골격'을 대상으로 빌드, 배포, 테스트하는 방법을 파악 2) 그 기반 구조를 이용해 유의미한 첫 기능에 대한 인수테스트를 작성
  • 7. 동작하는 골격 이것의 요구사항은 대략적인 시스템 구조를 제안하고 그것의 유효성을 검증할 수 있을 정도. 딱 그정도. 예) 가령 데이터 베이스를 활용하는 웹 어플리케이션이라면 골격에서는 데이터베이스 필드가 보여질 것이다. *동작하는 골격의 외형 결정  이것은 애플리케이션의 개괄적인 구조를 결정하기 시작한다는 의미다.  어떤 전체 구조에 관한 구상 없이는 빌드, 배포, 테스트 주기를 자동화할 수 없다.  주요 시스템 컴포넌트와 그러한 컴포넌트의 상호 작용 방식에 대한 대략적인 그림. * 동작하는 골격의 핵심  팀에서 코드 작성을 시작하기 전에 반드시 취해야 할 필수적인 의사결정을 첫 테스트를 작성하는 과정을 활용해 프로젝트의 맥락을 짚어내는 데 있다.  이는 애자일 개발에서 좋지 않게 보는 " 과도한 사전 설계"와 혼동할 수 있다. 정교한 클래스 설계를 하는것이 아니라 단순히 현재 생각하고 있는 바가 틀릴 가능성이 있으므로 시스템이 성장해 가면서 세부 사항을 파알하는 방식을 선호하는 것.  위 말은 불확실성을 일찍 드러내어 초기에 각종 쟁점을 드러낸다. But, 프로젝트 초기라면 시간과 예산, 쟁점을 해결할 의지가 있을 때!
  • 8. 기존 시스템 대상 * 동작하는 골격을 만드는 것으로 프로젝트를 시작할 수 없다.  기본 구조가 아무리 부적당해도 그것을 이용해야 한다는 의미  일단은 빌드와 배포과정을 자동화한 다음, 변경하고자 하는 코드의 영역을 포괄하는 *전 구간 테스트*를 추가. 그렇게 코드 영역을 보호해 두면 좀 더 확신을 갖고 기능을 추가할 때마다 코드를 리팩터링하고 단위 테스트를 도입하며 내부 품질 문제를 해결. * 전 구간 테스트 기반 구조를 구축하는 가정 쉬운 방법 : 시스템을 관통하는 가장 단순한 경로를 이용하는 것. TDD 유지하기 시작과 비슷
  • 9. TDD 유지하기 새로운 기능 추가 -> 실패하는 인수테스트로 시작한다. 실패하는 인수 테스트 작성 실패하는 단위 테스트 작성 테스트 통과시키기 실패하는 인수테스트로 시작한다. => 당연히 구현이 되지 않았으므로 인수 테스트는 실패 리팩터링 < TDD 주기 유지 >
  • 10. 실패하는 단위 테스트 작성 테스트 통과시키기 리팩터링 테스트 코드는 가장 간단하고 사소한것부터 쓸때없는 것 -> 어렵고 중요한 것 1) 빨리 녹색을 볼 수 있어 기분이 좋아진다. 2) 어렵고 중요한 테스트 코드부터 작성하게 된다면 나중에 쉬운 case를 테스트할 수가 없다. 그리고 이미 다 되어있거나 그것만 따로 분리시킬 수 있는 구조가 아님. RED GREEN BLUE 나중에 시간될때? 지금해!!빾!!!!
  • 11. TDD and TAD TDD의 좋은 점. 1.디버깅 시간 단축 2.Decoupling 3.change to courage 4.trust(테스트는 낙하산에 비교) TAD의 안좋은 점. 1. 신뢰할 수 없다. 2. 불안하다. 3. Test code를 작성하는 시간이 지루하다. 4. 그 시간이 낭비적으로 느껴진다. 당신은 낙하산을 만들고 뛰어내릴 것인가. 뛰어내린 뒤에 낙하산을 만들것인가.
  • 12. Q n A

Hinweis der Redaktion

  1. 흔히 테스트 코드를 작성할 때 어려움이 있다면 설계가 잘못됐거나 위의 법칙을 지키지 않았기 때문
  2. 흔히들 말하는 것처럼 개발에서는 설계에 쏟는 시간이 많죠?보통 본격적으로 코딩을 하기 전 설계에 쏟는 시간이 많은데.TDD는 곧 설계활동이라고 말씀드렸다시피 본격적으로 테스트 코드를 작성하기 전에쏟는 시간이 많습니다. 시작이 절반이다 라는 말이 있는데 TDD에서는 거의 뭐..99.9%?
  3. 똥싸고 아 나중에 시간날때 닦아야지..