본문내용 바로가기

KYOBO 교보문고

금/토/일 주말특가
책 다시 숲
교보문고 북튜버 : 마법상점
청소년브랜드페스티벌
  • 교보아트스페이스
  • 제5회 교보손글쓰기대회 수상작 전시
Effective Unit Testing(개발자를 위한 단위 테스트)(한국어판)
* 중고장터 판매상품은 판매자가 직접 등록/판매하는 상품으로 판매자가 해당상품과 내용에 모든 책임을 집니다. 우측의 제품상태와 하단의 상품상세를 꼭 확인하신 후 구입해주시기 바랍니다.
316쪽 | 규격外
ISBN-10 : 8968480621
ISBN-13 : 9788968480621
Effective Unit Testing(개발자를 위한 단위 테스트)(한국어판) 중고
저자 라쎄 코스켈라 | 역자 이복연 | 출판사 한빛미디어
정가
25,000원
판매가
50,000원 [100%↑]
배송비
3,500원 (판매자 직접배송)
지금 주문하시면 3일 이내 출고 가능합니다.
토/일, 공휴일을 제외한 영업일 기준으로 배송이 진행됩니다.
2013년 11월 10일 출간
제품상태
상태 최상 외형 최상 내형 최상
새 상품
22,500원 [10%↓, 2,500원 할인] 새상품 바로가기
안내 :

중고장터에 등록된 판매 상품과 제품의 상태는 개별 오픈마켓 판매자들이 등록, 판매하는 것으로 중개 시스템만을 제공하는
인터넷 교보문고에서는 해당 상품과 내용에 대해 일체 책임을 지지 않습니다.

교보문고 결제시스템을 이용하지 않은 직거래로 인한 피해 발생시, 교보문고는 일체의 책임을 지지 않습니다.

중고책 추천 (판매자 다른 상품)

더보기

판매자 상품 소개

※ 해당 상품은 교보문고에서 제공하는 정보를 활용하여 안내하는 상품으로제품 상태를 반드시 확인하신 후 구입하여주시기 바랍니다.

판매자 배송 정책

  • 토/일, 공휴일을 제외한 영업일 기준으로 배송이 진행됩니다.

더보기

구매후기 목록
NO 구매후기 구매만족도 ID 등록일
1,483 빠른 배송과 품질에 만족합니다. 5점 만점에 5점 ame*** 2019.12.06
1,482 엉망이고 정말 이럴 수 있나요 5점 만점에 1점 kkin*** 2019.12.04
1,481 배송 빠르고 책상태 좋음. 책가격이 좀 비쌈. 5점 만점에 5점 naman9*** 2019.12.03
1,480 책 깨끗하고 좋습니다. 5점 만점에 5점 deo*** 2019.11.28
1,479 빠른 배송 좋습니다. 5점 만점에 4점 kara*** 2019.11.26

이 책의 시리즈

책 소개

상품구성 목록
상품구성 목록

『Effective Unit Testing』는 테스트 라이브러리 사용법과 더불어 좋은 테스트란 무엇인지, 좋은 테스트를 작성하려면 어떻게 해야 하는지에 대한 현장의 물음에 해답을 제시한다. 테스트가 갖춰야 할 요건에 따라 나눈 카탈로그 제공으로 필요할 때마다 원하는 목록을 참고하여 자신이 작성한 테스트에서 문제를 발견하고 수정해 나가 응용력 높은 학습을 할 수 있다.

저자소개

