SlideShare une entreprise Scribd logo
1  sur  48
당신의 TDD가 항상 실패하는 이유
우리는
우리 프로젝트는
• Non-Startup
• Business Service
• Global Market
• Competitors
• Message-Driven
• Multitenancy
• Scalable
• Responsive
우리 팀은
비장하다
Message-Driven
Domain-Driven Design
Event Sourcing
Command Query Responsibility Segregation
Test-Driven Development
Continuous Deployment
Code Review
Pair Programming
Retrospective
Sprint
Distributed System
Asynchronous
Cloud
우리 평가는
“생각보다 만족한다.”
“방향 잘 잡았다.”
TDD가 실패하는 이유
“You are not prepared!”
Illidan Stormrage
당신이 TDD에 실패하는 이유
당신은 이렇게 하지 않는다.
우리가 보호해야 하는 것
• AWS
우리가 보호해야 하는 것
• AWS
우리가 보호해야 하는 것
• AWS
• Spring
우리가 보호해야 하는 것
• AWS
• Spring
우리가 보호해야 하는 것
• AWS
• Spring
• 도메인
우리가 보호해야 하는 것
• 도메인
우리가 제어할 수 없는 것
• 외부 세상
• 실 세계
• 인프라
• 외부 서비스
• 레거시
설계
• 낮은 결합
• 높은 응집
• 도메인 모델 보호
설계를 테스트 하라
구현 테스트
Test
Interface
Implementation
Test
Test
Test
구현 테스트
Test
Interface
Implementation
Test
Test
Test
구현 테스트
Test
Interface
Implementation
Test
Test
Test
정보 숨김(Information Hiding)
• David Parnas, 1971
• On the Criteria To Be Used in Decomposing Systems into Modules
• Information distribution aspects of design methodology
• 어려운 설계 결정과 변경될 가능성이 높은 설계
결정들을 다른 모듈로부터 숨기는 것
설계 테스트
Test
Interface
Implementation
Test
Test
Test
설계 테스트
Test
Interface
Implementation
Test
Test
Test
레거시와 함께 살기
Legacy
Adapter
System Under Test
당신의 팀이 TDD에 실패하는 이유
당신의 팀은 이렇게 하지 않는다.
프로세스
• 점진
• 반복
• Fail-Fast
반복 주기
• 계획
• 실행
• 평가
문화
• 공유
• 목표
• 지식
아키텍처
• 낮은 결합
• 높은 응집
• 도메인 모델 보호
도메인 모델과 플랫폼
Platform
Domain Model
도메인 모델과 플랫폼
Platform
Domain Model
아키텍처 사례
Business Logic
Services
Modules
Application Platform
MVVM 아키텍처 패턴
Model
View
View Model
신나고 재미난 라이브 코딩
목적
• 소프트웨어 사용자에게 어떤 가치를 전달할
것인가?
분석
• 목적을 달성하기 위해 소프트웨어에 어떤 변경이
필요한가?
작업 설계
• 소프트웨어 변경은 어떤 세부 작업들이 있는가?
• 각 작업들은 어떤 순서로 진행되어야 하는가?
• 각 작업들은 누가 담당하는가?
TDD
Red
GreenRefactor
ATDD + TDD
Red
GreenRefactor
Red
Green
Unit TestAcceptance Test
코드 설계
• 작업에는 어떤 코드 변경(commit)이 필요한가?
테스트 작성
• 코드 변경을 검증하는 자동화된 테스트 케이스
코딩
• 테스트 케이스를 만족하는 최소한의 코드 쓰기
리팩터
• 의도 노출
• 중복 제거
• 추상화 수준 조절
피드백
• 단위 테스팅
• 코드 리뷰
• 기능 테스팅
• 수동 테스팅
• 사용자 반응 수집
질문

Contenu connexe

Similaire à Why you always fail with tdd

꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3uEngine Solutions
 
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저Amazon Web Services Korea
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략Amazon Web Services Korea
 
