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

Más contenido relacionado

Destacado

Istqb 5-테스트관리-2015-배포
Istqb 5-테스트관리-2015-배포Istqb 5-테스트관리-2015-배포
Istqb 5-테스트관리-2015-배포Jongwon Lee
 
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)(주)인키움넷
 
OWASP TOP 10 - 2013 (정다운)
OWASP TOP 10 - 2013 (정다운)OWASP TOP 10 - 2013 (정다운)
OWASP TOP 10 - 2013 (정다운)다운 정
 
5조브루노무나리
5조브루노무나리5조브루노무나리
5조브루노무나리rincho
 
RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...
 RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min... RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...
RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...RiverFirst Initiative
 
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)여성환경연대
 
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0wre4lfl0w
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구Lim SungHyun
 
[SIP 2015] Design Proposal: Design and animated prototype
[SIP 2015] Design Proposal: Design and animated prototype[SIP 2015] Design Proposal: Design and animated prototype
[SIP 2015] Design Proposal: Design and animated prototypeSilicon Straits
 
2010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%292010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%29drtravel
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종guest7178884
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionJunHo Yoon
 
Untitled 2
Untitled 2Untitled 2
Untitled 2yujinj
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)SangIn Choung
 
Social Design Thesis Proposal
Social Design Thesis ProposalSocial Design Thesis Proposal
Social Design Thesis ProposalSharon Kong
 
북일고 화학실험 아스피린
북일고 화학실험  아스피린북일고 화학실험  아스피린
북일고 화학실험 아스피린태훈 정
 

Destacado (17)

4.1.4엄윤정
4.1.4엄윤정4.1.4엄윤정
4.1.4엄윤정
 
Istqb 5-테스트관리-2015-배포
Istqb 5-테스트관리-2015-배포Istqb 5-테스트관리-2015-배포
Istqb 5-테스트관리-2015-배포
 
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)
소리엔(다기능 유무선마이크) 제안서 다산일렉트론(주)
 
OWASP TOP 10 - 2013 (정다운)
OWASP TOP 10 - 2013 (정다운)OWASP TOP 10 - 2013 (정다운)
OWASP TOP 10 - 2013 (정다운)
 
5조브루노무나리
5조브루노무나리5조브루노무나리
5조브루노무나리
 
RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...
 RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min... RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...
RiverFIRST: A Parks Design Proposal and Implementation Framework for the Min...
 
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)
[보도자료]방향제·탈취제 80%에서 알러지 유발물질 검출(2013년)
 
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w
브리핑 2013년 4월 1주차 금융정보탈취 by re4lfl0w
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구
 
[SIP 2015] Design Proposal: Design and animated prototype
[SIP 2015] Design Proposal: Design and animated prototype[SIP 2015] Design Proposal: Design and animated prototype
[SIP 2015] Design Proposal: Design and animated prototype
 
2010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%292010.11%29러시아 개황%28용량 다운%29
2010.11%29러시아 개황%28용량 다운%29
 
단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
 
Untitled 2
Untitled 2Untitled 2
Untitled 2
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
 
Social Design Thesis Proposal
Social Design Thesis ProposalSocial Design Thesis Proposal
Social Design Thesis Proposal
 
북일고 화학실험 아스피린
북일고 화학실험  아스피린북일고 화학실험  아스피린
북일고 화학실험 아스피린
 

Similar a 테스트 냄새

testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testingSangIn Choung
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드Mijeong Park
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법SangIn Choung
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)영주 박
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16suitzero
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 

Similar a 테스트 냄새 (20)

testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testing
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)smell like sin spirits(codereview mindset)
smell like sin spirits(codereview mindset)
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 

테스트 냄새

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