SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
–Kent Beck
‘내가 12살 괴짜시절에 읽었던 책이 있는데, 실제 입력
테이프를 넣었을 때 그 결과로 기대할 수 있는 출력 테이
프를 미리 타이프해 넣고, 실제 결과가 기대 결과와 같아
질 때까지 코딩하라고 제안했다. 그 책을 쓴 이름 모르는
저자에게: 고마워요, 고마워요, 고마워요.’
– 김창준
‘테스트를 먼저 하다니 도대체 말이나 될 법한 소리인
가? 아니 말이 된다. 그것도 아주 훌륭히.’
파이썬 TDD 101
for Python Korea
TDD 소개
TDD란?
• Test Driven Development 테스트 주도적인 개발
• 소스코드 작성 전에 테스트 코드를 먼저 작성하라
• “단순한 설계를 장려하고 자신감을 불어넣는다.” - Kent
Beck
• “잘 동작하는 깔끔한 코드” - Ron Jeffries
TDD 싸이클
• 빨강 - 실패하는 작은 테스트를 작성한다
• 초록 - 빨리 테스트가 통과하게끔 만든다. 죄악을 저질러
도 좋다
• 리팩토링 - 테스트를 통과하게 하는 와중에 생겨난 문제
와 중복을 제거한다
TDD의 장점
• 높은 소스코드 품질 (MS와 IBM 사례)
• http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
• 15~35% 개발 시간 증가
• 40~90% 결함(버그) 감소
• 재설계 및 디버깅 시간의 절감
• 퍼포먼스 체크 및 추가 대응에 용이
• 문서화 대체
TDD의 단점
• 단기적 코드 생산성 하락
• 실제 코드보다 TC(Test-Case) 유지보수 비용이 더 커질
수도
• 과도한 Mock-up 비용 -> Docker나 Chef 이용 바람직
TDD 수련법
• 간단하고 쉬운 문제들을 TDD를 시도한다.
• 초록막대주기( 테스트가 합격된 상태에서 다음 합격 상태
까지 )를 짧게 가져간다.
• 가짜로 구현하기를 사용한다.
• 보폭을 조절한다. 너무 큰 것을 테스트 하고 있다면 쪼갠다.
• 테스트 하기 힘든 것은 레이어를 나누어 가능한 계층에 대
해서 한다
TDD로 풀기 난해한 분야들
• 보안 소프트웨어와 동시성 문제
• 게임 클라이언트
• UI가 많은 어플리케이션
• 의존하는 외부 시스템이 많은 서비스
TDD와 파이썬
• 파이썬과 같은 동적언어는 TDD를 하기에 보다 적합하다.
• 컴파일 단계의 체크가 약하기에, TDD가 꼭 필요하다.
TDD 시연
시연 과제 - URL Splitter
• https://www.google.co.kr/#q=seoul 과 같은 URL주소
를 다음과 같이 분리하는 코드를 작성하여라
• 프로토콜: http
• 도메인: www.google.com
• 경로: #q=seoul
파이썬 TDD 툴들
• unittest 모듈 - 기본 내장되어 있으나 구식
• nose - 전통적으로 많이 사용
• pytest - 최신의 다양한 기능이 많음 👈
• coverage - 코드 커버리지 분석 👈
• 툴에 너무 집착하지 말자. 단순 assert로도 충분!
준비
• 필요 모듈 설치
• pip install pytest
• pip install pytest-cov
• pip install coverage
• 파일 생성 urlsplit.py, test_urlsplit.py
• tests/ 폴더를 따로 만드는 것도 좋습니다.
1. 기본 기능 동작하게
• https://www.google.co.kr/#q=seoul 분석 - 가짜 구현!?
• ftp://ftp.daum.net/ubuntu-releases 분석 - 어쩔 수 없
이 제대로
• 옵션 - 프로토콜이나 경로가 없는 경우에도 동작하게
fixture 사용하기
• 퍼포먼스 체크를 위해 더 많은 URL에 대해 수행해보자
• test_urls를 @pytest.fixture 로 만들기
• pytest -k 를 사용하여 특정 테스트만 실행 시키기
• 이를 위해 테스트 이름 정리 필요
• -s 옵션으로 print 출력 결과 보기
예외 발생 시키기
• 이상한 URL이 들어오면 ValueError 예외 발생
• pytest.raises 이용
yield_fixture 사용해보기
• @pytest.yield_fixture
coverage 구하기
• 기본 실행
• py.test —cov urlsplit
• HTML 보고서 보기
• py.test —cov urlsplit —cov-report=html
• is_valid 함수 별도 구현 후 다시 시도
• coverage 100%에 도전!
정리
알고리즘 풀이에 적용하자
• 알고리즘 문제 풀이는 TDD 적용이 용이한 분야
• 먼저 예시를 만족하는 풀이를 구현하고,
• 다음과 같은 TC를 생각해서 테스트 하자
• 경계조건
• 퍼포먼스 측정
• 리팩토링 후 점검
웹 개발을 TDD로 하려면?
TDD의 확장
• CI(Continuous Integration)툴과의 연계
• Travis CI, drone.io 등 이용
• Coveralls로 커버리지 모니터링
wzdat의 사례
Q&A
“좋은 습관이 좋은 코드를 만듧니다.”
실습 문제: 계산기
• 한 줄씩 수식을 받아들이고, 계산 결과를 출력
1. 3 + 4 ==> 7 # 단순 계산
2. 3 + 4 / 2 ==> 5 # 연산자 우선 순위
3. (3 + 4) / 2 ==> 3 # 괄호 처리
4. x = 4

