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