Cloud native application 입문
Cloud native application 입문Cloud native application 입문
Cloud native application 입문Seong-Bok Lee
 
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...Oracle Korea
 
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017Amazon Web Services Korea
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략Ji-Woong Choi
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 iFunFactory Inc.
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
170325 스마트앱개발자포럼-세선1-부산창조혁신센터
170325 스마트앱개발자포럼-세선1-부산창조혁신센터170325 스마트앱개발자포럼-세선1-부산창조혁신센터
170325 스마트앱개발자포럼-세선1-부산창조혁신센터세준 김
 
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...Amazon Web Services Korea
 
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트Amazon Web Services Korea
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
151208 슬라이드쉐어공유자료
151208 슬라이드쉐어공유자료151208 슬라이드쉐어공유자료
151208 슬라이드쉐어공유자료HOSTWAY .
 
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 IntroAmazon Web Services Korea
 
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018Amazon Web Services Korea
 
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기현승 배
 

Similaire à Why you always fail with tdd (20)

꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3
 
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략
AWS Summit Seoul 2015 - 엔터프라이즈에서의 하이브리드 환경 전략
 
Cloud native application 입문
Cloud native application 입문Cloud native application 입문
Cloud native application 입문
 
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...
[2015 Oracle Cloud Summit] 3. Database as a Service_Private Cloud상의 DB as a S...
 
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017
Photon게임서버 네트워크엔진과 GBaaS를 통한 AWS DB 서비스 구성 방법 소개 - AWS Summit Seoul 2017
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
170325 스마트앱개발자포럼-세선1-부산창조혁신센터
170325 스마트앱개발자포럼-세선1-부산창조혁신센터170325 스마트앱개발자포럼-세선1-부산창조혁신센터
170325 스마트앱개발자포럼-세선1-부산창조혁신센터
 
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...
변화와 혁신을 위한 클라우드 마이그레이션 – 김진우 AWS 어카운트 매니저, 이아영 네오위즈 가버너스팀 팀장, 박주희 우아한형제들 시스템신...
 
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트
[Gaming on AWS] 클라우드에 대한 오해들 - 한빛소프트
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
151208 슬라이드쉐어공유자료
151208 슬라이드쉐어공유자료151208 슬라이드쉐어공유자료
151208 슬라이드쉐어공유자료
 
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
성공적인 AWS Cloud 마이그레이션 전략 및 사례 - 방희란 매니저:: AWS Cloud Track 1 Intro
 
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
 
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기
 

Plus de Gyuwon Yi

Event sourcing spring camp 2017.public
Event sourcing spring camp 2017.publicEvent sourcing spring camp 2017.public
Event sourcing spring camp 2017.publicGyuwon Yi
 
CQRS - Show me the code
CQRS - Show me the codeCQRS - Show me the code
CQRS - Show me the codeGyuwon Yi
 
프로그래밍, 설계 그리고 패턴
프로그래밍, 설계 그리고 패턴프로그래밍, 설계 그리고 패턴
프로그래밍, 설계 그리고 패턴Gyuwon Yi
 
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Gyuwon Yi
 
Unit testing
Unit testingUnit testing
Unit testingGyuwon Yi
 
Xamarin Forms, MVVM and Testing
Xamarin Forms, MVVM and TestingXamarin Forms, MVVM and Testing
Xamarin Forms, MVVM and TestingGyuwon Yi
 
Reactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureReactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureGyuwon Yi
 
Introduction to IoC Container
Introduction to IoC ContainerIntroduction to IoC Container
Introduction to IoC ContainerGyuwon Yi
 
Introduction to TPL
Introduction to TPLIntroduction to TPL
Introduction to TPLGyuwon Yi
 

Plus de Gyuwon Yi (10)

Event sourcing spring camp 2017.public
Event sourcing spring camp 2017.publicEvent sourcing spring camp 2017.public
Event sourcing spring camp 2017.public
 
CQRS - Show me the code
CQRS - Show me the codeCQRS - Show me the code
CQRS - Show me the code
 
CQRS
CQRSCQRS
CQRS
 
프로그래밍, 설계 그리고 패턴
프로그래밍, 설계 그리고 패턴프로그래밍, 설계 그리고 패턴
프로그래밍, 설계 그리고 패턴
 
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
Azure를 이용한 Join 없는 글로벌 분산 시스템 설계하기
 
Unit testing
Unit testingUnit testing
Unit testing
 
Xamarin Forms, MVVM and Testing
Xamarin Forms, MVVM and TestingXamarin Forms, MVVM and Testing
Xamarin Forms, MVVM and Testing
 
Reactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureReactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel Architecture
 
Introduction to IoC Container
Introduction to IoC ContainerIntroduction to IoC Container
Introduction to IoC Container
 
Introduction to TPL
Introduction to TPLIntroduction to TPL
Introduction to TPL
 

Why you always fail with tdd