이펙티브 소프트웨어 테스팅 (사례 중심으로 배우는 실전 소프트웨어 테스트 가이드)

이펙티브 소프트웨어 테스팅 (사례 중심으로 배우는 실전 소프트웨어 테스트 가이드)

$32.00
Description
소프트웨어 테스팅 고민은 이제 그만
고민 없이 술술 써지는 테스트 코드 작성 비법

소프트웨어 개발에서 테스트의 중요성을 모르는 사람은 없다. 하지만 당장 해결해야 할 일에 신경을 쓰다 보면 테스트는 성가신 과정으로 여겨지기도 한다. 그렇다면 이 테스트 코드 작성 과정을 체계화한다면 어떨까? 어떤 테스트를 작성할지 고민하는 시간을 줄이고, 깜빡하고 빠뜨리는 테스트도 줄일 수 있다. 이 책의 저자는 업계와 학계에서의 오랜 경험을 토대로 소프트웨어 테스트를 체계적으로 정리했고 이를 활용하면 좀 더 효율적으로 일할 수 있다는 점을 보여준다.

오늘날의 소프트웨어 테스트는 버그를 찾는 것은 물론, 시스템을 설계하고 구현하는 데도 큰 역할을 하며, 소프트웨어의 품질 보증과 배포에 이르기까지 영향을 미친다. 한마디로 테스트만 잘 만들어도 효율적인 개발자가 될 수 있다. 그런데 이 테스트를 만드는 것이 영감이 필요한 창의적인 일이 아니라, 누구나 할 수 있으며 심지어 대부분의 과정을 자동화할 수 있다면 어떨까? 저자는 테스트 작성 방법을 체계화하여 개발자가 테스트 작성에 에너지를 낭비하지 않고, 좀 더 창의성이 필요한 일에 에너지를 집중할 수 있도록 했다.

책에는 저자가 이론과 실무의 연결을 깊이 고민한 흔적이 고스란히 녹아 있다. 실무에서 꼭 필요한 이론만 담고, 이론을 어떻게 현장에서 구현하는지 사례를 통해 독자에게 보여준다. 테스트 작성으로 고민하는 개발자가 있다면, 이 책을 곁에 두고 더는 테스트 작성으로 골치 아픈 일이 없도록 대비하자.

주요 내용
■ 단위 테스트, 통합 테스트, 시스템 테스트의 차이점
■ 명세 기반 테스트, 구조적 테스트, 속성 기반 테스트의 단계 및 사례
■ 테스트 가능성을 위한 설계 방법
■ 견고하고 유지 보수하기 쉬운 테스트 스위트를 만드는 모범 사례
■ 모의 객체를 적절하게 사용하는 방법
■ 테스트 주도 개발 및 대규모 테스트 작성
저자

마우리시오아니시

(MaurícioAniche)
전자상거래와모바일및POS결제를돕는네덜란드핀테크회사인TechAcademyofAdyen을이끌고있다.네덜란드델프트공과대학교소프트웨어공학과의조교수로서개발자들이테스트와유지보수를하면서생산성을높이는방법을연구중이다.델프트공과대학교에서2020년공과대학교교육펠로십을받았고,소프트웨어테스트분야에서의노력을인정받아2021년‘올해의컴퓨터과학교수상’을받았다.브라질상파울루대학교에서컴퓨터공학석사와박사학위를취득했고,석사과정동안브라질의이러닝플랫폼인알루라(Alura)를공동설립했다.저자의큰목표는실무자가학문적이론을알게하고,학자가실무에서직면하는도전과제들을이해하도록하는것이다.영어로쓴본서외브라질포르투갈어로쓴책으로《Test-DrivenDevelopment(테스트주도개발)》,《OrientaçãoaObjetoseSOLIDparaNinjas(OOP와SOLID닌자비급)》가있다.

목차

옮긴이머리말xi
베타리더후기xii
추천사xiv
시작하며xvii
감사의글xix
이책에대하여xxii
표지에대하여xxvi

