SlideShare a Scribd company logo
1 of 50
C++과 TDD
NHN NEXT 이선협
TDD (Test-Driven Development)
 테스트 주도 개발
 소프트웨어 개발 방법 중 하나
 반복 테스트를 이용하여 소프트웨어를 개발한다.
코딩
/
리팩토링
테스트 실패
성공
TDD의 목표
Clean code that works
TDD의 목표
TDD의 목표를 이루기 위해서는?
TDD의 목표를 이루기 위해서는?
1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
TDD의 목표를 이루기 위해서는?
1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
2. 중복을 제거한다.
TDD의 목표를 이루기 위해서는?
1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
2. 중복을 제거한다.
3. 즉 불필요한 기능 구현을 하지 않는다.
TDD의 목표를 이루기 위해서는?
1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
2. 중복을 제거한다.
3. 즉 불필요한 기능 구현을 하지 않는다.
Clean code that works!!!
TDD 개발법
1. 빨강 - 실패하는 작은 테스트 케이스를 작성한다.
2. 초록 - 테스트를 통과하는 코드를 작성한다.
3. 리팩토링 - 테스트를 통과하기 위해 만든 코드의 모든 중복을 제거하고,
불명확한 것을 명확히 한다.
TDD 개발법
1. 빨강 - 실패하는 작은 테스트 케이스를 작성한다.
2. 초록 - 테스트를 통과하는 코드를 작성한다.
3. 리팩토링 - 테스트를 통과하기 위해 만든 코드의 모든 중복을 제거하고,
불명확한 것을 명확히 한다.
코딩
/
리팩토링
테스트 실패
성공
TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다!
TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다!
로직의 완성상태를 검증할 수 있는
코드가 존재하면 충분하다
TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다!
로직의 완성상태를 검증할 수 있는
코드가 존재하면 충분하다
True
True
False
True
TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다!
로직의 완성상태를 검증할 수 있는
코드가 존재하면 충분하다
True
True
False
True
CppUnit에 대해 알아봅시다!
CppUnit
 xUnit으로 통칭되는 테스트 프레임워크에서 파생됨.
 실제 존재하는 프레임워크는 아님.
 C++언어에서 사용되는 테스트 프레임워크
CppUnit
 환경
 Visual Studio 2013
CppUnit – 예제 1
 간단한 클래스를 작성한다.
 오른쪽의 클래스는 잡다한 기능을 가지고 있는 정체성이 없는
클래스이다.
 이 클래스가 잘 동작하는지 테스트 해보도록 한다.
CppUnit – 예제 2
CppUnit – 예제 3
 테스트 프로젝트를 생성하면 다음 예제가
생성된다.
CppUnit – 예제 4
 예제 코드를 ‘MyClass’ 클래스를 테스트 하도록 수정하자
CppUnit – 결과
 위 메뉴에서 `테스트 -> 창 -> 테스트 탐색기`를 선택하여 테스트 항목을 볼 수 있다.
 테스트를 실행하면 실패, 성공 여부를 확인 할 수 있다.
CppUnit – 마치며
 예제에서는 미리 Class를 설계한 후 테스트 코드를 실행하였지만
미리 테스트를 만들어 둔 후 클래스를 만드는 것이 좋다.
테스트 `주도` 개발이기 때문이다.
그래요 다 좋아요 
그런데...
아까 굳이 사용하지 않아도 된다면서...
왜 사용하지?
 테스트 코드와 로직 부분을 분리하기 편하다.
 클릭 한 번으로 테스트 실행이 가능하다.
 단위 테스트와 인수 테스트로 나누어서 테스트가 가능하다.
