SlideShare a Scribd company logo
(주)엑셈 / 임도형
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
• 업무를 통해 개인의 실력이 향상.
• 업무의 결과가 좋다. 일정과 코드.
• 반복적이거나 지겹지 않다.
• 도전적이고 성취감 있다.
• 대상 업무를 선택할 수 있다.
• 대상 프로젝트를 선택할 수 있다.
• 매출이 잘된다.
• 버그가 적다.
• 신 기술을 적용해 볼 수 있다.
• 이직이 쉽다.
• 연봉이 잘 오른다.
• 외부에 이름이 알려진다.
이상적인 개발
• 적절한 일정.
• 업무와 무관한 공부도 할수 있고.
• 외부 세미나도 참석하고.
• 미팅 적고.
• 문서 작성 적고.
• 프로젝트도, 팀도, 회사도 안정되고.
• 동료와 얘기가 통하고.
• 인사 평가 신경 안쓰고.
• 당연한 퇴근, 주말, 취미.
이상적인 개발
• 전부 반대
• 항상 같은 일, 지겹고 반복적이고.
• 코드 파악 어렵고, 문서 없고, 코드 고치면 버그 생기고.
• 항상 일정 쪼이고, 야근에, 피곤에
• 매출 적고, 프로젝트/팀/회사 위태. 연봉 적고, 안오르고.
• 쪼이고, 쪼고, 짜증내고, 싸우고.
• 실력보단 인맥. 사람에 충성.
• 공부할 시간 없고, 세미나 스터디 외면.
• 이직할 생각만, 하지만 이직은 어렵고.
현실은
이상적인 개발은
모두가 원한다.
개발자도
팀장도
경영자도
이상은 그냥 꿈?
이상은 그냥 꿈?
존재는 하는 것 같다.
말로만 들었지만
Google, Amazon, …
필수적인 테스트 케이스
성공적인 모든 SW의 공통점.
테스트 케이스 없이는 머징 불가
이상으로 가는 핵심
가장 효과가 크다.
반대로 테스트 케이스 없이는 현실 탈출 불가.
테스트 기발 개발, TBD(Test based developement)
변경했으면 확인하자
확인을 자동으로 하자.
코드로.
자동으로 확인하는 코드
그것이 테스트 케이스
언어와 무관
JUnit과 무관
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
테크닉이 아니다.
JUnit은 누구나 안다.
테스트 케이스를 가지고
일하는 습관이다.
머리가 아닌
몸이 익혀야 한다.
작업을 했는데,
테스트 케이스로
확인 못하면
못 견디도록.
약간의
테크닉, 노하우, 팁
물론 있다.
예전에 무시했던
maven, git과 같다.
이젠 없으면 불가한.
문화는 사람 사이에 존재
종이 위에 있지 않다.
문화가 있으면
신규자는
자연스럽게 적응
테스트 기발 개발, TBD(Test based developement)
• 코드 체크아웃
• 테스트 케이스 성공 확인
• 코딩(본 코드 + 테스트 케이스)
• 작성한 테스트 케이스 성공 확인
• 모든 테스트 케이스 성공 확인
• 문서 작성
• 커밋, 머지 리퀘스트 생성
• 코드 리뷰
• 머지 실행
순서
• 코드를 체크 아웃
• 기존 테스트 케이스의 성공 확인
• 실패하면 이를 공지하고 픽스를 요청한다.
• 픽스 후 다시 체크아웃하여 성공을 확인한다.
코드 체크 아웃과 테스트 케이스 확인
실패한 테스트 케이스 1개
• 현재 실패하는 테스트 케이스가 기존의 것인 지, 수정된 것에 기
인한것인 지 모른다.
• 기존의 것이 전부 성공했다면, 무조건 수정된 것에 의한 것이다.
기존에 깨진 테스트 케이스가 있으면
전체 성공이
작성보다 더 중요하다
• 커밋 전에 전체 실행해서 성공을 확인
• 전체 실행해서 성공 확인하는 거… 생각보다 아주 어렵다.
• 그리고 CI 서버가 필요.
• CI 서버 없이 테스트 케이스로 개발하기 어렵다.
항상 성공을 지키려면
• 본 코드를 작성하면, 하여간 동작을 확인해야 한다.
• 이를 테스트 케이스로 한다.
• 작성한 테스트 케이스는 당연히 성공해야 하고
본 코드와 테스트 케이스 작성
• 작성한 테스트 케이스외에, 기존에 있던 모든 테스트 케이스의
성공을 확인한다.
• 실패한다면, 하여간에 수정된 것에 기인한 것이다.
• 이 과정을 누락하면, 타인이 작업을 못한다.
모든 테스트 케이스 성공 확인
• 무엇을 했는 지 문서만 보고도 파악할 수 있어야.
• 코드를 보고 파악하는 것은 무척 어렵다. 특히 여러 파일에 걸쳐
작업된 경우는.
• 하여간에 코드만을 보고 이해할 수 없는 것은 전부 기술되어야
한다.
• 작성하는 문서는 코드 리뷰를 목적으로 한다.
• 포멧은 상관없다.
문서 작성
• 커밋 하기 전에 변경된 부분 하나하나 검토한다.
• 그러면서 기억안나는, 코드 변경 이유가 생각나고 이를 문서에
적어주면 좋다.
문서 작성 팁
• 전체 작업 내용을 요약
• 변경된 파일 리스트와 각 변경 요약
• 세부 작업의 설명
• 실패하고 고생한 사항.
• 추후 진행할 TODO
문서에 포함될 내용
• 작성한 문서를 첨부.
머지 리퀘스트 생성
• 머지 리퀘스트에 첨부된 문서를 가지고 작업을 설명.
• 코딩 완료 여부는 테스트 케이스 리스트로 판단한다.
• 충분한 테스트 케이스가 있고, 테스트 케이스가 충실히 구현되어
다면, 본 코드의 구현 여부는 믿을 수 있다.
• 이후 본 코드의 리뷰는 로직 보다는 단지 컨벤션만 보면 된다.
코드 리뷰
• 내가 타인이 작업한 결과를 이어서 작업할 정도로 정리가 잘 되
었는가.
• 문서와 코드가 내가 이해할 정도로 잘 정리되었는가.
• 파악할 사항
• 테스트 케이스의 내용
• 코드 컨벤션.
• 대면 코드리뷰가 아닌 online 코드리뷰 만으로 이해가 되어야 한
다.
코드 리뷰의 기준
• 코드 리뷰.
• 타인이 이해하고 이후 작업할 수 있다는 확신이 들도록 작업을
설명하는 것.
• 그리고 최종적으로 머징.
문서의 목적
• 언급된 사항들을 수정한다.
• 혹은 언급된 사항에 대한 설명을 한다.
코드 리뷰 사항 반영
• 프로젝트 소유자가 코드리뷰와 그 반영을 확인하고 머징.
머징
테스트 기발 개발, TBD(Test based developement)
부작용이 방지된다.
수정으로 인해 발생하는 버그를 드러내게 한다.
유일한 방법.
코드 리뷰가
쉬워진다.
로직을 상세히 파악 안해도 된다.
안 싸워도 된다.
코드 파악이
쉬워진다.
특정 단위의 실행 코드가 존재.
코드 사용 샘플
테스크 케이스 코드 자체가 사용 샘플이다.
호출 하기 위한 값들이 코드에 보인다.
본 코드의 구조 향상
테스트 케이스를 작성하려면
본 코드가 의존성 없이 잘 분리되어 있어야 한다.
설계 향상
단위로 테스트 케이스를 작성하려면
단위로 쪼개서 설꼐해야 한다.
버그 부활 방지
한번 픽스된 버그는 그 픽스한 테스트 케이스가 커버한다.
부활되어(테스트 케이스 실패하여) 커밋 될 수 없다.
전체 이해 없이
부분 작업 가능
부분만 이해하고 수정해도,
이로 이한 부작용을 우려하지 않아도 된다.
• 기존 코드 파악이 어렵다.
• 작업을 진행해도 불안하다.
• 버그가 발생해도 모른다.
• 긴 시간 후에 고객이 버그를 리포팅한다.
• 리포팅된 정보만으로 버그를 유추한다.
• 분석에 오랜 시간이 걸린다.
• 버그 현상을 재현하기 어렵다. 못하는 경우도 있다.
• 유추한 사항으로 원인을 상상한다.
• 상상한 대로 코드를 수정하고 배포.
• 하지만 버그를 픽스했는지 확신하지 못한다.
버그 발생과 픽스 - 테스트 케이스 없이
• 기존 코드 파악이 쉽다.
• 수정 직후 기존 테스트 케이스가 실패하여 버그 출현을 파악한다.
• 분석할 필요도 없이 직관적으로 픽스한다.
버그 발생과 픽스 - 테스트 케이스 있으면
테스트 기발 개발, TBD(Test based developement)
코딩은 오직 3가지
- 기능 추가
- 버그 픽스
- 리팩터링
• 추가한 기능의 동작을 확인하는 테스트 케이스를 작성한다.
• 이후 코드의 수정으로 인한 버그는 이 테스트 케이스로 커버된다.
기능 추가
• 버그를 재현하는 테스트 케이스를 작성한다.
• 작성한 테스트 케이스는 리포팅된대로 실패한다.
• 이후 본코드를 픽스하여 테스트 케이스가 성공하도록 한다.
• 이후 코드의 수정으로 인한 버그 부활은 이 테스트 케이스로 커
버된다.
버그 픽스
리팩터링
기능은 변경하지 않고 코드 모양만 개선하는 작업
테스트 케이스 없는
리팩터링?
하지마라! 하지마라!
테스트 케이스 있다면?
리팩터링?
자주 하라! 맘껏 하라!
테스트 기발 개발, TBD(Test based developement)
목적은 생산성
개발 생산성은
다양한 사항과 관련.
그중 코드 자체도.
코딩은 오직 3가지
- 기능 추가
- 버그 픽스
- 리팩터링
모두 기존 코드를
가지고 시작한다.
기존 코드가
엉망이면
개발하기 어렵다.
기존 코드
읽기 쉬운 것이
품질이다.
생산성을 위한
읽기 쉬운 코드.
가독성이 품질의 기준.
컨벤션의
기준은 가독성
• 이름이 중요.
• 클래스, 변수, 함수
• 하나의 함수는 20라인 미만
• 인덴트는 2개 까지만
• 주석 없이 변수와 메소드 이름만으로 읽히는.
• 로직을 이해 안해도 줄줄 읽어 내려갈 수 있는.
가독성이 높으려면
이 외의 것은
중요하지 않다.
테스트 기발 개발, TBD(Test based developement)
개발은
특정 단위 기준으로
함수, 클래스, 패키지, 모듈, 컴퍼넌트, 서브 시스템, 시스템.
하여간에 특정단위로 개발한다.
단위?
요구사항을 가지고 개발하고 완료 판단하는 단위.
단위, 요구사항?
그 단위가 특정 기능(요구사항)을 만족하면
개발이 완료된 것이다.
함수건, 클래스건, 컴퍼넌트건, 시스템이건
단위와 인터페이스
모든 요구사항은 입출력을 기반으로 한다.
그 입출력의 정의가 인터페이스 이다.
단위별로 독립적이고
오직 인터페이스로만
상호 동작
단위와 인터페이스
그리고 테스트 케이스
대상 인터페이스의 입출력의 동작을 테스트 케이스로 확인
바람직한 작업 단위는
클래스 5개 정도.
3일 작업량
테스트 케이스 작성은
단위의 크기로 한다.
작은 단위 아니면 어렵다.
레거시의 경우
그 단위가 아주 크다.
시스템 급.
적용을 위해 내부를
리팩터링 해야 한다.
시스템 단위를
컴퍼넌트 단위로 쪼개는
리팩터링 위한
테스트 케이스 작성 필요
• 시스템 밖에서의 입출력으로 하는 테스트 케이스를 작성.
• 시스템의 내부를 수정해도 그 정상 동작을 확인하기 위한.
• 시스템의 크기 만큼 충반한 양의 테스트 케이스 작성 필요.
• 충분의 기준.
• 임의의 코드에서 인위적으로 버그를 만들고, 실패 하는 지 확인.
• 80%정도면 아주 양호.
시스템의 리팩터링위한 테스트 케이스
테스트 케이스를 가지고
리팩터링
내부를 작은 단위로 쪼개는 것이 목적
• 처음부터 너무 작게 쪼개는 것은 힘들다.
• 5,6개 정도의 기능단위로 구분하고, 퍼져 있는 기능을 각 단위로
응축.
• 이렇게 하기 위해서는 구분 후에 각 단위간의 인터페이스를 정의.
• 이렇게 쪼개고 나서는 각 단위별로 정의한 인터페이스를 가지고
테스트 케이스를 작성.
• 그리고 실 작업(기능 추가, 버그 픽스)를 위한 단위 만큼 쪼개질때
까지 해당 단위의 쪼개기 리팩터링 반복
내부 쪼개기
초기 레거시 시스템
전체 시스템 대상 테스트 케이스
시스템 내부 리팩터링
모듈 대상 테스트 케이스 작성
모듈 내부 리팩터링
테스트 기발 개발, TBD(Test based developement)
요구사항
요구사항 변경되면
본 코드와 더불어 테스트 케이스도 변경해야.
요구사항이 어느정도 튼튼해야 한다.
일정
테스트 케이스 작성에 당연 시간 소요된다.
득과 실을 판단할 수 있어야 한다.
거부감
무언가 도입해서 잘된 경험이 없다.
학습 시간
몸에 익기까지 최소 3달 필요.
지속적 노력
지식이 아니라 몸에 익혀야 한다.
극복하려면
개발자, 관리자, 경영자
모두 같이 노력해야 한다.
개발자는,
지속적인 노력
다 자기 역량이 된다.
관리자는,
요구사항, 일정 관리
문화가 될 때 까지 생산성 떨어진다
경영자는,
믿고 지원.
조직의 생산성을 역량을 높이는 것이다.