(3 + x) / 2 ==> 3 # 변수 대입
참고 자료
• http://www.slideshare.net/HenryLee23/tdd-42599167?
qid=d9810730-1432-455a-9de7-
a178dd55b675&v=default&b=&from_search=7
• http://www.slideshare.net/doortts/tddrefactoring-day-02-tdd?
qid=d9810730-1432-455a-9de7-
a178dd55b675&v=default&b=&from_search=1
• http://www.slideshare.net/hoonsbara/tdd-41738171?
qid=d9810730-1432-455a-9de7-
a178dd55b675&v=default&b=&from_search=4

Más contenido relacionado

La actualidad más candente

Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Youngtaek Oh
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
Py.test
Py.testPy.test
Py.testsoasme
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationamscanne
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기Hyunsuk Ahn
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
 
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at FlickrJohn Allspaw
 
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기Kee Hoon Lee
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 

La actualidad más candente (20)

Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Py.test
Py.testPy.test
Py.test
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
 
POSTMAN.pptx
POSTMAN.pptxPOSTMAN.pptx
POSTMAN.pptx
 
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기
실시간 이상탐지를 위한 머신러닝 모델에 Druid _ Imply 활용하기
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 

Destacado

WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석정주 김
 
Deploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGIDeploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGI정주 김
 
Interactive fiction
Interactive fictionInteractive fiction
Interactive fiction정주 김
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편준철 박
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기정주 김
 

Destacado (6)

WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석WzDat과 Pandas를 통한 로그 데이터 분석
WzDat과 Pandas를 통한 로그 데이터 분석
 
Deploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGIDeploying flask with nginx & uWSGI
Deploying flask with nginx & uWSGI
 
Interactive fiction
Interactive fictionInteractive fiction
Interactive fiction
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기
 

Similar a 파이썬 TDD 101

리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Lee Geonhee
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스한 경만
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
애자일 하라
애자일 하라애자일 하라
애자일 하라진수 허
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)Sungmin Kim
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다이상한모임
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 

Similar a 파이썬 TDD 101 (20)

리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
Tdd
TddTdd
Tdd
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기
 
TDD or TFD
TDD or TFDTDD or TFD
TDD or TFD
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
Tdd
TddTdd
Tdd
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
애자일 하라
애자일 하라애자일 하라
애자일 하라
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
KGC 2014, 'Software Enginner in Test' in Game Development (Bluehole Studio)
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 