프로그램에서 중요한 것
프로그램에서 중요한 것
Flow
A 클래스 B 클래스 C 클래스 D 클래스
A 클래스 B 클래스 C 클래스 D 클래스
테스트 성공 테스트 성공 테스트 성공 테스트 성공
A 클래스 B 클래스 C 클래스 D 클래스
테스트 성공 테스트 성공 테스트 성공 테스트 성공
이것이 단위 테스트 (Unit Test)
A 클래스 B 클래스 C 클래스 D 클래스
테스트 성공 테스트 성공 테스트 성공 테스트 성공
하지만 정작 프로세스를 진행하면?
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
동작 에러
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
동작 에러 유닛 테스트 만으로는 동작을 안하네?
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
테스트 테스트
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
테스트 성공 테스트 성공
A 클래스 B 클래스 C 클래스 D 클래스
프로세스 1
/
A, B 클래스
프로세스 2
/
A, B, C
클래스
프로세스 3
/
A, D 클래스
테스트 성공 테스트 성공
이것을 인수 테스트(Acceptance Test)라 한다.
단위 테스트 + 인수 테스트
단위 테스트 + 인수 테스트
품질 높고 테스트한 항목에 대해서
버그 없는 제품 완성
단위 테스트 + 인수 테스트
품질 높고 테스트한 항목에 대해서
버그 없는 제품 완성
테스트한 항목은
개발자들에게 좋은 문서가됨
단위 테스트 + 인수 테스트
품질 높고 테스트한 항목에 대해서
버그 없는 제품 완성
테스트한 항목은
개발자들에게 좋은 문서가됨
테스트 코드를 성공하면
자신감이 상승한다
TDD의 단점
 코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.
 데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.
 유닛 테스트가 실패했는데도 동작할 경우가 있다.
 하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다.
 테스트 코드가 추가 되기 때문에 관리해야 하는 코드가 많아진다.
TDD의 단점
 코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.
 데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.
 유닛 테스트가 실패했는데도 동작할 경우가 있다.
 하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다.
결국 귀찮고 시간이 오래걸린다...
TDD의 단점
 코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.
 데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.
 유닛 테스트가 실패했는데도 동작할 경우가 있다.
 하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다.
결국 귀찮고 시간이 오래걸린다...
즉 비용이 많이듬!!!!
TDD의 단점
 코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.
 데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.
 유닛 테스트가 실패했는데도 동작할 경우가 있다.
 하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다.
결국 귀찮고 시간이 오래걸린다...
즉 비용이 많이듬!!!!
하지만 이것은 일반적인 단점이고
단점이 느껴지지 않는 개발자가 있을 수도 있다
결국 자신에게 맞는 개발 방법이 최고다

감사합니다
참고 자료
 http://soulpark.wordpress.com/2012/09/12/test-driven-development/
 http://www.slideshare.net/doortts/tdd-testable-design-and-tdd
 http://ko.wikipedia.org/wiki/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F%
84_%EA%B0%9C%EB%B0%9C
 http://ko.wikipedia.org/wiki/XUnit
 http://nyolong.egloos.com/viewer/2250020
 http://gusspia.egloos.com/509710
 http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/SoftWare_engineering/TDD

More Related Content

What's hot

C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basicCurt Park
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testingSangIn Choung
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)SangIn Choung
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질도형 임
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101정주 김
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기Ji Heon Kim
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GDG Korea
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsChang Hak Yeon
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)ChulHui Lee
 
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SangIn Choung
 

What's hot (18)

C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
Test Driven Development (TDD) basic
Test Driven Development (TDD) basicTest Driven Development (TDD) basic
Test Driven Development (TDD) basic
 
TDD
TDDTDD
TDD
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testing
 
Tdd with JUnit 1
Tdd with JUnit 1Tdd with JUnit 1
Tdd with JUnit 1
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
TEST?
TEST?TEST?
TEST?
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
 
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + JenkinsUi test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + Jenkins
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)
 
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
 

Viewers also liked

C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기Heo Seungwook
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법YoungSu Son
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?선협 이
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동선협 이
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift선협 이
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Jaehoon Oh
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js선협 이
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 
Vs2013 doxygen 매크로 개발
Vs2013 doxygen 매크로 개발Vs2013 doxygen 매크로 개발
Vs2013 doxygen 매크로 개발민석 강
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowRyan Park
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체Mickey SJ Lee
 
게임에서 사용할 수 있는 포물선 운동
게임에서 사용할 수 있는 포물선 운동게임에서 사용할 수 있는 포물선 운동
게임에서 사용할 수 있는 포물선 운동세민 이
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN정호 전
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
전자양털폭탄연구 - interface
전자양털폭탄연구 - interface전자양털폭탄연구 - interface
전자양털폭탄연구 - interfaceFlyin Fish
 
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)JiandSon
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리EG Lim
 

Viewers also liked (20)

C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
C++11
C++11C++11
C++11
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가
 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 
Vs2013 doxygen 매크로 개발
Vs2013 doxygen 매크로 개발Vs2013 doxygen 매크로 개발
Vs2013 doxygen 매크로 개발
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And How
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
 
게임에서 사용할 수 있는 포물선 운동
게임에서 사용할 수 있는 포물선 운동게임에서 사용할 수 있는 포물선 운동
게임에서 사용할 수 있는 포물선 운동
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
전자양털폭탄연구 - interface
전자양털폭탄연구 - interface전자양털폭탄연구 - interface
전자양털폭탄연구 - interface
 
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
2015.03.25 테크니컬 세미나 - SonarQube를 활용한 코드 품질 시각화(김모세)
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리
 