More Related Content

PPTX
Formation python
PDF
Corrige tp java
PDF
존잡생각
PDF
Manuel des TP : Atelier systèmes 2
PDF
POO Java Chapitre 2 Encapsulation
PDF
L'art de la rétrospective - Agile en Seine 2020
PDF
POO Java Introduction
PPTX
Inter thread communication & runnable interface
Formation python
Corrige tp java
존잡생각
Manuel des TP : Atelier systèmes 2
POO Java Chapitre 2 Encapsulation
L'art de la rétrospective - Agile en Seine 2020
POO Java Introduction
Inter thread communication & runnable interface

What's hot (20)

PDF
Python avancé : Interface graphique et programmation évènementielle
PDF
Chapitre 4 heritage et polymorphisme
PDF
Python avancé : Lecture et écriture de fichiers
PDF
Ch 01 poo
PDF
React-cours.pdf
PPTX
ségmentation d'image
PDF
Exercice 1 java Héritage
PDF
Cours partie1 elgarrai zineb
PPT
Google mock for dummies
PDF
Cours08 exceptions
PPTX
Python For Data Science - French Course
PDF
상상을 현실로 만드는, 이미지 생성 모델을 위한 엔지니어링
PPTX
학생 개발자, 인턴십으로 성장하기
PPSX
diagramme de séquence UML
PDF
Introduction au Deep Learning
PDF
résumé POO java .pdf
PDF
Cours java
PDF
Basic i/o & file handling in java
PDF
Python avancé : Qualité de code et convention de codage
PDF
TD2 - UML - Correction
Python avancé : Interface graphique et programmation évènementielle
Chapitre 4 heritage et polymorphisme
Python avancé : Lecture et écriture de fichiers
Ch 01 poo
React-cours.pdf
ségmentation d'image
Exercice 1 java Héritage
Cours partie1 elgarrai zineb
Google mock for dummies
Cours08 exceptions
Python For Data Science - French Course
상상을 현실로 만드는, 이미지 생성 모델을 위한 엔지니어링
학생 개발자, 인턴십으로 성장하기
diagramme de séquence UML
Introduction au Deep Learning
résumé POO java .pdf
Cours java
Basic i/o & file handling in java
Python avancé : Qualité de code et convention de codage
TD2 - UML - Correction
Ad

