SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
나는 왜 TDD에 집착하는가?
박재성﴾자바지기﴿
NEXT, 코드스쿼드 양다리
2018년 3월 백수
SLiPP﴾https://www.slipp.net﴿ 커뮤니티 운영
나는 왜 TDD에 집착하는가?
Test Driven Developmenet(이하 TDD)란?
Kent Beck(켄트 벡)
TDD란 프로그래밍 의사결정과 피드백 사이의 간극을 의식하고 이를
제어하는 기술이다.
TDD의 아이러니 중 하나는 테스트 기술이 아니라는 점이다. TDD는
분석 기술이며, 설계 기술이기도 하다.
TDD = Test First Development + 리팩토링
TDD 라이브 코딩
요구사항
쉼표﴾,﴿ 또는 콜론﴾:﴿을 구분자로 가지는 문자열을 전달하는 경우
구분자를 기준으로 분리한 각 숫자의 합을 반환
null => 0, “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6 ...
나는 왜 TDD에 집착하는가?
1. 나는 사람이다.
세상에는 세 종류의 사람이 있다.
요구사항 추가, 변경 때문에 소스 코드를 수정하고 불안감에 살고 싶
지 않다.
사람답게 살고 싶다.
2. 나는 평범하다.
한 번에 한 가지만 집중할 수 있다.
Test Passes
로직을 구현하는 것에 집중
테스트를 통과하기 위해 어떠한 행위도 허용
심적으로 안정감을 얻을 수 있다.
Refactoring
클래스 설계
클린 코드
처음부터 완벽한 설계를 하는 것이 아니라
점진적으로 설계를 개선해 나갈 수 있다.
3. 나는 프로그래밍을 좋아한다.
학습 효율을 높일 수 있다.
내 자신에게 부끄럽지 않은 코드를 구현할 수 있다.
TDD, 리팩토링을 삶에 적용하기
책쓰기
현재 상태에서 쓸 수 있는 내용 위주로 빠르게 chapter를 마무리
chapter를 마무리했으므로 심적인 안정감
chapter를 마무리 한 후 편집자에게 공유 피드백
1차 퇴고
2차 퇴고 ... 마음에 들 때까지 무한 루프
회사 다니면서 창업
측정 가능한 가설 세움
실행을 통해 소비자에게 피드백
1차 개선
2차 개선 ... 목표 수익 달성까지 반복 개선
두 번째 상품 개발.. 반복
일정 목표를 달성하면 퇴사
TDD, 리팩토링의 핵심
큰 단위를 작은 단위로 나눠 지속적인 피드백을 통해 목표하고
개선
달성하기 힘들 것으로 생각하는 일에 도전할 수 있는 용기
일반인과 성공하는 사람의 시각 차이
커네빈 프레임워크
인과관계의 불확실성에 따라 문제 상황
Simple: 단순성 영역
모범 사례를 통해 문제 해결. 조립 설명서
Complicated: 난해성 영역
기존의 전문 지식을 활용해 문제 해결 가능
Complex: 복잡성 영역
새로운 해법을 제시하고 대응책을 모색
Chaotic: 혼돈 영역
불명확한 상태에서 살아남기 위한 방법을 찾아 대응
앞으로 해결해야할 상당히 많은 문제는 명확하게 문제가 정의되어
있지 않거나, 분석할 데이터도 없기 때문에 기존의 접근 방식으로 해
결하기 힘든 Complex﴾복잡성﴿ 영역이다.
끊임없이 작은 실패와 피드백을 통해 점진적으로 개선해 나가는 것
이 앞으로 남겨진 문제를 해결하는 좋은 방법이다.
지금 필요한 것은 기존의 문제해결 접근방식에 도전할 수 있는 용기

Weitere ähnliche Inhalte

Was ist angesagt?

プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
 

Was ist angesagt? (20)

Palindromic tree
Palindromic treePalindromic tree
Palindromic tree
 
AtCoder Regular Contest 001
AtCoder Regular Contest 001AtCoder Regular Contest 001
AtCoder Regular Contest 001
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
TSPを山登り法と焼きなまし法で解く
TSPを山登り法と焼きなまし法で解くTSPを山登り法と焼きなまし法で解く
TSPを山登り法と焼きなまし法で解く
 
