메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

Effective Unit Testing : 클린 코드와 좋은 설계를 이끄는 단위 테스트

  • 저자 : 라쎄 코스켈라
  • 번역 : 이복연
  • 출간 : 2013-11-11
  • 페이지 : 316 쪽
  • ISBN : 9788968480621
  • 물류코드 :2062
초급 초중급 중급 중고급 고급
5점 (2명)
좋아요 : 48

프로젝트의 성공과 실패를 가늠하는 단위 테스트

 

좋은 테스트를 작성하는 방법은 언어에 무관하다.
테스트 라이브러리 사용법에서 나아가 '좋은 테스트란 무엇인가', '좋은 테스트를 작성하려면 어떻게 해야 하는가'에 관한 현장의 물음에 해답을 제시한다.

 

유형별로 나눈 테스트 카탈로그 제공
테스트가 갖춰야 할 요건에 따라 나눈 테스트 카탈로그를 제공한다. 따라서 필요할 때마다 원하는 목록을 참고하여 자신이 작성한 테스트에서 문제를 발견하고 수정해 나갈 수 있으며 더욱 응용력 높은 학습을 할 수 있다. 

 

이 책의 내용

  • 테스트 냄새
  • 최상의 툴을 고르는 방법
  • 동적 언어를 사용해서 테스트 작성하기
  • 효과적인 테스트 자동화
  • 테스트 기능 설계

 

어떤 독자를 위한 책인가?

  • 테스팅 경험은 있으나 테스트의 품질을 자신할 수 없는 자바 개발자
  • 테스팅에 대한 개념이 아직 명확하지 않은 사람
  • QA 부서에서 직무 교육을 받는 테스터/개발자
저자

라쎄 코스켈라

라쎄 코스켈라는 Reaktor 소속의 코치, 트레이너, 컨설턴트, 프로그래머로서 고객이 성공적인 소프트웨어 제품을 만드는 데 이바지하고 있다. 그는 기업용 애플리케이션에서부터 미들웨어 제품까지 다양한 영역의 소프트웨어 프로젝트를 경험해왔다.

공인 스크럼 트레이너(Certified Scrum Trainer )이기도 한 그는 근래에는 고객팀의 생산성을 개선하고 끊임없이 배워가는 문화를 길러주는 교육 프로그램을 제공하거나 직접 맨토링하는 데 시간을 쏟고 있다. 또한, 리더와 관리자를 위한 컨설팅 외에도 소프트웨어 개발팀과 일하며 프로그래밍하는 것 역시 좋아한다.

