ݺߣ

ݺߣShare a Scribd company logo
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!!!
C++과 TDD
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
Ad

Recommended

IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
Taeyeop Kim
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
KH Park (박경훈)
Tdd ver.2
Tdd ver.2
Henry Lee
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
guest7178884
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
도형 임
TDD&Refactoring Day 02: TDD
TDD&Refactoring Day 02: TDD
Suwon Chae
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
SangIn Choung
자동화된 Test Case의 효과
자동화된 Test Case의 효과
도형 임
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
선협 이
Test Driven Development (TDD) basic
Test Driven Development (TDD) basic
Curt Park
TDD
TDD
Henry Lee
testing for agile?, agile for testing
testing for agile?, agile for testing
SangIn Choung
Tdd with JUnit 1
Tdd with JUnit 1
Junyoung Lee
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
SangIn Choung
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
도형 임
파이썬 TDD 101
파이썬 TDD 101
정주 김
TDD: Test Driven Development 첫번째 이야기
TDD: Test Driven Development 첫번째 이야기
Ji Heon Kim
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
Jaehoon Oh
TEST?
TEST?
beom kyun choi
նٶ.Ծ.조금더.알기
նٶ.Ծ.조금더.알기
Wonchang Song
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
SangIn Choung
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GDG Korea
Ui test 자동화하기 - Selenium + Jenkins
Ui test 자동화하기 - Selenium + Jenkins
Chang Hak Yeon
Tdd live spring camp 2013
Tdd live spring camp 2013
beom kyun choi
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)
ChulHui Lee
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SangIn Choung
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
Heo Seungwook
Doxygen 사용법
Doxygen 사용법
YoungSu Son
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
Ryan Park
왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
선협 이

More Related Content

What's hot (18)

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

Viewers also liked (20)

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

Similar to C++과 TDD (20)

엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
Mijeong Park
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang
TDD - Test Driven Development
TDD - Test Driven Development
ChangHyeon Bae
Clean code chapter9
Clean code chapter9
ukjinkwoun
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
Sehun Kim
Responding to change
Responding to change
기룡 남
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
SangIn Choung
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기
현승 배
클린코드 9, 10장
클린코드 9, 10장
진화 손
Growing object oriented software guided by test
Growing object oriented software guided by test
라한사 아
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서
Kim kyoung-song
Learning Unit Testing with Pair Programming
Learning Unit Testing with Pair Programming
Jongchan Kim
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
AWSKRUG - AWS한국사용자모임
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회 W.E.L.C.
Ryan Park
TDD, 뭐시 중헌디
TDD, 뭐시 중헌디
Seung Woon Lee
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Ryan Park
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
TDD or TFD
TDD or TFD
young-il Park
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
도형 임
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
Mijeong Park
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang
TDD - Test Driven Development
TDD - Test Driven Development
ChangHyeon Bae
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
Sehun Kim
Responding to change
Responding to change
기룡 남
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
SangIn Choung
TDD - 테스트 주도로 개발하기
TDD - 테스트 주도로 개발하기
현승 배
클린코드 9, 10장
클린코드 9, 10장
진화 손
Growing object oriented software guided by test
Growing object oriented software guided by test
라한사 아
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서
Kim kyoung-song
Learning Unit Testing with Pair Programming
Learning Unit Testing with Pair Programming
Jongchan Kim
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
AWSKRUG - AWS한국사용자모임
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회 W.E.L.C.
Ryan Park
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Ryan Park
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
도형 임
Ad

More from 선협 이 (10)

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