[IGC 2016] 브러쉬온 안희철 - 재미있는 컨셉 아트를 만들기 위한 디자인 발상법
[IGC 2016] 브러쉬온 안희철 - 재미있는 컨셉 아트를 만들기 위한 디자인 발상법[IGC 2016] 브러쉬온 안희철 - 재미있는 컨셉 아트를 만들기 위한 디자인 발상법
[IGC 2016] 브러쉬온 안희철 - 재미있는 컨셉 아트를 만들기 위한 디자인 발상법
 
ゲーム屋ですがこんな風にXD使ってます(Xd勉強会20180316)
ゲーム屋ですがこんな風にXD使ってます(Xd勉強会20180316)ゲーム屋ですがこんな風にXD使ってます(Xd勉強会20180316)
ゲーム屋ですがこんな風にXD使ってます(Xd勉強会20180316)
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
Node canvasで作るプロトタイプ
Node canvasで作るプロトタイプNode canvasで作るプロトタイプ
Node canvasで作るプロトタイプ
 
OpenALの紹介
OpenALの紹介OpenALの紹介
OpenALの紹介
 
NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~コマンドライン・インターフェース(CLI)を使ってみましょう~
NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~コマンドライン・インターフェース(CLI)を使ってみましょう~NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~コマンドライン・インターフェース(CLI)を使ってみましょう~
NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~コマンドライン・インターフェース(CLI)を使ってみましょう~
 
Humble Object Patternな話
Humble Object Patternな話Humble Object Patternな話
Humble Object Patternな話
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
NHN NEXT 게임 전공 소개
NHN NEXT 게임 전공 소개NHN NEXT 게임 전공 소개
NHN NEXT 게임 전공 소개
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 

Ähnlich wie 나는 왜 TDD에 집착하는가?

홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
codevania
 

Ähnlich wie 나는 왜 TDD에 집착하는가? (20)

TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기
 
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
애자일 개발 프로세스를 이용한 고품질 소프트웨어 개발
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서
 
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심문제해결(Ver1)"
 
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"
[동그라미재단] ㄱ찾기 - 적정기술미래포럼 "인간중심 문제해결 방법"
 
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
 
애자일프랙티스
애자일프랙티스애자일프랙티스
애자일프랙티스
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)
 
린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
 
Learning Unit Testing with Pair Programming
Learning Unit Testing with Pair ProgrammingLearning Unit Testing with Pair Programming
Learning Unit Testing with Pair Programming
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
 
프로젝트관리­ 3회
프로젝트관리­ 3회프로젝트관리­ 3회
프로젝트관리­ 3회
 

Mehr von Javajigi Jaesung

나, 우리, 스터디
나, 우리, 스터디나, 우리, 스터디
나, 우리, 스터디
Javajigi Jaesung
 

Mehr von Javajigi Jaesung (12)

소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
 
패캠 네트워킹 데이 - 침묵으로 가르치기
패캠 네트워킹 데이 - 침묵으로 가르치기패캠 네트워킹 데이 - 침묵으로 가르치기
패캠 네트워킹 데이 - 침묵으로 가르치기
 
어느 40대 아저씨 이야기
어느 40대 아저씨 이야기어느 40대 아저씨 이야기
어느 40대 아저씨 이야기
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
 
커뮤니티 활동과 스터디
커뮤니티 활동과 스터디커뮤니티 활동과 스터디
커뮤니티 활동과 스터디
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
2014년에 만든 나만의 이력서
2014년에 만든 나만의 이력서2014년에 만든 나만의 이력서
2014년에 만든 나만의 이력서
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
어떻게 배움을 만들어 갈 것인가
어떻게 배움을 만들어 갈 것인가어떻게 배움을 만들어 갈 것인가
어떻게 배움을 만들어 갈 것인가
 
나, 우리, 스터디
나, 우리, 스터디나, 우리, 스터디
나, 우리, 스터디
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 

나는 왜 TDD에 집착하는가?