CHAPTER1효율적이고체계적인소프트웨어테스트1
1.1테스트를하는개발자와하지않는개발자2
1.2개발자를위한효율적인소프트웨어테스트14
__1.2.1개발과정에서의효율적인테스트15
__1.2.2반복프로세스로서의효율적테스트17
__1.2.3개발에먼저집중하고나서테스트하기17
__1.2.4‘제대로된설계’에관한미신17
__1.2.5테스트비용18
__1.2.6효율적이면서체계적이라는것의의미18
__1.2.7테스트자동화의역할19
1.3소프트웨어테스트원칙(테스트는왜이렇게어려운가)19
__1.3.1완벽한테스트는불가능하다20
__1.3.2테스트를그만둘때를파악하기20
__1.3.3가변성이중요하다(살충제역설)20
__1.3.4버그는다른곳에비해많이발생하는지점이있다21
__1.3.5어떤테스트를하든지결코완벽하거나충분하지않다21
__1.3.6맥락이핵심이다22
__1.3.7검증은유효성검사가아니다22
1.4테스트피라미드와집중해야할부분22
__1.4.1단위테스트23
__1.4.2통합테스트24
__1.4.3시스템테스트26
__1.4.4각테스트수준을언제사용해야할까?27
__1.4.5단위테스트를선호하는이유28
__1.4.6각수준에서무엇을테스트해야할까?28
__1.4.7테스트피라미드에동의하지않는다면30
__1.4.8이책에서배우는내용으로버그를모두찾을수있을까?32
1.5연습문제32
1.6요약35

CHAPTER2명세기반테스트37
2.1요구사항이모든걸말한다38
__2.1.11단계:요구사항과입출력에대해이해하기41
__2.1.22단계:여러입력값에대해프로그램이수행하는바를탐색하기41
__2.1.33단계:테스트가능한입출력과구획을탐색하기43
__2.1.44단계:경계분석하기46
__2.1.55단계:테스트케이스고안하기48
__2.1.66단계:테스트케이스자동화하기51
__2.1.77단계:창의성과경험을발휘해서테스트스위트를강화하기53
2.2간략히살펴보는명세기반테스트55
2.3명세테스트로버그찾기57
2.4현업에서의명세테스트67
__2.4.1프로세스는연속적이아니라반복적이어야한다67
__2.4.2명세테스트는어느정도로수행해야하는가?67
__2.4.3구획인가,경계인가?그것은중요하지않다!68
__2.4.4접점과거점으로도충분하지만내점과외점도얼마든지추가하자68
__2.4.5이해를높이기위해입력을변경해서사용하자68
__2.4.6조합의수가폭발적으로증가한다면실용적이어야한다68
__2.4.7무엇을입력할지모르겠다면간단한입력을넣어보자69
__2.4.8관심없는입력에대해합리적인값을선택하자69
__2.4.9널과예외케이스는의미가있을때만사용하자69
__2.4.10테스트가동일한스켈레톤을갖는경우매개변수화테스트를사용하자70
__2.4.11요구사항은잘게쪼갤수있다70
__2.4.12이것은클래스와상태에어떻게동작하는가?70
__2.4.13경험과창의성의역할73
2.5연습문제73
2.6요약76

CHAPTER3구조적테스트와코드커버리지77
3.1코드커버리지,올바른방법78
3.2구조적테스트간략히살펴보기82
3.3코드커버리지기준83
__3.3.1코드줄커버리지83
__3.3.2분기커버리지84
__3.3.3조건+분기커버리지85
__3.3.4경로커버리지86
3.4복잡한조건과MC/DC커버리지기준86
__3.4.1추상적인예제86
__3.4.2MC/DC를달성하는테스트스위트작성하기87
3.5반복문과유사구조처리하기90
3.6기준포함과선택91
3.7명세기반테스트와구조적테스트:실제사례92
3.8경계테스트와구조적테스트98
3.9구조적테스트만적용하는것은충분하지않다99
3.10현업에서의구조적테스트101
__3.10.1왜사람들은코드커버리지를싫어할까?101
__3.10.2커버리지100%가의미하는바는무엇인가?103
__3.10.3어떤커버리지기준을사용할것인가105
__3.10.4표현식이너무복잡해서단순화할수없다면MC/DC를고려하자105
__3.10.5그외커버리지기준107
__3.10.6무엇을수행하지말아야할까?107
3.11돌연변이테스트108
3.12연습문제111
3.13요약115

CHAPTER4계약설계117
4.1사전조건과사후조건118
__4.1.1단언키워드120
__4.1.2강한조건과약한조건121
4.2불변식123
4.3계약변경과리스코프치환법칙127
__4.3.1상속과계약129
4.4계약에의한설계가테스트와어떤관련이있는가?131
4.5현업에서의계약에의한설계132
__4.5.1강한사전조건vs.약한사전조건132
__4.5.2입력유효성검사인가,계약인가?아니면둘다인가가?133
__4.5.3단언과예외:둘중하나를사용해야하는경우135
__4.5.4예외vs.부드러운반환값136
__4.5.5계약에의한설계를사용하지않는경우137
__4.5.6사전조건,사후조건,불변식에대해테스트를작성해야할까?137
__4.5.7지원도구137
4.6연습문제138
4.7요약140

