테스트 냄새<br />기본개념 및 자동 테스트 관련 냄새<br />2010. 07. 24<br />아꿈사스터디( http://andstudy.com )<br />윤석윤( seedyoon@gmail.com )<br />
02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다....
헐!<br />02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자...
02장<br />오랜만에 스터디라 덥석 하나 물었는데…<br />정리 하려 하니전할 내용이너무 덩어리가 커서…<br />깊게 들어 가려 하니 계속깊게 들어가지고…<br />내용은 너무 담백해서 재미 없을 거 같고…<br...
그래서<br />02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 ...
02장<br />요정도 깊이에서 타협했습니다.<br />스터디 하시는 같이 하시는 분들의<br />책 볼 시간을 조금 줄일 수 있는 자료가 이번 발표의 목적입니다<br />깊게 깊게는 다음에 발표해 주실 분들이 멋지게 ...
<ul><li>테스트 냄새
냄새 분류
정리</li></li></ul><li>stink<br />Smell<br />stench<br />
코드냄새, 테스트 냄새<br />코드 냄새<br />프로그래밍 미학(aesthetics) 같은 모호한 개념이 아닌 좀 더 구체적인 상태를 표현하기를 원함<br />리펙토링이 필요한 시점에 대한 생각을 냄새의 관점에서 설...
<ul><li>테스트 냄새
냄새 분류
정리</li></li></ul><li>테스트 냄새란?<br />냄새는 문제에 대한 증상<br />여러 원인으로 발생할 수 있으므로 냄새만으로 무엇이 잘못됐는지 정확하게 알 수는 없다<br />냄새인지아닌지를 판단하기 위...
테스트 냄새의 종류<br />코드냄새<br />개발자나 테스터, 코치가 테스트 코드를 읽고 쓸 때 발견할 수 있는 코드 레벨의 안티 패턴.<br />스크립트 기반 테스트와 기록 테스트를 포함한 모든 종류의 테스트에 적용...
냄새가 날 때 대처 방안<br />냄새 살펴보기<br />하나의 문제를 발견하는 데는 세 가지의 다른 방법이 있다(프로젝트, 동작, 코드 냄새 찾기)<br />냄새와 동시에 그 냄새의 증상도 같이 살펴봐야 하지만, 대부...
냄새가 날 때 대처 방안<br />테스트 자동화 전략<br />어떤 냄새들은 완전히 제거할 수가 없다 (그러기에는 너무 많은 노력들이 필요하다)<br />어떤 냄새가 있는지 알고, 어떤 것이 그런 냄새를 풍기게 만드는지...
냄새가 날 때 대처 방안<br />5Whys<br />고장이나 불량을 발생시키고 있는 요인을 즉흥적으로 생각하지 않고, 규칙적으로 순서에 의해 빠뜨림 없이 찾아내기 위한 근본적인 문제 분석방법<br />
테스트 냄새<br />
<ul><li>테스트 냄새
냄새 분류
정리</li></li></ul><li>프로젝트 냄새<br />
프로젝트 냄새<br />현상<br />프로젝트에서 뭔가가 잘못돼가고 있을 때 맡을 수 있는 현상<br />냄새 맡기<br />정규 테스트, 사용자/고객 테스트에서 발견되는 결함의 수를 측정하여 테스트 자동화가 완벽함에 ...
프로젝트 냄새<br />버그 투성이 테스트<br />완전 자동 테스트는 팀이 반복 개발을 하는 동안 ‘안전 망’ 역할을 해야 한다<br />원래 코드는 제대로 돌아가는데 테스트에서는 잘못되었다고 보고<br />버그 투성...
프로젝트 냄새<br />테스트를 작성하지 않는 개발자<br />프로세스 회고나 근본 원인 분석 회의에서 제품버그가 테스트를 작성하지 않는 개발자 때문에 생긴다고 판단 할 수도 있다.<br />원인<br />부족한 시간<...
프로젝트 냄새<br />
동작 냄새<br />
동작 냄새<br />현상<br />테스트를 컴파일 하거나 실행할 때 발생<br />냄새 맡기<br />파일 에러나 테스트 실패의 형태로 나타나므로 특별히 맡으려고 노력하지 않아도 알 수 있다<br />한번 통과한 테스트...
동작 냄새<br />깨지기 쉬운 테스트<br />인터페이스에 민감함<br />테스트하는 프로그램의 API가 바뀌거나 자동화하는 데 사용되는 사용자 인터페이스를 변경했을때 테스트가 깨지면 인터페이스에 민감하다고 한다.<b...
동작 냄새<br />깨지기 쉬운 테스트<br />데이터에 민감함<br />SUT의 데이터를 변경했을 때 테스트가 깨진다면 데이터에 민감하다고 한다<br />문맥에 민감함<br />SUT의 환경이 달라졌을 때 테스트가 깨...
동작 냄새<br />깨지기 쉬운 픽스처<br />공통으로 사용하는 테스트 픽스처를 수정했을 때 기존의 여러 테스트가 실패하는 것<br />데이터와 문맥에 민감함은 깨지기 쉬운 픽스처 라고 알려진 깨지기 쉬운 테스트의 특...
동작 냄새<br />단언 룰렛<br />가장 최근의 코드를 컴파일 하고, 새로 컴파일 된 빌드에서 자동 테스트 실행<br />테스트 실행기의 출력을 확인하여도 정확하게 어느 단언문에서 실패했는지 알기 어렵다<br />한...
동작 냄새<br />변덕스러운 테스트<br />서로 반응하는 테스트<br />여러 테스트가 서로 공유 픽스처를 같이 사용하는 경우에 서로 반응하는 테스트가 생길 수 있다.<br />테스트를 따로 돌려보거나 여러 테스트 ...
동작 냄새<br />변덕스러운 테스트<br />테스트 실행 전쟁<br />여러 테스트 실행기가 동시에 공유 픽스처를 갖고 테스트를 돌릴 때 테스트 실행 전쟁이 발생한다<br />언제나 최악의 타이밍(릴리즈 직전 남은 버...
동작 냄새<br />잦은 디버깅<br />테스트 실패 시 테스트 실행기의 출력만으로는 문제를 파악하기 어려움(욕심쟁이 테스트)<br />원인을 찾으려면 직접 디버깅을 해야 하는 경우<br />단위 테스트의 커버리지가 부...
동작 냄새<br />
코드 냄새<br />
코드 냄새<br />현상<br />마틴파울러의리펙토링에서 처음 설명한 ‘고전적인’ 나쁜 냄새<br />냄새 맡기<br />테스트 개발자들이 테스트 코드를 유지 보수 하면서 찾아낸다<br />테스트 유지 보수 비용에 영향...
코드 냄새<br />애매한 테스트<br />테스트의 의도를 보여주지 않아 테스트에서 무엇을 하려는 것인지를 파악하기 어렵게 한다<br />테스트 유지 비용을 증가시키고 테스트 유지 보수 팀이 테스트를 잘못 고치게 해 버...
코드 냄새<br />테스트 내 조건문로직<br />테스트에 실행 안 될 수도 있는 코드가 있다<br />테스트에 여러 실행 경로가 있다면 테스트가 매번 어떤 경로로 실행될지를 확신할 수 없게 된다<br />테스트 메소드...
코드 냄새<br />테스트 하기 힘든 코드<br />여러 코드 냄새와 동작 냄새의 원인<br />테스트를 작성하는 사람이 픽스처를 어떻게 설정할지, SUT를 어떻게 동작시킬지, 기대값을 어떻게 검증할지를 잘 모르는 경우...
코드 냄새<br />테스트 코드 중복<br />여러 번 반복되어 있는 테스트 코드<br />비슷한 작업을 하는 테스트가 여러 개 필요하면 테스트 코드 중복이 생길 수 있다<br />관리해야 할 테스트 코드가 많아지는 데...
코드 냄새<br />제품 코드 내 테스트 로직<br />제품 코드에 테스트에서만 실행돼야 하는 코드가 들어있다<br />제품 코드 안에서 테스트 코드가 실행되지 않는 것을 보장할 수 없으므로 좋지 않다<br />제품 코...
코드 냄새<br />
<ul><li>테스트 냄새
냄새 분류
정리</li></li></ul><li>정리<br />자동 테스트에서 잘못될 수 있는 다양한 것들의 근본 원인을 살펴보았다<br />냄새에 대한 기본 개념 및 자동 테스트와 관련 있는 냄새를 크게 세 가지로 분류<br /...
I Hand with iPhone 4<br />
Upcoming SlideShare
Loading in...5
×

테스트 냄새

1,372

Published on

andstudy study

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,372
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

테스트 냄새

  1. 1. 테스트 냄새<br />기본개념 및 자동 테스트 관련 냄새<br />2010. 07. 24<br />아꿈사스터디( http://andstudy.com )<br />윤석윤( seedyoon@gmail.com )<br />
  2. 2. 02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다. 테스트 냄새에 대한 기본 개념을 먼저 잡은 후 자동 테스트와 관련 있는 냄새를 크게 세 가지 분류, 즉 테스트 코드 냄새, 자동 테스트 동작 냄새, 프로젝트 냄새로 나눠 살펴본다<br />마틴파울러Martin Fowler는 리펙토링 – 기존 코드의 설계를 향상 시키기에서 코드가 하는 일은 그대로 두고 코드의 설계를 변경하는 여러 방법을 정리했다. 리펙토링을 하는 이유는 객체 지향 코드에서 자주 발생하는 ‘나쁜 냄새’를 찾아내기 위해서다. 코드 냄새는 켄트백과 같이 쓴 ‘3장. 코드 속의 나쁜 냄새’에 잘 설명돼 있다. 리펙토링3장은 “기저기를 언제 갈아줘야 할까요?” 라는 질문에 켄트 백의 할머니가 “지린내가 날 때지!”라고 대답하면서 시작<br />
  3. 3. 헐!<br />02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다. 테스트 냄새에 대한 기본 개념을 먼저 잡은 후 자동 테스트와 관련 있는 냄새를 크게 세 가지 분류, 즉 테스트 코드 냄새, 자동 테스트 동작 냄새, 프로젝트 냄새로 나눠 살펴본다<br />Goto 90 Page <br />Goto 88 Page<br />Goto 93 Page <br />마틴파울러Martin Fowler는 리펙토링 – 기존 코드의 설계를 향상 시키기에서 코드가 하는 일은 그대로 두고 코드의 설계를 변경하는 여러 방법을 정리했다. 리펙토링을 하는 이유는 객체 지향 코드에서 자주 발생하는 ‘나쁜 냄새’를 찾아내기 위해서다. 코드 냄새는 켄트백과 같이 쓴 ‘3장. 코드 속의 나쁜 냄새’에 잘 설명돼 있다. 리펙토링3장은 “기저기를 언제 갈아줘야 할까요?” 라는 질문에 켄트 백의 할머니가 “지린내가 날 때지!”라고 대답하면서 시작<br />이건 다른 책<br />
  4. 4. 02장<br />오랜만에 스터디라 덥석 하나 물었는데…<br />정리 하려 하니전할 내용이너무 덩어리가 커서…<br />깊게 들어 가려 하니 계속깊게 들어가지고…<br />내용은 너무 담백해서 재미 없을 거 같고…<br />새벽이라 배는 고프고…<br />적당한 스터디 발표자료 만들기<br />- ohyecloudy - <br />하지만 난 차가운 도시남자니깐젖과 꿀이 흐르는 윤택한 삶을 원해요 +_+<br />테스트 냄새<br />여긴 어디? 난 누구?<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다. 테스트 냄새에 대한 기본 개념을 먼저 잡은 후 자동 테스트와 관련 있는 냄새를 크게 세 가지 분류, 즉 테스트 코드 냄새, 자동 테스트 동작 냄새, 프로젝트 냄새로 나눠 살펴본다<br />마틴파울러Martin Fowler는 리펙토링 – 기존 코드의 설계를 향상 시키기에서 코드가 하는 일은 그대로 두고 코드의 설계를 변경하는 여러 방법을 정리했다. 리펙토링을 하는 이유는 객체 지향 코드에서 자주 발생하는 ‘나쁜 냄새’를 찾아내기 위해서다. 코드 냄새는 켄트백과 같이 쓴 ‘3장. 코드 속의 나쁜 냄새’에 잘 설명돼 있다. 리펙토링3장은 “기저기를 언제 갈아줘야 할까요?” 라는 질문에 켄트 백의 할머니가 “지린내가 날 때지!”라고 대답하면서 시작<br />
  5. 5. 그래서<br />02장<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다. 테스트 냄새에 대한 기본 개념을 먼저 잡은 후 자동 테스트와 관련 있는 냄새를 크게 세 가지 분류, 즉 테스트 코드 냄새, 자동 테스트 동작 냄새, 프로젝트 냄새로 나눠 살펴본다<br />마틴파울러Martin Fowler는 리펙토링 – 기존 코드의 설계를 향상 시키기에서 코드가 하는 일은 그대로 두고 코드의 설계를 변경하는 여러 방법을 정리했다. 리펙토링을 하는 이유는 객체 지향 코드에서 자주 발생하는 ‘나쁜 냄새’를 찾아내기 위해서다. 코드 냄새는 켄트백과 같이 쓴 ‘3장. 코드 속의 나쁜 냄새’에 잘 설명돼 있다. 리펙토링3장은 “기저기를 언제 갈아줘야 할까요?” 라는 질문에 켄트 백의 할머니가 “지린내가 날 때지!”라고 대답하면서 시작<br />
  6. 6. 02장<br />요정도 깊이에서 타협했습니다.<br />스터디 하시는 같이 하시는 분들의<br />책 볼 시간을 조금 줄일 수 있는 자료가 이번 발표의 목적입니다<br />깊게 깊게는 다음에 발표해 주실 분들이 멋지게 해 주실 거라 믿으며…<br />테스트 냄새<br /> 개요<br />‘1장. 간단하게 둘러보기’에서는 이 책에서 다루는 핵심 패턴과 냄새를 간단히 소개했다. 2장에서는 프로젝트에서 만날 수 있는 ‘테스트 냄새’를 더 자세히 설명한다. 테스트 냄새에 대한 기본 개념을 먼저 잡은 후 자동 테스트와 관련 있는 냄새를 크게 세 가지 분류, 즉 테스트 코드 냄새, 자동 테스트 동작 냄새, 프로젝트 냄새로 나눠 살펴본다<br />마틴파울러Martin Fowler는 리펙토링 – 기존 코드의 설계를 향상 시키기에서 코드가 하는 일은 그대로 두고 코드의 설계를 변경하는 여러 방법을 정리했다. 리펙토링을 하는 이유는 객체 지향 코드에서 자주 발생하는 ‘나쁜 냄새’를 찾아내기 위해서다. 코드 냄새는 켄트백과 같이 쓴 ‘3장. 코드 속의 나쁜 냄새’에 잘 설명돼 있다. 리펙토링3장은 “기저기를 언제 갈아줘야 할까요?” 라는 질문에 켄트 백의 할머니가 “지린내가 날 때지!”라고 대답하면서 시작<br />
  7. 7. <ul><li>테스트 냄새
  8. 8. 냄새 분류
  9. 9. 정리</li></li></ul><li>stink<br />Smell<br />stench<br />
  10. 10. 코드냄새, 테스트 냄새<br />코드 냄새<br />프로그래밍 미학(aesthetics) 같은 모호한 개념이 아닌 좀 더 구체적인 상태를 표현하기를 원함<br />리펙토링이 필요한 시점에 대한 생각을 냄새의 관점에서 설명, 제품 코드에서 발견되는 문제에 주로 집중(마틴파울러의리펙토링)<br />테스트 냄새<br />자동 테스트 스크립트에서만 발견할 수 있는 냄새가 있을 지 모른다고 생각<br />테스트코드에서만 나타날 수 있는 여러 나쁜 냄새를 보여줌(테스트 코드 리펙토링)<br />
  11. 11. <ul><li>테스트 냄새
  12. 12. 냄새 분류
  13. 13. 정리</li></li></ul><li>테스트 냄새란?<br />냄새는 문제에 대한 증상<br />여러 원인으로 발생할 수 있으므로 냄새만으로 무엇이 잘못됐는지 정확하게 알 수는 없다<br />냄새인지아닌지를 판단하기 위한 오캄의 면도날 테스트로 냄새 맡기 테스트가 있다.<br />다음 장부터 냄새들을 증상의종류에 따라 분류<br />
  14. 14. 테스트 냄새의 종류<br />코드냄새<br />개발자나 테스터, 코치가 테스트 코드를 읽고 쓸 때 발견할 수 있는 코드 레벨의 안티 패턴.<br />스크립트 기반 테스트와 기록 테스트를 포함한 모든 종류의 테스트에 적용.<br />동작 냄새<br />결정적인 순간 테스트를 실행한 결과에 영향을 미치는 냄새.<br />프로젝트의 냄새<br />프로젝트가 얼마나 건강한지 알려주는 척도<br />테스트 코드와 상관없는 사람들이 주로 맡게 된다.<br />
  15. 15. 냄새가 날 때 대처 방안<br />냄새 살펴보기<br />하나의 문제를 발견하는 데는 세 가지의 다른 방법이 있다(프로젝트, 동작, 코드 냄새 찾기)<br />냄새와 동시에 그 냄새의 증상도 같이 살펴봐야 하지만, 대부분 근본 원인을 살펴보지 않고 증상을 그 단계에서만 집중해서 보고 문제를 해결하려 들기 쉽다<br />프로젝트 냄새는 프로젝트 수준에서 숨어있는 원인으로 인해 생기는 증상이다. 그 원인은 동작 냄새로 나타날 수 있고, 궁극적으로는 언제나 그 문제의 근원이 되는 코드 냄새가 아래에 깔려 있게 된다<br />
  16. 16. 냄새가 날 때 대처 방안<br />테스트 자동화 전략<br />어떤 냄새들은 완전히 제거할 수가 없다 (그러기에는 너무 많은 노력들이 필요하다)<br />어떤 냄새가 있는지 알고, 어떤 것이 그런 냄새를 풍기게 만드는지 알아야 한다<br />어떤 냄새를 제거하는 경우 비용과 효과 사이에서 균형을 맞춰야 한다<br />제대로 된 테스트 자동화 전략을 선택하고좋은 테스트 자동화 코드 표준을 지킬 때 많은 냄새를 피할 수 있다<br />
  17. 17. 냄새가 날 때 대처 방안<br />5Whys<br />고장이나 불량을 발생시키고 있는 요인을 즉흥적으로 생각하지 않고, 규칙적으로 순서에 의해 빠뜨림 없이 찾아내기 위한 근본적인 문제 분석방법<br />
  18. 18.
  19. 19. 테스트 냄새<br />
  20. 20. <ul><li>테스트 냄새
  21. 21. 냄새 분류
  22. 22. 정리</li></li></ul><li>프로젝트 냄새<br />
  23. 23. 프로젝트 냄새<br />현상<br />프로젝트에서 뭔가가 잘못돼가고 있을 때 맡을 수 있는 현상<br />냄새 맡기<br />정규 테스트, 사용자/고객 테스트에서 발견되는 결함의 수를 측정하여 테스트 자동화가 완벽함에 서 멀어지고 있는지에 대한 힌트를 얻을 수 있다.<br />미치는 영향<br />버그 투성이 테스트<br />
  24. 24. 프로젝트 냄새<br />버그 투성이 테스트<br />완전 자동 테스트는 팀이 반복 개발을 하는 동안 ‘안전 망’ 역할을 해야 한다<br />원래 코드는 제대로 돌아가는데 테스트에서는 잘못되었다고 보고<br />버그 투성이 테스트는 자동 테스트 어딘가에 문제가 있다는 걸 알려주는 프로젝트 단위의 신호이다.<br />잘못된 결과를 알려주는 테스트는 위험하다. 성공해서는 안 되는 테스트가 성공하면 테스트에 대한 신뢰도가 떨어진다(양치기소년, 애매한 테스트)<br />
  25. 25. 프로젝트 냄새<br />테스트를 작성하지 않는 개발자<br />프로세스 회고나 근본 원인 분석 회의에서 제품버그가 테스트를 작성하지 않는 개발자 때문에 생긴다고 판단 할 수도 있다.<br />원인<br />부족한 시간<br />테스트하기 힘든 코드<br />잘못된 테스트 자동화 전략<br />개발자가 테스트를 작성할만한 능력이 안 되는 경우<br />놓친 테스트<br />
  26. 26. 프로젝트 냄새<br />
  27. 27. 동작 냄새<br />
  28. 28. 동작 냄새<br />현상<br />테스트를 컴파일 하거나 실행할 때 발생<br />냄새 맡기<br />파일 에러나 테스트 실패의 형태로 나타나므로 특별히 맡으려고 노력하지 않아도 알 수 있다<br />한번 통과한 테스트가 여러 이유에서 실패하는 경우 살펴 볼 수 있다.<br />미치는 영향<br />깨지기 쉬운 테스트<br />
  29. 29. 동작 냄새<br />깨지기 쉬운 테스트<br />인터페이스에 민감함<br />테스트하는 프로그램의 API가 바뀌거나 자동화하는 데 사용되는 사용자 인터페이스를 변경했을때 테스트가 깨지면 인터페이스에 민감하다고 한다.<br />동작에 민감함<br />테스트 대상 시스템(SUT)의 동작을 변경했을 때 테스트가 깨지면 동작에 민감하다고 한다.<br />뭔가 하나를 바꿨을 때 굉장히 많은, 대부분의 테스트가 깨진다면 문제가 있다.<br />
  30. 30. 동작 냄새<br />깨지기 쉬운 테스트<br />데이터에 민감함<br />SUT의 데이터를 변경했을 때 테스트가 깨진다면 데이터에 민감하다고 한다<br />문맥에 민감함<br />SUT의 환경이 달라졌을 때 테스트가 깨진다면 문맥에 민감하다고 한다.<br />대부분 시간이나 날짜 같은 데서 영향을 받지만 서버나 프린터, 모니터 같은 기계의 상태에 영향을 받는 테스트에서도 발생<br />
  31. 31. 동작 냄새<br />깨지기 쉬운 픽스처<br />공통으로 사용하는 테스트 픽스처를 수정했을 때 기존의 여러 테스트가 실패하는 것<br />데이터와 문맥에 민감함은 깨지기 쉬운 픽스처 라고 알려진 깨지기 쉬운 테스트의 특수한 예<br />새로운 테스트를 위해 표준 픽스처를 확장하는 비용이 늘어나 좋은 테스트 커버리지를 포기하게 된다<br />표준 픽스처<br />전체 테스트 스위트용 테스트 픽스처를 미리 크게 설계한(Big Design Upfront) 결과물<br />
  32. 32. 동작 냄새<br />단언 룰렛<br />가장 최근의 코드를 컴파일 하고, 새로 컴파일 된 빌드에서 자동 테스트 실행<br />테스트 실행기의 출력을 확인하여도 정확하게 어느 단언문에서 실패했는지 알기 어렵다<br />한번에 너무 많은 기능을 검증하려 욕심쟁이 테스트가 원인<br />
  33. 33. 동작 냄새<br />변덕스러운 테스트<br />서로 반응하는 테스트<br />여러 테스트가 서로 공유 픽스처를 같이 사용하는 경우에 서로 반응하는 테스트가 생길 수 있다.<br />테스트를 따로 돌려보거나 여러 테스트 스위트를 큰 스위트들의스위트의 일부로 돌려보기 어렵다<br />연쇄 실패를 일으킬 수도 있다(테스트 하나가 실패하면 공유 픽스처의 상태를 이상한 상태로 둬서 그 후의 다른 테스트가 실패하게 만드는 것)<br />
  34. 34. 동작 냄새<br />변덕스러운 테스트<br />테스트 실행 전쟁<br />여러 테스트 실행기가 동시에 공유 픽스처를 갖고 테스트를 돌릴 때 테스트 실행 전쟁이 발생한다<br />언제나 최악의 타이밍(릴리즈 직전 남은 버그 몇 개를 수정하려 할 때 같은)에 발생한다<br />반복 안 되는 테스트<br />테스트를 처음 실행할 때와 다음에 실행할 때 다른 결과가 나온다<br />이런 문제 발생시 테스트를 돌릴 때마다 직접 수동 조정을 해줘야 한다<br />
  35. 35. 동작 냄새<br />잦은 디버깅<br />테스트 실패 시 테스트 실행기의 출력만으로는 문제를 파악하기 어려움(욕심쟁이 테스트)<br />원인을 찾으려면 직접 디버깅을 해야 하는 경우<br />단위 테스트의 커버리지가 부족하거나 너무 많은 기능을 한 번에 테스트하려 한다는 조짐을 보여줌<br />느린 테스트<br />테스트 실행 시간이 너무 오래 걸린다<br />테스트를 실행하는 사람의 몰입도 및 생산성을 떨어뜨려 비용을 발생시킴<br />
  36. 36. 동작 냄새<br />
  37. 37. 코드 냄새<br />
  38. 38. 코드 냄새<br />현상<br />마틴파울러의리펙토링에서 처음 설명한 ‘고전적인’ 나쁜 냄새<br />냄새 맡기<br />테스트 개발자들이 테스트 코드를 유지 보수 하면서 찾아낸다<br />테스트 유지 보수 비용에 영향을 미치지만 관련된 동작 냄새를 찾을 수 있는 조기 경고 역할도 한다<br />미치는 영향<br />애매한 테스트<br />
  39. 39. 코드 냄새<br />애매한 테스트<br />테스트의 의도를 보여주지 않아 테스트에서 무엇을 하려는 것인지를 파악하기 어렵게 한다<br />테스트 유지 비용을 증가시키고 테스트 유지 보수 팀이 테스트를 잘못 고치게 해 버그투성이 테스트를 만들어 내게 한다<br />
  40. 40. 코드 냄새<br />테스트 내 조건문로직<br />테스트에 실행 안 될 수도 있는 코드가 있다<br />테스트에 여러 실행 경로가 있다면 테스트가 매번 어떤 경로로 실행될지를 확신할 수 없게 된다<br />테스트 메소드를 테스트가 필요 없을 정도로 최대한 단순하게 만들어야 한다<br />하드 코딩 된 테스트 데이터<br />SUT가 어떻게 동작하는지 이해하기 위해 모든 변수를 검사하고 연관성을 파악해야 하므로 테스트를 이해하기 어렵게 만든다<br />변덕스러운 테스트, 깨지기 쉬운 테스트가 되기 쉽다<br />
  41. 41. 코드 냄새<br />테스트 하기 힘든 코드<br />여러 코드 냄새와 동작 냄새의 원인<br />테스트를 작성하는 사람이 픽스처를 어떻게 설정할지, SUT를 어떻게 동작시킬지, 기대값을 어떻게 검증할지를 잘 모르는 경우 가장 잘 생긴다<br />강하게 결합된 코드, 비동기 코드, 테스트 할 수 없는 테스트 코드 등이 있다<br />테스트 하기 힘든 코드는 SUT와 상호 작용하기 위해 여러 단계를 넘나들어야 하므로 애매한 테스트가 되기 쉽다<br />
  42. 42. 코드 냄새<br />테스트 코드 중복<br />여러 번 반복되어 있는 테스트 코드<br />비슷한 작업을 하는 테스트가 여러 개 필요하면 테스트 코드 중복이 생길 수 있다<br />관리해야 할 테스트 코드가 많아지는 데다 이런 코드들이 어느새 애매한 테스트가 되기 쉽다<br />테스트 로직 재사용이지 테스트 메소드 재사용이라 하지 않은 점에 주의하자<br />공통으로 사용되는 코드들을 테스트 유틸리티 메소드로 묶어 여러 테스트에서 재사용 할 수 있게 해 줘야 한다<br />
  43. 43. 코드 냄새<br />제품 코드 내 테스트 로직<br />제품 코드에 테스트에서만 실행돼야 하는 코드가 들어있다<br />제품 코드 안에서 테스트 코드가 실행되지 않는 것을 보장할 수 없으므로 좋지 않다<br />제품 코드도 더 늘어나고, 더 복잡해진다<br />실행 바이너리에 포함된 다른 소프트웨어 컴포넌트나 라이브러리에 에러가 나게 만들 수도 있다<br />
  44. 44. 코드 냄새<br />
  45. 45. <ul><li>테스트 냄새
  46. 46. 냄새 분류
  47. 47. 정리</li></li></ul><li>정리<br />자동 테스트에서 잘못될 수 있는 다양한 것들의 근본 원인을 살펴보았다<br />냄새에 대한 기본 개념 및 자동 테스트와 관련 있는 냄새를 크게 세 가지로 분류<br />프로젝트 냄새<br />동작 냄새<br />코드 냄새<br />테스트 자동화의 목표(3장)을 이해해면 2장에서 살펴본 문제들을 피해나갈 수 있게 도와줄 여러 원칙을 알아볼 준비가 돼 있을 것이다<br />
  48. 48. I Hand with iPhone 4<br />
  49. 49. 참고자료<br />5Why 분석 방법 한국경영혁신연구회(http://www.seri.org/forum/costhalf)<br />
  50. 50. 그리고…<br />그 외의<br />참고자료는 없어요<br />나머지는 다 책이에요<br />책이네요<br />책에 있어요<br />책 두꺼워요<br />책 그림도 많아요<br />책만 있으면 되요<br />사세요<br />교과서만 보고 공부했어요(응?)<br />
  51. 51. 끝입니다요<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×