Similar to C++과 TDD

Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법SangIn Choung
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17Yoon Hee Hwang
 
iOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestiOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestDoyKim
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
애자일 하라
애자일 하라애자일 하라
애자일 하라진수 허
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드Mijeong Park
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기Luavis Kang
 

Similar to C++과 TDD (20)

Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
Tdd
TddTdd
Tdd
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17
 
iOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit TestiOS개발에서 TDD 해보기 - XCTest, Unit Test
iOS개발에서 TDD 해보기 - XCTest, Unit Test
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
애자일 하라
애자일 하라애자일 하라
애자일 하라
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
Android QA Process
Android QA ProcessAndroid QA Process
Android QA Process
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
TDD or TFD
TDD or TFDTDD or TFD
TDD or TFD
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기
 

More from 선협 이

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격선협 이
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기선협 이
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js선협 이
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막선협 이
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017선협 이
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd선협 이
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift선협 이
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins선협 이
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트선협 이
 

More from 선협 이 (10)

웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격웹 개발을 위해 꼭 알아야하는 보안 공격
웹 개발을 위해 꼭 알아야하는 보안 공격
 
MongoDB 이해하기
MongoDB 이해하기MongoDB 이해하기
MongoDB 이해하기
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js
 
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
오픈소스를 여행하는 히치하이커를 위한 안내서 - 자막
 
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
Metal 기반 특별한 UI/UX 제공하기 - Let'Swift 2017
 
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2ndVue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
Vue.js와 Reactive Programming 자막 :: Vuetiful Korea 2nd
 
Reactive Programming With Swift
Reactive Programming With SwiftReactive Programming With Swift
Reactive Programming With Swift
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins
 
Post Effect 테스트
Post Effect 테스트Post Effect 테스트
Post Effect 테스트
 