저자 : 라쎄 코스켈라
저자 라쎄 코스켈라는 Reaktor 소속의 코치, 트레이너, 컨설턴트, 프로그래머로서 고객이 성공적인 소프트웨어 제품을 만드는 데 이바지하고 있다. 그는 기업용 애플리케이션에서부터 미들웨어 제품까지 다양한 영역의 소프트웨어 프로젝트를 경험해왔다.
공인 스크럼 트레이너(Certified Scrum Trainer )이기도 한 그는 근래에는 고객팀의 생산성을 개선하고 끊임없이 배워가는 문화를 길러주는 교육 프로그램을 제공하거나 직접 맨토링하는 데 시간을 쏟고 있다. 또한, 리더와 관리자를 위한 컨설팅 외에도 소프트웨어 개발팀과 일하며 프로그래밍하는 것 역시 좋아한다.
여가 시간에는 오픈 소스 프로젝트에 참여하거나 소프트웨어 개발 관련 저술 활동을 한다. 직접 블로그(http://lassekoskela.com/thoughts/)도 운영하며, 이번 『Effective Unit Testing』은 2007년에 출간한 『Test Driven』에 이은 두 번째 작품이다. 그는 핀란드 애자일 커뮤니티의 선구자 중 한 명으로 국제 컨퍼런스의 발표자로도 자주 얼굴을 비추고 있다.

역자 : 이복연
역자 이복연은 『JUnit in Action: 단위 테스트의 모든 것』(인사이트, 2011)을 번역했다. 고려대학교 컴퓨터학과를 졸업하고 삼성 소프트웨어 멤버십을 거쳐 삼성 소프트웨어 연구소에 입사했다. 그동안 미디어솔루션센터에서 바다 단말 플랫폼과 소셜허브 개발에 참여했으며, 현재는 클라우드 기반 서버/인프라 관련 업무를 진행 중이다. 소프트웨어 아키텍처 설계, 애플리케이션 라이프사이클 관리(ALM), 애자일 등의 분야에 관심이 많다.

목차

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 기본 규칙들

책 속으로

출판사 서평

이 책이 제시하는 핵심 내용 테스트 라이브러리 사용법에서 나아가 ‘좋은 테스트란 무엇인가’, ‘좋은 테스트를 작성하려면 어떻게 해야 하는가’에 관한 현장의 물음에 해답을 제시한다. 이 책의 특징과 장점 (책 소개) 테스트가 갖춰야 할 요건에 ...

[출판사서평 더 보기]

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

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

어떤 독자를 위한 책인가? (대상 독자)
-. 테스팅 경험은 있으나 테스트의 품질을 자신할 수 없는 자바 개발자
-. 테스팅에 대한 개념이 아직 명확하지 않은 사람
-. QA 부서에서 직무 교육을 받는 테스터/개발자

옮긴이의 말
“제품설계가 요구사항에 달아 소스코드로 서로 사맛디 아니할쌔
이런 전차로 어린 개발자가 검증하고저 ?배 이셔도
마침내 제 뜨들 시러 펴디 ?? 하니라.
내 이랄 윙하야 어엿비 너겨 새로 책 한 권을 번역하노니
사람마다 해여 수비니겨 날로 쑤메 ?한키 하고져 할 따라미니라.”

처음 이 책을 접했을 때 가장 먼저 눈길을 사로잡았던 것은 바로 『Effective Unit Testing』이라는 책의 제목과 테스트 가능 설계testable design라는 7장의 제목이었다.
과연 Effective라는 이름을 내걸기에 부끄럽지 않은 책일까? Effective로 시작하는 책 대부분은 유행에 흔들리지 않고 비교적 오랫동안 가치를 인정받는 듬직함을 보여준다. 단순한 따라하기나 기교 중심의 어떻게(how)가 아닌, 주제에 관한 깊은 이해와 오랜 경험으로부터 우러나온 왜(why)를 다루기 때문이다. 왜를 이해한다는 것은 명확한 목적의식을 가지고 행동하게 되며, 변화하는 환경에서도 흔들리지 않는 근본적인 기준에 따라 판단하고 응용할 수 있게 됨을 의미한다. 이러한 관점에서 이 책은 전혀 부족하지 않다고 판단되었고 번역 제안을 수락한 결정적인 이유가 되었다.
개인적으로는 2006년경에 테스트 가능 설계 안티 패턴을 정리하려던 적이 있었다. 홀대받는 테스트가 사실은 제품 설계와 생산성에 큰 영향을 주므로 개발 초기부터 이를 고려하면 전반적인 개발 과정이 훨씬 효율적이고 부드럽게 진행된다는 점을 알리고 싶었다. 당시만 해도 개척할 게 많은 분야였던 터라 잘 다듬어서 저널이나 학술지에 내볼 요량이었다. 하지만 컨설턴트도 아니고 테스트가 주업도 아닌지라 원하는 만큼의 적절한 예제를 모으는 데 한계가 있었고, 결국 어설픈 초안 수준에서 그만두고 말았다. 이러한 개인적 경험 때문에 테스트 가능 설계란 주제는 큰 호기심과 아쉬운 감정을 동시에 불러일으켰다. 그래서 이 책을 통해 내가 정리하던 것과 얼마나 유사한지, 혹은 더 발전했는지 확인해보고 싶었다. 결국, 구성이나 내용 면에서는 많은 차이를 보였지만 큰 그림과 의도는 일맥상통했다. 그래서 이렇게 다른 이의 결실에 편승해서라도 그때 하고자 했던 이야기를 세상에 들려주고 싶다는 동기가 더해졌다.

“좋은 설계임을 증명하려거든 자동화된 테스트를 만들어보라!”

흔히 실력 좋다고 알려진 개발자 중 많은 수가 무척 복잡하여 어떻게 쓰는지 모르겠는 코드를 내놓거나 겉은 깔끔하나 그 정도가 지나쳐서 내부 동작원리는 알기 어려운 코드를 만들어내곤 한다. 이런 코드는 검증하기 어렵다는 치명적인 단점이 있다. 개발자 자신이 시연할 때에는 잘 돌겠지만 다른 모듈과 통합할 시점이 되면, 혹은 제품이 출시된 후 소비자에 의해 다양한 패턴으로 사용되면서 뒤늦게 문제가 하나씩 터져 나오는 경우가 많다. 단기간에 가시적 결과를 보여줄 수는 있지만 이렇게 발견된 문제는 개발한 당사자가 아니면 쉽게 손대지 못하니 골치 아픈 상황을 낳기도 한다. 이들의 능력을 깎아 내리려는 의도는 절대 아니다. 다만, 한 차원 높은 생산성과 안정된 품질, 그리고 동료 개발자도 쉽게 이해하고 배울 수 있는 코드를 작성하는 쉬운 방법이 있으나 잘 알지 못하는 듯하여 안타까울 뿐이다.
그들에게 필요한 것은 테스트에 대한 인식 전환이다. 테스트란 단순한 기능 검증 수단만이 아닌 요구사항을 명시한 문장이요, 모듈과 API 설계 수단이며, 사용설명서이자, 최고의 인수인계/유지보수 자료이기까지 하다. 특히 개발자의 설계역량 면에서 본다면, 디자인 패턴에만 의지하기보다 테스트하기 쉬운 설계를 추구하는 쪽이 훨씬 탄탄한 기본기와 응용력을 길러줄 것이라고 감히 단언할 수 있다. 여러분이 이 책을 테스트 지침서가 아닌 설계 지침서로 받아들이고 잘 따라준다면 어느덧 진일보한 자신의 실력에 놀라게 될 것이다.
아무쪼록 독자 여러분께 재미나고 유익한 책이 되길 기원하며, 책 내용 중 혹 궁금한 것이 있거든 wegra.eut@gmail.com으로 물어봐 주시길 바란다. 여건이 허락하는 한 성심껏 답변하도록 노력하겠다.

옮긴이_이복연

지은이의 말
2009년 6월 10일 밤, 매닝Manning의 크리스티나 러들로프Christina Rudloff로부터 한 통의 메일을 받았다. 그녀는 로이 오쉐로브Roy Osherove의 저서 『The Art of Unit Testing in .NET』을 자바에 맞게 다시 써줄 만한 사람을 찾고 있었다. 기꺼이 내가 해주겠노라 답했다.
이건 꽤 오래 전의 이야기로, 지금 여러분의 손에 들려 있는 이 책은 로이의 것과는 사뭇 다른 모습이 되었다. 설명을 해보자면 이렇다.
처음에는 .NET을 자바로 단순 변환하는 일로 시작했다. 달라진 플랫폼과 도구만 반영하고 독자에게 꼭 필요한 부분만 다시 쓰면서 말이다. 1장을 마치고 2장을 마치고 3장까지 써내려 가다가 문득 하나를 깨달았다. 문장 몇 개 정도가 아니라 한 장chapter 전체를 내가 새로 쓰고 있는 게 아닌가? 문체도 나와 맞지 않았다. 로이와는 다른 방식을 선호하거나 그의 설명에 동의하지 못할 때도 종종 있었다. 여러분에게 따로 꼭 하고 싶은 말이 있거나, 설명을 보충하거나, 기초부터 확실히 다지고 넘어가고 싶다는 욕심이 강하게 생겨나기도 했다.
결국, 처음부터 새로 시작하기로 했다. 처음 의도했던, 자바 버전에 맞게 쓰는 일을 넘어선 시점이었다. 좋은 테스트를 작성하는 방법과 주의 사항에 관한 심도 있는 통찰을 통해 자바 프로그래머의 테스트 능력을 키워주는 새롭고 독특한 책으로 거듭난 것이다. 로이의 생각도 다양한 형태로 이 책에 스며있다. 예컨대 2부를 구성하는 4, 5, 6장의 이름은 로이의 것을 고스란히 차용했고, 7장도 상당 부분은 로이의 책 『The Art of Unit Testing in.NET』의 관련 내용에 기초하여 썼다.
이 책은 자바 개발자를 위해 쓰였지만, 독자 범위를 인위적으로 제한하고 싶지는 않았다. 비록 2부의 예제 코드는 모두 자바지만, 내용 자체는 언어에 너무 국한되지 않게 하려 노력했다. 좋은 테스트를 작성하는 방법은 언어와 무관하니 설령 여러분의 주 언어가 자바가 아니더라도 이 책의 내용을 진지하게 읽어보기를 진심으로 권한다.
같은 맥락에서, 이 책을 JUnit 또는 개인적으로 선호하는 특정 Mock 객체 라이브러리를 배우기 위한 튜토리얼로 만들고 싶지 않았다. 시시때때로 변하는 기술, 또는 출판 후 몇 달이면 폐기될 지식은 배제하고, 나 자신이 정말 읽고 싶은 책을 쓰고 싶었다. 눈 감고도 사용할 만큼 이미 익숙해져 버린 테스트 프레임워크나 쓰지도 않는 Mock 객체 라이브러리를 억지로 들이대지 않는 그런 책 말이다. 그래서 특정 기술에 종속된 조언은 최대한 자제하였다. 물론 전혀 없다고 말할 순 없지만, 최선을 다했음을 알아줬으면 한다. 테스트 작성과 실행, 유지보수, 개선에 빠져서는 안 될 기본적인 개념과 의미 있는 논의가 필요한 정도만을 담아내었다.
다시 한번 말하지만, 나 자신이 읽고 싶은 책을 쓰려고 노력했다. 여러분도 함께 즐겨주길 바라고, 무엇보다 책 내용 중 일부라도 실천하는 독자가 나와준다면 더 바랄 것이 없다.

지은이_ 라쎄 코스켈라

관련 도서
- 『테스트 주도 개발: 고품질 쾌속개발을 위한 TDD 실천법과 도구』(한빛미디어, 2010)
- 『읽기 좋은 코드가 좋은 코드다』(한빛미디어, 2012)
- 『Blog2Book, 자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기』(한빛미디어, 2009)

[출판사서평 더 보기 닫기]

책 속 한 문장

회원리뷰

  •   한참 업무 개발을 하던 시절 나는 테스트 멍청이였다. 대부분의 프로젝트의 경우 개발하기에도 시간에 쫓겨 단위 테스...

      한참 업무 개발을 하던 시절 나는 테스트 멍청이였다. 대부분의 프로젝트의 경우 개발하기에도 시간에 쫓겨 단위 테스트는 커녕 모듈 테스트도 놓치는 경우가 종종 있었다. 테스트의 중요성은 물론 알고 있지만 지난날의 내게는 참으로 벅찬 일이 아닐 수가 없었다.

      사내에서는 기본적인 QC가 존재했다. 담당하시는 분도 계셨고 나름 구색이 되어 있다고 생각했다. 그런데 테스터의 역량과 관점에 따라 테스트가 천차만별이었다. 결과적으로 내가 장기간 근무하던 그 기간 중에 인정했던 두명의 테스터만이 내 결함을 잘 찾아주었고 경고해주었다. 다른 분들은 미안하지만 빈틈이 많아서 테스트 프로세스 통과를 위해 케이스를 작성하면 덧붙이는 것 없이 제시한 케이스만 테스트하여 넘어가는 경우도 허다했었다. 

      과연 테스트를 이리해도 좋은 것일까. 일선 개발자들의 고충과 영업적인 이유로 책정되는 허황된 일정등을 생각하면 지금 생각해도 어쩔 수 없는 경우도 생길 수 있다는 생각은 한다. 하지만 이런 상황들이 반복된다면 소프트웨어 제작사의 신뢰도, 소프트웨어 업계 전반적인 품질의 문제에서 자유로워 질 수 없을 것이다. 그렇다면 어떻게 하여야 이런 딜레마를 벗어날 수 있을까.



    <출처 : Yes24> 


      개발자는 단위 테스트, 모듈 테스트, 통합 테스트(프로젝트에 따라서 유연하게 할 수 있어야 한다) 등 테스트에 대해서 다시 한번 생각해 보아야 할 것이다. 사실 다양한 테스팅 메서드가 전파되면서 최근에는 많은 개발자 분들이 테스트를 수행하고 계신것으로 알고 있다. 하지만 주니어 개발자들과 만나보면 (혹은 학생 개발자분들) 테스트에 대해서 잘못 생각하고 계신 분들도 가끔 뵙게 된다. 나의 깜냥으로는 개발에 대한 철학을 강요할 순 없지만 테스트의 중요성에 대해서는 말할 수 있다고 생각한다. 그리고 그 발판으로 이 도서를 추천할 수 있을 것 같다.


      처음에는 그저 단위테스트의 방법론적인 이야기를 하는 도서라고 생각했었다. 그런데 읽어보니 아주 오랫만에 저자의 주장이 강하게 녹아있는 책이라는 생각이 들었다. 테스트의 중요성도 효율적인 측면도 정확하게 설명하고 주장하고 있는 것이다. 구절구절 마음에 와서 꽂히는 부분도 많았다. 

    아... 나도 분명히 저런 생각한적 있었는데, 왜 실천하지 못했을까...

    따지고 보면 내가 성실한 개발자가 아니었기 때문이지 않을까. 개발자로서 노력해야 할 부분 보다는 다른 흥미거리에 빠지는 경우도 많았기 떄문이라는 생각도 들긴한다. 


      내가 자바에 익숙하지 못하기 때문에 뒤에 나오는 [JVM언어를 활용한 테스트 작성] 등 기술적인 부분에서의 이해도는 떨어졌지만 이 책의 가장 중요한 핵심이라 꼽을 수 있는 것이 테스트에 대한 인식 전환에 맞추어져 있기 때문에 전체적인 이해는 어렵지 않았다. 게다가 다양한 관점에서 테스트를 바라보고 보완하는 부분에 대해서 지속적으로 반복되며 나오기 때문에 나름 테스팅 철학적인 부분을 엿볼 수도 있었다. 


      최근 소프트웨어 개발에 있어서 가장 중요한 점을 꼽으라면 철학을 꼽을 수 있을 정도로 본질에 관심을 많이 가지고 있기 때문에 테스팅에 대한 생각도 남다르게 하고 있었다. 전직을 위한 준비를 하면서 테스터 또한 가능성을 열어 놓고 있었던 것도 사실이었다. 물론 준비가 부족했던 것일지 결론적으로는 실패 한것으로 보여지지만 말이다. 근래 들어서는 테스팅 관련 책이 많이 나오지 않고 있었던 것 같다. 혹은 기술적인 부분이나 팁 같은 내용에 집중하는 테스팅 관련 책이 나왔던 것 같다. 그런데 이 책에서는 '왜'라는 의문을 가지고 읽을 수 있을 것이다. 왜 테스팅 인가. 그 물음에 대한 답변을 이 책을 통해서 여러분도 찾을 수 있을 것이라 기대한다. 왜 테스팅 인가?


    http://lemonism.net/241


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

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

    image

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

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

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

    image

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

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

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

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

    image

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

  • [클린 코드와 좋은 테스트를 이끄는 설계 지침서]Effective Unit Testing 개발자를 위한 단위 테스트라쎄 코스켈...

    [클린 코드와 좋은 테스트를 이끄는 설계 지침서]

    Effective Unit Testing 개발자를 위한 단위 테스트

    라쎄 코스켈라 지음 이복연 옮김 


     제가 4번째 리뷰를 하게 된 책은 클린코드와 좋은 테스트를 이끄는 설계 지침서 “Effective Unit Testing”_라쎄 코스켈라 지음 이복연 옮김_입니다. 기업인턴으로 소프트웨어 테스터 경험을 했던지라 테스팅이라는 키워드에 자연스레 눈길이 가서 택하게 된 책입니다. 이 책은 본문으로 넘어가기 전에 독자들에게 흥밋거리를 주는 요소가 많아 책내용이 주는 다소 딱딱함을 완화시켜주는 효과가 있었던 것 같습니다. ^^ 표지를 보면 내용과는 달리 예쁜 일러스트가 삽입되어 있습니다. 친절하게도 15페이지에 표지 그림에 관한 설명이 첨부되어 있는데 잠깐의 읽을거리를 제공해줍니다. 두 번째 요소는 바로 이것! 훈민정음의 서문을 패러디한 센스가 돋보입니다. 이제 본문으로 넘어가보겠습니다.


     사실 테스팅이라는 경험으로 미루어 택한 책이지만, 단위테스팅은 제가 접할 수 없는 테스팅이었습니다. 일반적으로 소프트웨어 테스터 위치에서 테스팅을 할 경우에는 프로그램의 소스코드가 오픈되어 있지 않은 상황에서 이루어지는 테스트들을 진행하는 경우가 대부분인데요. 일반적으로 유닛 테스팅은 코드를 중심으로 수행되기 때문에 프로그래머가 개발과 병행하는 경우가 대부분이어서 책 표지에도 써져 있듯, 개발자를 위한 책이라고 보시면 됩니다.

     

     책은 크게 세부분으로 구성되어 있습니다. ‘Part1 기반다지기’ 에서는 좋은 테스트에 관한 정의와 도구, 테스트 방법론적인 내용이 나옵니다. ‘Part2 테스트 냄새‘ 에서는 가독성과 유지보수성, 신뢰성을 키워드로 하여 잘못된 테스트가 풍기는 냄새와 그로인한 문제를 다루고 있습니다. 'Part3 여흥거리’ 에서는 설계상의 문제로 인해 자주 발생하는 테스트 용이성 문제에 대해서 짚어보는 부분입니다. 내용에서 그치지 않고 부록으로는 기본적인 JUnit 기초를 비롯한 테스트케이스와 동작제어하기, 테스트 꾸미기 등을 제공하고 있습니다.

     

    part1.

    머리말부터 part1의 전반적인 내용은 홀대받는 단위테스트, 체계적이지 못한 단위테스트 시스템에 관한 지적이 주를 이룹니다. 앞서 말했듯, 개발자가 테스트과 개발을 병행하며 진행하기 때문에 결함과정을 일일이 기록하거나 테스트 스위트를 체계적으로 꾸미지 않는다는 문제점이 지적되어 왔습니다. 홀대받는 테스트가 제품 설계와 생산성에 큰 영향을 끼치는 것을 간과하지 말아야한다는 느낄 수 있었습니다. Part1을 통해서 테스트에 대한 인식전환과 테스팅이 단순히 검증의 도구로서가 아닌 요구사항을 명시한 문장이고, 모듈과 API 설계 수단이며, 최고의 인수인계/유지보수 자료라는 지은이의 목소리가 반영되어 있습니다.

     

    Part2. 

    테스트의 의도나 구현을 모호하게 하는 테스트 냄새에 대해서 집중적으로 거론되는 부분입니다. 판독하기 어려운 단언문이나 추상화 등에 관해 소스로 친절히 설명해주고 있습니다. 이 책이 테스트 관련 책이지만, 애초에 처음부터 소스를 어떻게 짜야 군더더기 없는 (gold-plating) 코딩을 하고, 효율적인 테스트로 이어지는지에 대해서 알 수 있어서, 어쩌면 고급프로그래머가 되는 지름길을 알려주는 책이 아닐까 라는 생각을 하게 되었습니다. 군더더기 없는 코딩, 읽기 쉬운 코드가 좋은 코드다 이런 문장들이 떠올랐습니다.

     

     가장 기억에 남는 8장은 단위테스트를 자바가 아닌 언어로 작성하고 싶다는? 이라는 호기심으로 출발하여 JVM에서 자바 이외의 언어의 사용성과 자바코드와의 연동성 등에 대해 설명해줍니다.

     

    이 책은 소스코드 설명을 병행하여 책을 전개하고 있기 때문에 책에 나오는 예제를 직접 다운받아 문제점을 직접 느끼고 고쳐나가는 과정을 경험해보는 것이 좋습니다.

     

    유닛 테스팅의 일반적인 목적은 기본 경로를 확인, 모든 오류처리 경로를 확인, 컴포넌트 내의 인터페이스 확인, 로컬 데이터 확인, 경계 값 확인 등이 있는데 이런 문제를 직접 소스로 접하고 책의 내용을 읽는다면 깊이 있는 단위테스트를 경험할 수 있을 것 같습니다. 책에서도 소개하지만 해당 url로 들어가면 직접 소스를 다운받을 수 있답니다.

     

    책에서도 소개하는 라쎄 코스켈라의 블로그에도 직접 들어가봤습니다. 생각보다 방대한 양의 깊이있는 정보가 많았습니다. 저자와 소통할 수 있는 공간도 있으니, 관심있는 분은 들어가서 저자와도 직접 인터랙션 해보시기 바랍니다. ^^

     


     책이 가볍고 얇지만, 담고 있는 내용은 깊이있고 수준이 꽤 있었습니다. 현업에서 일하고 계시는 개발자나 코드 설계 전문가 등이 읽기에 좋은 책이라고 판단됩니다.

     

     

     


교환/반품안내

※ 상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

교환/반품안내
반품/교환방법

[판매자 페이지>취소/반품관리>반품요청] 접수
또는 [1:1상담>반품/교환/환불], 고객센터 (1544-1900)

※ 중고도서의 경우 재고가 한정되어 있으므로 교환이 불가할 수 있으며, 해당 상품의 경우 상품에 대한 책임은 판매자에게 있으며 교환/반품 접수 전에 반드시 판매자와 사전 협의를 하여주시기 바랍니다.

반품/교환가능 기간

변심반품의 경우 수령 후 7일 이내, 상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내

※ 중고도서의 경우 판매자와 사전의 협의하여주신 후 교환/반품 접수가 가능합니다.

반품/교환비용 변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
반품/교환 불가 사유

소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우(단지 확인을 위한 포장 훼손은 제외)

소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우 예) 화장품, 식품, 가전제품 등

복제가 가능한 상품 등의 포장을 훼손한 경우 예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집

소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우 ((1)해외주문도서)

디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우

시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우

전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우

1) 해외주문도서 : 이용자의 요청에 의한 개인주문상품이므로 단순 변심 및 착오로 인한 취소/교환/반품 시 해외주문 반품/취소 수수료 고객 부담 (해외주문 반품/취소 수수료는 판매정가의 20%를 적용

2) 중고도서 : 반품/교환접수없이 반송하거나 우편으로 접수되어 상품 확인이 어려운 경우

소비자 피해보상
환불지연에 따른 배상

- 상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨

- 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리함

판매자
책들과함께
판매등급
특급셀러
판매자구분
사업자
구매만족도
5점 만점에 5점
평균 출고일 안내
2일 이내
품절 통보율 안내
3%

바로가기

최근 본 상품