CHAPTER5속성기반테스트141
5.1예제1:합격등급프로그램142
5.2예제2:unique메서드테스트146
5.3예제3:indexOf메서드테스트149
5.4예제4:Basket클래스테스트157
5.5예제5:복잡한도메인객체생성165
5.6현업에서의속성기반테스트167
__5.6.1예시기반테스트vs.속성기반테스트167
__5.6.2속성기반테스트의일반적인문제168
__5.6.3창의성이핵심이다169
5.7연습문제169
5.8요약170

CHAPTER6테스트더블과모의객체171
6.1더미,페이크,스텁,모의객체,스파이174
__6.1.1더미객체174
__6.1.2페이크객체174
__6.1.3스텁174
__6.1.4모의객체175
__6.1.5스파이175
6.2모의객체프레임워크에대한소개175
__6.2.1의존성스텁화176
__6.2.2모의객체와기댓값182
__6.2.3인수포획186
__6.2.4예외시뮬레이션191
6.3현업에서의모의객체193
__6.3.1모의객체의단점193
__6.3.2모의해야하는대상과하지말아야하는대상195
__6.3.3날짜및시간래퍼200
__6.3.4소유하지않은것을모의하기203
__6.3.5모의에관한외부의견205
6.4연습문제207
6.5요약208

CHAPTER7테스트가능성을위한설계211
7.1도메인코드에서인프라코드를분리하기212
7.2의존성주입과제어가능성222
7.3클래스및메서드를관찰가능하게하기225
__7.3.1예제1:단언을보조하는메서드도입하기226
__7.3.2예제2:void메서드의행위를관찰하기227
7.4의존성전달방법:클래스생성자와메서드매개변수232
7.5현업에서의테스트가능성설계235
__7.5.1테스트대상클래스의응집도236
__7.5.2테스트대상클래스의결합236
__7.5.3복잡한조건과테스트가능성237
__7.5.4private메서드와테스트가능성237
__7.5.5정적메서드,싱글턴,테스트가능성238
__7.5.6육각형아키텍처와설계기법으로서의모의객체238
__7.5.7테스트가능성을위한설계에대한추가자료239
7.6연습문제239
7.7요약241

CHAPTER8테스트주도개발243
8.1첫번째TDD세션244
8.2처음맛본TDD에대한고찰254
8.3현업에서의TDD255
__8.3.1TDD인가,아닌가?255
__8.3.2항상TDD를사용해야할까?256
__8.3.3TDD는모든종류의애플리케이션과도메인에서동작하는가257
__8.3.4TDD와관련한연구(학계에서바라보는TDD)257
__8.3.5다양한TDD학파259
__8.3.6TDD와정식테스트260
8.4연습문제260
8.5요약262

CHAPTER9대규모테스트작성263
9.1대규모테스트사용시기264
__9.1.1거대구성요소에대한테스트264
__9.1.2코드베이스범위보다큰거대구성요소테스트274
9.2데이터베이스와SQL테스트280
__9.2.1SQL쿼리에서테스트해야하는것281
__9.2.2SQL쿼리에대한자동테스트283
__9.2.3SQL테스트를위한인프라설정289
__9.2.4모범사례292
9.3시스템테스트293
__9.3.1셀레늄294
__9.3.2페이지객체모델링297
__9.3.3패턴과모범사례308
9.4대규모테스트에대한마지막논의312
__9.4.1테스트를어느수준으로해야할까?312
__9.4.2비용/이득분석을수행하자313
__9.4.3수행은되었지만테스트되지않은메서드를조심하자314
__9.4.4적합한코드인프라가핵심이다314
__9.4.5DSL과테스트를작성하는이해관계자를위한도구314
__9.4.6다른종류의웹시스템에대한테스트314
9.5연습문제315
9.6요약316

CHAPTER10테스트코드품질317
10.1테스트코드의유지보수성을위한원칙318
__10.1.1테스트는빨라야한다318
__10.1.2테스트는응집력있고독립적이며격리되어야한다318
__10.1.3테스트는존재이유가있어야한다319
__10.1.4테스트는반복가능해야하며불안정하지않아야한다319
__10.1.5테스트의단언문은탄탄해야한다321
__10.1.6테스트는행위가변경될경우깨져야한다321
__10.1.7테스트는단하나의명확한이유로실패해야한다322
__10.1.8테스트는작성하기쉬워야한다322
__10.1.9테스트는읽기쉬워야한다322
__10.1.10테스트는쉽게수정하고진화할수