C++과 TDD

  • 2. TDD (Test-Driven Development)  테스트 주도 개발  소프트웨어 개발 방법 중 하나  반복 테스트를 이용하여 소프트웨어를 개발한다. 코딩 / 리팩토링 테스트 실패 성공
  • 4. Clean code that works TDD의 목표
  • 6. TDD의 목표를 이루기 위해서는? 1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
  • 7. TDD의 목표를 이루기 위해서는? 1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. 2. 중복을 제거한다.
  • 8. TDD의 목표를 이루기 위해서는? 1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. 2. 중복을 제거한다. 3. 즉 불필요한 기능 구현을 하지 않는다.
  • 9. TDD의 목표를 이루기 위해서는? 1. 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. 2. 중복을 제거한다. 3. 즉 불필요한 기능 구현을 하지 않는다. Clean code that works!!!
  • 10.
  • 11. TDD 개발법 1. 빨강 - 실패하는 작은 테스트 케이스를 작성한다. 2. 초록 - 테스트를 통과하는 코드를 작성한다. 3. 리팩토링 - 테스트를 통과하기 위해 만든 코드의 모든 중복을 제거하고, 불명확한 것을 명확히 한다.
  • 12. TDD 개발법 1. 빨강 - 실패하는 작은 테스트 케이스를 작성한다. 2. 초록 - 테스트를 통과하는 코드를 작성한다. 3. 리팩토링 - 테스트를 통과하기 위해 만든 코드의 모든 중복을 제거하고, 불명확한 것을 명확히 한다. 코딩 / 리팩토링 테스트 실패 성공
  • 13. TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다!
  • 14. TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다! 로직의 완성상태를 검증할 수 있는 코드가 존재하면 충분하다
  • 15. TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다! 로직의 완성상태를 검증할 수 있는 코드가 존재하면 충분하다 True True False True
  • 16. TDD란 xUnit과 같은 프레임워크를 사용하지 않아도 상관없다! 로직의 완성상태를 검증할 수 있는 코드가 존재하면 충분하다 True True False True
  • 18. CppUnit  xUnit으로 통칭되는 테스트 프레임워크에서 파생됨.  실제 존재하는 프레임워크는 아님.  C++언어에서 사용되는 테스트 프레임워크
  • 20. CppUnit – 예제 1  간단한 클래스를 작성한다.  오른쪽의 클래스는 잡다한 기능을 가지고 있는 정체성이 없는 클래스이다.  이 클래스가 잘 동작하는지 테스트 해보도록 한다.
  • 22. CppUnit – 예제 3  테스트 프로젝트를 생성하면 다음 예제가 생성된다.
  • 23. CppUnit – 예제 4  예제 코드를 ‘MyClass’ 클래스를 테스트 하도록 수정하자
  • 24. CppUnit – 결과  위 메뉴에서 `테스트 -> 창 -> 테스트 탐색기`를 선택하여 테스트 항목을 볼 수 있다.  테스트를 실행하면 실패, 성공 여부를 확인 할 수 있다.
  • 25. CppUnit – 마치며  예제에서는 미리 Class를 설계한 후 테스트 코드를 실행하였지만 미리 테스트를 만들어 둔 후 클래스를 만드는 것이 좋다. 테스트 `주도` 개발이기 때문이다.
  • 26. 그래요 다 좋아요  그런데...
  • 27. 아까 굳이 사용하지 않아도 된다면서...
  • 28. 왜 사용하지?  테스트 코드와 로직 부분을 분리하기 편하다.  클릭 한 번으로 테스트 실행이 가능하다.  단위 테스트와 인수 테스트로 나누어서 테스트가 가능하다.
  • 31. A 클래스 B 클래스 C 클래스 D 클래스
  • 32. A 클래스 B 클래스 C 클래스 D 클래스 테스트 성공 테스트 성공 테스트 성공 테스트 성공
  • 33. A 클래스 B 클래스 C 클래스 D 클래스 테스트 성공 테스트 성공 테스트 성공 테스트 성공 이것이 단위 테스트 (Unit Test)
  • 34. A 클래스 B 클래스 C 클래스 D 클래스 테스트 성공 테스트 성공 테스트 성공 테스트 성공 하지만 정작 프로세스를 진행하면?
  • 35. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스
  • 36. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스 동작 에러
  • 37. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스 동작 에러 유닛 테스트 만으로는 동작을 안하네?
  • 38. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스 테스트 테스트
  • 39. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스 테스트 성공 테스트 성공
  • 40. A 클래스 B 클래스 C 클래스 D 클래스 프로세스 1 / A, B 클래스 프로세스 2 / A, B, C 클래스 프로세스 3 / A, D 클래스 테스트 성공 테스트 성공 이것을 인수 테스트(Acceptance Test)라 한다.
  • 41. 단위 테스트 + 인수 테스트
  • 42. 단위 테스트 + 인수 테스트 품질 높고 테스트한 항목에 대해서 버그 없는 제품 완성
  • 43. 단위 테스트 + 인수 테스트 품질 높고 테스트한 항목에 대해서 버그 없는 제품 완성 테스트한 항목은 개발자들에게 좋은 문서가됨
  • 44. 단위 테스트 + 인수 테스트 품질 높고 테스트한 항목에 대해서 버그 없는 제품 완성 테스트한 항목은 개발자들에게 좋은 문서가됨 테스트 코드를 성공하면 자신감이 상승한다
  • 45. TDD의 단점  코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.  데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.  유닛 테스트가 실패했는데도 동작할 경우가 있다.  하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다.  테스트 코드가 추가 되기 때문에 관리해야 하는 코드가 많아진다.
  • 46. TDD의 단점  코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.  데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.  유닛 테스트가 실패했는데도 동작할 경우가 있다.  하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다. 결국 귀찮고 시간이 오래걸린다...
  • 47. TDD의 단점  코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.  데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.  유닛 테스트가 실패했는데도 동작할 경우가 있다.  하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다. 결국 귀찮고 시간이 오래걸린다... 즉 비용이 많이듬!!!!
  • 48. TDD의 단점  코드를 변경할 때마다 유닛 테스트를 변경해줘야한다.  데이터가 많고, 크고, 다양하면 테스트를 작성하기 힘들다.  유닛 테스트가 실패했는데도 동작할 경우가 있다.  하나의 유닛을 수정하면 다른 메소드에 문제가 생길 수 있다. 결국 귀찮고 시간이 오래걸린다... 즉 비용이 많이듬!!!! 하지만 이것은 일반적인 단점이고 단점이 느껴지지 않는 개발자가 있을 수도 있다 결국 자신에게 맞는 개발 방법이 최고다 
  • 50. 참고 자료  http://soulpark.wordpress.com/2012/09/12/test-driven-development/  http://www.slideshare.net/doortts/tdd-testable-design-and-tdd  http://ko.wikipedia.org/wiki/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F% 84_%EA%B0%9C%EB%B0%9C  http://ko.wikipedia.org/wiki/XUnit  http://nyolong.egloos.com/viewer/2250020  http://gusspia.egloos.com/509710  http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/SoftWare_engineering/TDD