Similar to 테스트 기발 개발, TBD(Test based developement) (20)

PPTX
[H3 2012] 행복한 개발을 위한 테스트 케이스
PPTX
행복한 개발을 위한_테스트_케이스
PPTX
클린코드와 테스트코드
PPTX
VSTS와 Azure를 이용한 팀 프로세스 관리
PDF
청강대 특강 - 프로젝트 제대로 해보기
PPTX
애자일 하라
PDF
아꿈사.C++ api 디자인.20140315 a
PPTX
리펙토링 4장 테스트만들기
PDF
Robot framework 을 이용한 기능 테스트 자동화
PDF
애자일 프랙티스
PDF
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
PDF
하드웨어 스타트업의 소프트웨어 이야기
PDF
초보개발자의 TDD 체험기
PDF
파이썬 TDD 101
PPTX
C++과 TDD
PDF
2024.09.24 발표 자료 : 테스트를 해야 하는 이유
PDF
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
PPTX
Clean code chapter9
PPTX
프로젝트 Xxx에 적용하고 싶은 개발방법
PDF
Devon 2011-b-5 효과적인 레거시 코드 다루기
[H3 2012] 행복한 개발을 위한 테스트 케이스
행복한 개발을 위한_테스트_케이스
클린코드와 테스트코드
VSTS와 Azure를 이용한 팀 프로세스 관리
청강대 특강 - 프로젝트 제대로 해보기
애자일 하라
아꿈사.C++ api 디자인.20140315 a
리펙토링 4장 테스트만들기
Robot framework 을 이용한 기능 테스트 자동화
애자일 프랙티스
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
하드웨어 스타트업의 소프트웨어 이야기
초보개발자의 TDD 체험기
파이썬 TDD 101
C++과 TDD
2024.09.24 발표 자료 : 테스트를 해야 하는 이유
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
Clean code chapter9
프로젝트 Xxx에 적용하고 싶은 개발방법
Devon 2011-b-5 효과적인 레거시 코드 다루기
Ad