여가 시간에는 오픈 소스 프로젝트에 참여하거나 소프트웨어 개발 관련 저술 활동을 한다. 직접 블로그(http://lassekoskela.com/thoughts/)도 운영하며, 이번 『Effective Unit Testing』은 2007년에 출간한 『Test Driven』에 이은 두 번째 작품이다. 그는 핀란드 애자일 커뮤니티의 선구자 중 한 명으로 국제 컨퍼런스의 발표자로도 자주 얼굴을 비추고 있다.

역자

개앞맵시(이복연)

 

 

고려대학교 컴퓨터학과를 졸업하고 삼성소프트웨어멤버십을 거쳐, 삼성전자 소프트웨어센터와 미디어솔루션센터에서 자바 가상 머신, 바다 플랫폼, 챗온 메신저 서비스 등을 개발했다. 주 업무 외에 분산 빌드, 지속적 통합, 앱 수명주기 관리 도구, 애자일 도입 등 동료 개발자들에게 실질적인 도움을 주는 일에 적극적이었다. 그 후 창업 전선에 뛰어들어 소셜 서비스, 금융 거래 프레임워크 등을 개발하다가, 무슨 바람이 불어서인지 책을 만들겠다며 기획•편집자(자칭 Wisdom Compiler)로 변신했다.

 

한빛미디어에서 『밑바닥부터 시작하는 딥러닝』(2017)과 『Effective Unit Testing』(2013)을 번

역했고, 인사이트에서 『이펙티브 자바, 3판』(2018)과 『JUnit 인 액션』(2011)을 번역했다.

 

‘개앞맵시’는 ‘개발자의 앞길에 맵핵 시전’을 줄인 말로,역자가 어려서부터 꿈꿔온 후학 양성의 의지를 담은 필명이다. 번역 외에도 게임, 서버, 웹 등 주요 직군별 개발자에게 필요한 기술과 역량을 다루는 책들로 로드맵을 만들어 공개하거나 프로그래머를 위한 책쓰기를 안내하는 등 재미난 아이디어가 생길 때마다 짬짬이 무언가를 만들어 공유하는 걸 좋아한다.

 

- 페이스북 facebook.com/dev.loadmap

- IT 전문서 로드맵 모음 mindmeister.com/ko/users/channel/86528

- 프로그래머의 책쓰기 github.com/WegraLee/Writing-IT-Books 

PART 1 기반 다지기
CHAPTER 1 좋은 테스트의 약속
  1.1 더 좋은 테스트를 작성하기 위한 현황 점검 
  1.2 테스트의 가치 
    1.2.1 생산성에 영향을 주는 요소 
    1.2.2 설계 잠재력 곡선 
  1.3 설계 수단으로써의 테스트 
    1.3.1 테스트 주도 개발 
    1.3.2 행위 주도 개발 
  1.4 요약 

 

CHAPTER 2 좋은 테스트란?
  2.1 읽기 쉬운 코드가 유지보수도 쉽다 
  2.2 구조화가 잘 되어 있다면 이해하기 쉽다 
  2.3 엉뚱한 걸 검사하는 건 좋지 않다 
  2.4 독립적인 테스트는 혼자서도 잘 실행된다 
  2.5 믿음직한 테스트라야 기댈 수 있다 
  2.6 모든 일이 그렇듯 테스트에도 도구가 쓰인다 
  2.7 요약 

 

CHAPTER 3 테스트 더블
  3.1 테스트 더블의 위력 
    3.1.1 테스트 대상 코드를 격리한다 
    3.1.2 테스트 속도를 개선한다 
    3.1.3 예측 불가능한 실행 요소를 제거한다 
    3.1.4 특수한 상황을 시뮬레이션한다 
    3.1.5 감춰진 정보를 얻어낸다 
  3.2 테스트 더블의 종류 
    3.2.1 테스트 스텁은 유난히 짧다 
    3.2.2 가짜 객체는 뒤끝 없이 처리한다 
    3.2.3 테스트 스파이는 기밀을 훔친다 
    3.2.4 Mock 객체는 예기치 않은 일을 막아준다 
  3.3 테스트 더블 활용 지침 
    3.3.1 용도에 맞는 더블을 선택하라 
    3.3.2 준비하고, 시작하고, 단언하라 
    3.3.3 구현이 아니라 동작을 확인하라 
    3.3.4 자신의 도구를 선택하라
    3.3.5 종속 객체를 주입하라
  3.4 요약 

 

PART 2 테스트 냄새
CHAPTER 4 가독성
  4.1 기본 타입 단언 
  4.2 광역 단언 
  4.3 비트 단언 
  4.4 부차적 상세정보 
  4.5 다중 인격 
  4.6 쪼개진 논리 
  4.7 매직 넘버 
  4.8 셋업 설교 
  4.9 과잉보호 테스트 
  4.10 요약 

 

CHAPTER 5 유지보수성
  5.1 중복 
  5.2 조건부 로직 
  5.3 양치기 테스트 
  5.4 파손된 파일 경로 
  5.5 끈질긴 임시 파일 
  5.6 잠자는 달팽이 
  5.7 픽셀 퍼펙션 
  5.8 파라미터화된 혼란 
  5.9 메서드 간 응집력 결핍 
  5.10 요약 

 

CHAPTER 6 신뢰성
  6.1 주석으로 변한 테스트 
  6.2 오해를 낳는 주석 
  6.3 절대 실패하지 않는 테스트 
  6.4 지키지 못할 약속 
  6.5 낮아진 기대치 
  6.6 플랫폼 편견  
  6.7 조건부 테스트 
  6.8 요약 

 

CHAPTER 7 테스트 가능 설계
  7.1 테스트 가능 설계란? 
    7.1.1 모듈러 설계 
    7.1.2 SOLID 설계 원칙 
    7.1.3 맥락을 고려한 모듈러 설계 
    7.1.4 모듈러 설계를 위한 시운전 
  7.2 테스트 불가 원인 
    7.2.1 클래스 생성 불가 
    7.2.2 메서드 호출 불가 
    7.2.3 결과 확인 불가 
    7.2.4 협력 객체 대체 불가 
    7.2.5 메서드 오버라이딩 불가 
  7.3 테스트 가능 설계를 위한 지침 
    7.3.1 복잡한 private 메서드를 피하라 
    7.3.2 final 메서드를 피하라 
    7.3.3 정적 메서드를 피하라 
    7.3.4 new는 신중하게 사용하라 
    7.3.5 생성자에서는 로직 구현을 피하라 
    7.3.6 싱글톤을 피하라 
    7.3.7 상속보다는 컴포지션을 사용하라 
    7.3.8 외부 라이브러리를 감싸라 
    7.3.9 서비스 호출을 피하라 
  7.4 요약 

 

CHAPTER 8 제2의 JVM 언어를 활용한 테스트 작성
  8.1 JVM 언어 혼용의 조건 
    8.1.1 일반적인 이점 
    8.1.2 테스트 작성하기 
    8.2 그루비로 단위 테스트 작성하기 
    8.2.1 간소화된 테스트 셋업 
    8.2.2 그루비로 작성한 JUnit 4 테스트 
    8.3 BDD 도구의 뛰어난 표현력 
    8.3.1 easyb로 작성한 그루비 명세 
    8.3.2 테스트의 표현력을 높여주는 스폭 
    8.3.3 스폭의 또 다른 무기, 테스트 더블 
  8.4 요약 

 

CHAPTER 9 테스트 속도 개선
  9.1 속도 개선을 위해서 
    9.1.1 더 빠르게! 
    9.1.2 상황 속으로 
    9.1.3 빌드 프로파일링하기 
  9.1.4 테스트 프로파일링하기 
  9.2 테스트 코드 속도 높이기 
    9.2.1 피곤하지 않다면 잠들지 말라 
    9.2.2 덩치 큰 기반 클래스를 경계하라 
    9.2.3 불필요한 셋업과 티어다운을 경계하라 
    9.2.4 테스트에 초대할 손님은 까다롭게 선택하라 
    9.2.5 로컬하게, 그리고 빠르게 유지하라 
    9.2.6 데이터베이스의 유혹을 뿌리쳐라 
    9.2.7 파일 I/O보다 느린 I/O는 없다 
  9.3 빌드 속도 높이기 
    9.3.1 램 디스크를 활용한 초고속 I/O 
    9.3.2 빌드 병렬화하기 
    9.3.3 고성능 CPU에 짐 떠넘기기 
    9.3.4 빌드 분산하기 
  9.4 요약 

 

Appendix 부록
Appendix A JUnit 기초
  A.1 기본적인 JUnit 테스트 케이스 
  A.2 JUnit 단언문 

 

Appendix B JUnit 확장하기
  B.1 러너를 통해 테스트 동작 제어하기 
  B.2 규칙으로 테스트 꾸미기 
  B.3 기본 규칙들 

  • 시스템 복잡성이 높아질수록 개발 단계에서 테스트의 비중은 높아지고 있다. 예를 들자면, MS의 경우에는 개발자와 테스터의 비율이 1:1에 육박한다고 한다. 하지만, 아직 우리나라에서는 테스트는 개발에 비해서는 중요성을 낮게 평가 받고 있는게 현실이다. 하지만, Software의 중요성이 높아질수록 테스트의 비중도 더불어 높아질거라 생각한다. 때마침 한빛미디어에서 단위 테스트에 대해 괜찮은 책이 발간되었다.
    얼마전에 발간된 “개발자를 위한 단위 테스트”는 크게 3부분으로 구성되어 있다. 첫 부분에서는 테스트에 대한 기본적인 개념을 설명하고 있고, 두번째 부분에서는 Test Smell (구현된 코드에서 취약점이 있을거라 의심되는 부분 또는 이에 대한 징후)를 설명한다. 마지막 파트에서는 테스트가 가능한 설계 방식, 그리고 테스트 작성 및 속도 개선 방법에 대해 설명을 하고 있다.
    책의 내용을 보고 나니, 테스터뿐만 아니라 개발자들에게도 무척 유용한 책이라는 생각이 들었다. 만일 개발자가 이 책의 내용만 제대로 이해를 한다면, 개발된 코드들의 품질을 획기적으로 높일 수 있을 것이고, 그만큼 자신의 몸값을 높일 수 있을 것이다.
    예전에 잠깐 Agile 개발 방법론에 대해 관심이 많아서 관련 문헌들을 볼 때 자주 TDD(Test Driven Development)라는 단어를 자주 봤었다. 테스트에 대해 그리 관심이 없던 나로서는 Agile에서는 테스트를 무척 중요시 여긴다 정도로만 생각하고 지나갔었다.
    그런데, 이번에 한빛리더스 미션 도서였던 “개발자를 위한 단위 테스트”를 읽으면서 테스트 주도 개발이 구체적으로 무엇인지 개념을 익힐 수가 있었고, Agile 방법론에서 왜 테스트가 Agile 사상을 구현하기 위한 필수적인 요소인지를 이해할 수 있었다.
    앞에서 설명한 것처럼 비록 지금은 우리나라에서 테스트의 중요성이 낮은 평가를 받지만, 가까운 시일 내에 테스트의 비중이 몰라보게 높아질 것이다. 그런 때가 올 것을 대비해서 이런 양질의 테스트 전문 서적을 곁에 두고 틈틈히 읽는다면 좋지 않을까?

  • “개발자를 위한 단위 테스트”라는 책을 택한 이유는 일단 책의 코드들이 거의 다 JAVA로 쓰여있는 만큼, 자바 프로그래머를 위한 책이라고 생각되어서였다. JUnit 코드 샘플들과 JMock 같은 테스팅 툴들이 이용되었는데, 책이 진작 가치를 지닌 이유는 머리말에 있었다. 저자는 테스트를 작성하는 방법이 언어와 무관하므로 특정 기술에 종속된 조언은 배제를 하겠다고 명시했었고, 결국 책의 내용들은 단위 테스트를 ‘어떻게’ 할까라는 생각보다 ‘왜’ 라는 의문들을 풀어주는데 초점이 맞춰져 있다.

    1장에서 저자는 기본적인 소개와 자주 등장하는 이유들을 다시 한번 언급하며 왜 유닛테스트와 자동화가 중요한지를 간단한 역사적인 일화와 함께 설명한다. 버그를 식별하는 것과 디자인을 적용하는 것, 스코프를 잘못 잡아 저지르는 실수와 테스트를 작성하면서 또 배우는 경험들이 그러한 이유들이다.

    2장에서는 어떤 것이 좋은 테스트인지에 대해 더 깊게 이야기해본다. 저자가 언급하는 가독성과 유지보수성, 구조화의 여부, 무엇에 대한 검사인지, 안정적인지, 반복 가능한지, 테스트 더블의 활용도라는 좋은 테스트에 대한 기준은 분명 완벽하지 않고 주관적임도 언급한다. 당연히 품질에 영향을 주는 요소들은 매우 많고 상황(context)에 의존하는 경우가 매우 많기 때문이다. 또한 테스트 코드의 품질을 평가하는 기준도 사람마다 다르다. 가치가 있는 기준을 제시한 것도 분명하지만 나는 무엇보다 책에 있는 코드들이 그가 겪은 여러 경험들을 최대한 압축시켜서 쉽게 전달하려고 고민한 티가 나서 좋은거 같다.

    3장은 Part 1에서 이야기하던 좋은 테스트에 대한 구체적인 결론이다. 테스트 더블이라는 개념을 설명하는데 대부분을 할애하는데 이는 ‘xUnit Test Patterns : Refactoring Test Code’ 라는 책에서 소개된 개념이다. 왜 테스트 더블을 쓰는지에 대한 5가지 이유를 정리하는데 이는 가장 중요한 이슈중 하나인 테스트 대상 코드의 격리, 그리고 테스트 속도의 개선, 예측 불가능한 실행 요소의 제거, 시뮬레이션, 감춰진 정보로의 쉬운 도달이다. 그리고 테스트 더블이라는 불리는 객체를 4가지 분류하여 설명한다. 간단한 테스트 스텁부터 정교한 Mock 까지를 예시를 들어 장단을 살핀다.

    4장에서는 가독성에 대해 이야기를 하는데 저자의 철학이 담긴 듯한 말들이 몇 개 있었다. 테스트 코드에서 어떤 방식으로 의도를 표현할지 결정할 때, 코드 중복이나 성능보다 가독성과 명료성이 더 중요함을 알아두라는 것. 절대 실패할 리가 없는 테스트는 십중팔구 아무것도 검사하지 않은 것이기에 별 가치가 없다는 것이고 당연히 정반대의 경우도 그러하다. 테스트의 도메인에 적용된 ‘단일 책임 원칙’은, 테스트가 실패하는 이유는 오직 하나뿐이어야 한다는 말이다. 이 역시 테스트의 본질이 명료함에 있다는 것이고 이것마저 없어질 경우 쓸모없어진다는 이야기일 것이다.

    5장은 유지보수성에 있어서, 6장은 신뢰성에 있어서 테스트 냄새라는 것이 무엇인지 알려주고 이들이 등장했을 때 다루는 방법을 각각 서술한다.

    이 책의 핵심인 ‘7장 테스트 가능 설계’에서 저자는 중요한 몇가지 디자인 원칙을 언급한다. 모듈러 설계와 SOLID 설계 원칙(단일 책임 원칙, 개방 폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 관계 역전 원칙) 등과 이러한 객체 지향적인 디자인의 원리를 이야기하고, 이들을 적용했을 때 테스트가 더 용이해짐을 설명한다.

    8장에서는 자바가 아닌 JVM 기반 언어들의 유닛 테스팅에 대해 이야기를 해서 또다른 흥미를 끈다.

    이 책의 강력한 장점은 저자가 집약해놓은 테스팅의 구성과 관련 아이디어들을 하나의 흐름으로 나열하되, 그 흐름을 책을 통해 배우는 사람과 상호작용할 수 있게끔 코드에도 반영한 것이 아닐까 싶다. 즉, 코드를 다루면서 분명히 이 책에 들어있는 추상화된 생각들과 아이디어가 명확히 구체화되는 점이 나에겐 좋았다. 책에서의 화법 역시 좋은 것이, ‘실제’의 경험과 삽질을 계속 가지고 감으로써 읽는 사람에게는 그러한 시간들을 낭비하지 말라는 확실한 동기를 줌으로써 끝까지 열심히 읽게 해주는 것 같다.

부록/예제소스
자료명 등록일 다운로드
DOWNLOAD 예제소스 2018-05-23 다운로드
결재하기
• 문화비 소득공제 가능
• 배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
Effective Unit Testing : 클린 코드와 좋은 설계를 이끄는 단위 테스트
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
Effective Unit Testing : 클린 코드와 좋은 설계를 이끄는 단위 테스트
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
Effective Unit Testing : 클린 코드와 좋은 설계를 이끄는 단위 테스트
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실