파이썬 TDD 101

  • 1. –Kent Beck ‘내가 12살 괴짜시절에 읽었던 책이 있는데, 실제 입력 테이프를 넣었을 때 그 결과로 기대할 수 있는 출력 테이 프를 미리 타이프해 넣고, 실제 결과가 기대 결과와 같아 질 때까지 코딩하라고 제안했다. 그 책을 쓴 이름 모르는 저자에게: 고마워요, 고마워요, 고마워요.’
  • 2. – 김창준 ‘테스트를 먼저 하다니 도대체 말이나 될 법한 소리인 가? 아니 말이 된다. 그것도 아주 훌륭히.’
  • 3. 파이썬 TDD 101 for Python Korea
  • 5. TDD란? • Test Driven Development 테스트 주도적인 개발 • 소스코드 작성 전에 테스트 코드를 먼저 작성하라 • “단순한 설계를 장려하고 자신감을 불어넣는다.” - Kent Beck • “잘 동작하는 깔끔한 코드” - Ron Jeffries
  • 6. TDD 싸이클 • 빨강 - 실패하는 작은 테스트를 작성한다 • 초록 - 빨리 테스트가 통과하게끔 만든다. 죄악을 저질러 도 좋다 • 리팩토링 - 테스트를 통과하게 하는 와중에 생겨난 문제 와 중복을 제거한다
  • 7.
  • 8. TDD의 장점 • 높은 소스코드 품질 (MS와 IBM 사례) • http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf • 15~35% 개발 시간 증가 • 40~90% 결함(버그) 감소 • 재설계 및 디버깅 시간의 절감 • 퍼포먼스 체크 및 추가 대응에 용이 • 문서화 대체
  • 9. TDD의 단점 • 단기적 코드 생산성 하락 • 실제 코드보다 TC(Test-Case) 유지보수 비용이 더 커질 수도 • 과도한 Mock-up 비용 -> Docker나 Chef 이용 바람직
  • 10. TDD 수련법 • 간단하고 쉬운 문제들을 TDD를 시도한다. • 초록막대주기( 테스트가 합격된 상태에서 다음 합격 상태 까지 )를 짧게 가져간다. • 가짜로 구현하기를 사용한다. • 보폭을 조절한다. 너무 큰 것을 테스트 하고 있다면 쪼갠다. • 테스트 하기 힘든 것은 레이어를 나누어 가능한 계층에 대 해서 한다
  • 11. TDD로 풀기 난해한 분야들 • 보안 소프트웨어와 동시성 문제 • 게임 클라이언트 • UI가 많은 어플리케이션 • 의존하는 외부 시스템이 많은 서비스
  • 12. TDD와 파이썬 • 파이썬과 같은 동적언어는 TDD를 하기에 보다 적합하다. • 컴파일 단계의 체크가 약하기에, TDD가 꼭 필요하다.
  • 14. 시연 과제 - URL Splitter • https://www.google.co.kr/#q=seoul 과 같은 URL주소 를 다음과 같이 분리하는 코드를 작성하여라 • 프로토콜: http • 도메인: www.google.com • 경로: #q=seoul
  • 15. 파이썬 TDD 툴들 • unittest 모듈 - 기본 내장되어 있으나 구식 • nose - 전통적으로 많이 사용 • pytest - 최신의 다양한 기능이 많음 👈 • coverage - 코드 커버리지 분석 👈 • 툴에 너무 집착하지 말자. 단순 assert로도 충분!
  • 16. 준비 • 필요 모듈 설치 • pip install pytest • pip install pytest-cov • pip install coverage • 파일 생성 urlsplit.py, test_urlsplit.py • tests/ 폴더를 따로 만드는 것도 좋습니다.
  • 17. 1. 기본 기능 동작하게 • https://www.google.co.kr/#q=seoul 분석 - 가짜 구현!? • ftp://ftp.daum.net/ubuntu-releases 분석 - 어쩔 수 없 이 제대로 • 옵션 - 프로토콜이나 경로가 없는 경우에도 동작하게
  • 18. fixture 사용하기 • 퍼포먼스 체크를 위해 더 많은 URL에 대해 수행해보자 • test_urls를 @pytest.fixture 로 만들기 • pytest -k 를 사용하여 특정 테스트만 실행 시키기 • 이를 위해 테스트 이름 정리 필요 • -s 옵션으로 print 출력 결과 보기
  • 19. 예외 발생 시키기 • 이상한 URL이 들어오면 ValueError 예외 발생 • pytest.raises 이용
  • 21. coverage 구하기 • 기본 실행 • py.test —cov urlsplit • HTML 보고서 보기 • py.test —cov urlsplit —cov-report=html • is_valid 함수 별도 구현 후 다시 시도 • coverage 100%에 도전!
  • 22.
  • 24. 알고리즘 풀이에 적용하자 • 알고리즘 문제 풀이는 TDD 적용이 용이한 분야 • 먼저 예시를 만족하는 풀이를 구현하고, • 다음과 같은 TC를 생각해서 테스트 하자 • 경계조건 • 퍼포먼스 측정 • 리팩토링 후 점검
  • 25. 웹 개발을 TDD로 하려면?
  • 26. TDD의 확장 • CI(Continuous Integration)툴과의 연계 • Travis CI, drone.io 등 이용 • Coveralls로 커버리지 모니터링
  • 28. Q&A “좋은 습관이 좋은 코드를 만듧니다.”
  • 29. 실습 문제: 계산기 • 한 줄씩 수식을 받아들이고, 계산 결과를 출력 1. 3 + 4 ==> 7 # 단순 계산 2. 3 + 4 / 2 ==> 5 # 연산자 우선 순위 3. (3 + 4) / 2 ==> 3 # 괄호 처리 4. x = 4
 (3 + x) / 2 ==> 3 # 변수 대입
  • 30. 참고 자료 • http://www.slideshare.net/HenryLee23/tdd-42599167? qid=d9810730-1432-455a-9de7- a178dd55b675&v=default&b=&from_search=7 • http://www.slideshare.net/doortts/tddrefactoring-day-02-tdd? qid=d9810730-1432-455a-9de7- a178dd55b675&v=default&b=&from_search=1 • http://www.slideshare.net/hoonsbara/tdd-41738171? qid=d9810730-1432-455a-9de7- a178dd55b675&v=default&b=&from_search=4