More from 도형 임 (20)

PPTX
인공지능과 심리상담
PPTX
Anomaly detection practive_using_deep_learning
PPTX
Deep learning application_to_manufacturing
PDF
프로그래머를 고려하는 당신에게
PDF
코드와 실습으로 이해하는 인공지능
PPTX
알파고 학습 이해하기
PPTX
Ai 그까이거
PPTX
테스트 케이스와 SW 품질
PPTX
유지보수성이 sw의 품질이다.
PPTX
Release and versioning
PPTX
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
PPTX
고품질 Sw와 개발문화
PPTX
오버라이딩을 사용한 테스트 시의 설정 처리
PPTX
행복, 그리고 인지과학
PPTX
유지보수를 고려한 SW 개발
PPTX
Git 사용 가이드
PPTX
흰머리 성성하게 개발하기 위해
PPTX
행복한 소프트웨어 개발
PPTX
Java 그쪽 동네는
PPTX
자동화된 Test Case의 효과
인공지능과 심리상담
Anomaly detection practive_using_deep_learning
Deep learning application_to_manufacturing
프로그래머를 고려하는 당신에게
코드와 실습으로 이해하는 인공지능
알파고 학습 이해하기
Ai 그까이거
테스트 케이스와 SW 품질
유지보수성이 sw의 품질이다.
Release and versioning
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
고품질 Sw와 개발문화
오버라이딩을 사용한 테스트 시의 설정 처리
행복, 그리고 인지과학
유지보수를 고려한 SW 개발
Git 사용 가이드
흰머리 성성하게 개발하기 위해
행복한 소프트웨어 개발
Java 그쪽 동네는
자동화된 Test Case의 효과

테스트 기발 개발, TBD(Test based developement)