Growing object-oriented software, guided by tests:
Saved in:
Main Authors: | , |
---|---|
Format: | Book |
Language: | English |
Published: |
Upper Saddle River, NJ
Addison Wesley
2010
|
Series: | The Addison-Wesley signature series
|
Subjects: | |
Links: | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=020473991&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
Item Description: | Includes bibliographical references (p. 347-348) and index |
Physical Description: | XXIII, 358 S. 24 cm |
ISBN: | 9780321503626 0321503627 |
Staff View
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV036552470 | ||
003 | DE-604 | ||
005 | 20171220 | ||
007 | t| | ||
008 | 100707s2010 xxu |||| 00||| eng d | ||
010 | |a 2009035239 | ||
015 | |a 014-86435 |2 dnb | ||
020 | |a 9780321503626 |c pbk. : alk. paper |9 978-0-321-50362-6 | ||
020 | |a 0321503627 |c pbk. : alk. paper |9 0-321-50362-7 | ||
035 | |a (OCoLC)699240299 | ||
035 | |a (DE-599)BVBBV036552470 | ||
040 | |a DE-604 |b ger |e rakwb | ||
041 | 0 | |a eng | |
044 | |a xxu |c US | ||
049 | |a DE-861 |a DE-523 |a DE-739 | ||
050 | 0 | |a QA76.64 | |
082 | 0 | |a 005.1/17 | |
084 | |a ST 231 |0 (DE-625)143618: |2 rvk | ||
100 | 1 | |a Freeman, Steve |e Verfasser |4 aut | |
245 | 1 | 0 | |a Growing object-oriented software, guided by tests |c Steve Freeman and Nat Pryce |
264 | 1 | |a Upper Saddle River, NJ |b Addison Wesley |c 2010 | |
300 | |a XXIII, 358 S. |c 24 cm | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
490 | 0 | |a The Addison-Wesley signature series | |
500 | |a Includes bibliographical references (p. 347-348) and index | ||
650 | 4 | |a Object-oriented programming (Computer science) | |
650 | 4 | |a Computer software |x Testing | |
650 | 0 | 7 | |a Software |0 (DE-588)4055382-6 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Programmierung |0 (DE-588)4076370-5 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Objektorientierung |0 (DE-588)4346172-4 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Langzeitversuch |0 (DE-588)4332269-4 |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Programmierung |0 (DE-588)4076370-5 |D s |
689 | 0 | 1 | |a Objektorientierung |0 (DE-588)4346172-4 |D s |
689 | 0 | 2 | |a Software |0 (DE-588)4055382-6 |D s |
689 | 0 | 3 | |a Langzeitversuch |0 (DE-588)4332269-4 |D s |
689 | 0 | |5 DE-604 | |
700 | 1 | |a Pryce, Nat |e Verfasser |4 aut | |
856 | 4 | 2 | |m HBZ Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=020473991&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
943 | 1 | |a oai:aleph.bib-bvb.de:BVB01-020473991 |
Record in the Search Index
_version_ | 1819310448719167488 |
---|---|
adam_text | Titel: Growing object-oriented software, guided by tests
Autor: Freeman, Steve
Jahr: 2010
Contents
Foreword......................................................................................................xv
Preface........................................................................................................xvii
Acknowledgments.......................................................................................xxi
About the Authors....................................................................................xxiii
Part I: Introduction.........................................................................................1
Chapter 1: What Is the Point of Test-Driven Development?.....................3
Software Development as a Learning Process.....................................3
Feedback Is the Fundamental Tool....................................................4
Practices That Support Change..........................................................5
Test-Driven Development in a Nutshell.............................................6
The Bigger Picture.............................................................................7
Testing End-to-End............................................................................8
Levels of Testing................................................................................9
External and Internal Quality..........................................................10
Chapter 2: Test-Driven Development with Objects................................13
A Web of Objects............................................................................13
Values and Objects..........................................................................13
Follow the Messages........................................................................14
Tell, Don t Ask................................................................................17
But Sometimes Ask..........................................................................17
Unit-Testing the Collaborating Objects...........................................18
Support for TDD with Mock Objects..............................................19
ix
Contents
Chapter 3: An Introduction to the Tools................................................21
Stop Me If You ve Heard This One Before......................................2.1
A Minimal Introduction to JUnit 4..................................................21
Hamcrest Matchers and assertThat()...............................................24
jMock2: Mock Objects....................................................................25
Part II: The Process of Test-Driven Development.........................................29
Chapter 4: Kick-Starting the Test-Driven Cycle.....................................31
Introduction....................................................................................31
First, Test a Walking Skeleton.........................................................32
Deciding the Shape of the Walking Skeleton....................................33
Build Sources of Feedback...............................................................35
Expose Uncertainty Early................................................................36
Chapter 5: Maintaining the Test-Driven Cycle.......................................39
Introduction....................................................................................39
Start Each Feature with an Acceptance Test....................................39
Separate Tests That Measure Progress from Those That Catch
Regressions......................................................................................40
Start Testing with the Simplest Success Case....................................41
Write the Test That You d Want to Read........................................42
Watch the Test Fail..........................................................................42
Develop from the Inputs to the Outputs..........................................43
Unit-Test Behavior, Not Methods....................................................43
Listen to the Tests............................................................................44
Tuning the Cycle.............................................................................45
Chapter 6: Object-Oriented Style...........................................................47
Introduction................................................................................47
Designing for Maintainability..........................................................47
Internals vs. Peers................................................... .........50
No And s, Or s, or But s..................................................................51
Object Peer Stereotypes........................................................................52
Composite Simpler Than the Sum of Its Parts..................................53
Context Independence..................................................................54
Hiding the Right Information..........................................................55
An Opinionated View..........................................................56
Chapter 7: Achieving Object-Oriented Design..............................................57
How Writing a Test First Helps the Design ZZZZZZZZZZ . 57
Communication over Classification....................co
Contents
Value Types.....................................................................................59
Where Do Objects Come From?......................................................60
Identify Relationships with Interfaces..............................................63
Refactor Interfaces Too...................................................................63
Compose Objects to Describe System Behavior...............................64
Building Up to Higher-Level Programming......................................65
And What about Classes?................................................................67
Chapter 8: Building on Third-Party Code..............................................69
Introduction....................................................................................69
Only Mock Types That You Own...................................................69
Mock Application Objects in Integration Tests................................71
Part ID: A Worked Example.........................................................................73
Chapter 9: Commissioning an Auction Sniper........................................75
To Begin at the Beginning................................................................75
Communicating with an Auction.....................................................78
Getting There Safely........................................................................79
This Isn t Real.................................................................................81
Chapter 10: The Walking Skeleton........................................................83
Get the Skeleton out of the Closet...................................................83
Our Very First Test..........................................................................84
Some Initial Choices........................................................................86
Chapter 11: Passing the First Test..........................................................89
Building the Test Rig.......................................................................89
Failing and Passing the Test.............................................................95
The Necessary Minimum...............................................................102
Chapter 12: Getting Ready to Bid........................................................105
An Introduction to the Market......................................................105
A Test for Bidding.........................................................................106
The AuctionMessageTranslator.....................................................112
Unpacking a Price Message............................................................118
Finish the Job.................................................................................121
Chapter 13: The Sniper Makes a Bid...................................................123
Introducing AuctionSniper.............................................................123
Sending a Bid.................................................................................126
Tidying Up the Implementation.....................................................131
Contents
Defer Decisions..............................................................................13^
1 XI
Emergent Design............................................................................
Chapter 14: The Sniper Wins the Auction............................................139
First, a Failing Test........................................................................139
Who Knows about Bidders?...........................................................14®
The Sniper Has More to Say..........................................................143
The Sniper Acquires Some State.....................................................144
The Sniper Wins............................................................................146
Making Steady Progress.................................................................148
Chapter 15: Towards a Real User Interface.........................................149
A More Realistic Implementation..................................................149
Displaying Price Details.................................................................152
Simplifying Sniper Events...............................................................159
Follow Through.............................................................................164
Final Polish....................................................................................168
Observations..................................................................................171
Chapter 16: Sniping for Multiple Items................................................175
Testing for Multiple Items.............................................................175
Adding Items through the User Interface........................................183
Observations..................................................................................189
Chapter 17: Teasing Apart Main.........................................................191
Finding a Role...............................................................................191
Extracting the Chat........................................................................192
Extracting the Connection.............................................................195
Extracting the SnipersTableModel.................................................197
Observations..................................................................................201
Chapter 18: Filling In the Details.........................................................205
A More Useful Application............................................................205
Stop When We ve Had Enough......................................................205
Observations............................................................212
Chapter 19: Handling Failure..........................215
What If It Doesn t Work?.......................... ...........................215
Detecting the Failure..........................................................................217
Displaying the Failure................................ ................................218
Disconnecting the Sniper..............................................................2l9
Recording the Failure...................
Observations... ....................................
...............................................................................225
Contents
Part IV: Sustainable Test-Driven Development...........................................227
Chapter 20: Listening to the Tests........................................................229
Introduction...................................................................................229
I Need to Mock an Object I Can t Replace (without Magic)..........230
Logging Is a Feature.......................................................................233
Mocking Concrete Classes.............................................................235
Don t Mock Values........................................................................237
Bloated Constructor.......................................................................238
Confused Object............................................................................240
Too Many Dependencies...............................................................241
Too Many Expectations.................................................................242
What the Tests Will Tell Us (If We re Listening)............................244
Chapter 21: Test Readability...............................................................247
Introduction...................................................................................247
Test Names Describe Features.......................................................248
Canonical Test Structure................................................................251
Streamline the Test Code...............................................................252
Assertions and Expectations..........................................................254
Literals and Variables....................................................................255
Chapter 22: Constructing Complex Test Data.....................................257
Introduction...................................................................................257
Test Data Builders.........................................................................258
Creating Similar Objects................................................................259
Combining Builders.......................................................................261
Emphasizing the Domain Model with Factory Methods................261
Removing Duplication at the Point of Use.....................................262
Communication First.....................................................................264
Chapter 23: Test Diagnostics...............................................................267
Design to Fail.................................................................................267
Small, Focused, Well-Named Tests................................................268
Explanatory Assertion Messages....................................................268
Highlight Detail with Matchers.....................................................268
Self-Describing Value.....................................................................269
Obviously Canned Value...............................................................270
Tracer Object.................................................................................270
Explicitly Assert That Expectations Were Satisfied........................271
Diagnostics Are a First-Class Feature.............................................271
Contents
Chapter 24: Test Flexibility..................................................................273
Introduction...................................................................................273
Test for Information, Not Representation......................................274
Precise Assertions...........................................................................275
Precise Expectations.......................................................................277
Guinea Pig Objects....................................................................284
Part V: Advanced Topics............................................................................287
Chapter 25: Testing Persistence............................................................289
Introduction...................................................................................289
Isolate Tests That Affect Persistent State........................................290
Make Tests Transaction Boundaries Explicit.................................292
Testing an Object That Performs Persistence Operations...............294
Testing That Objects Can Be Persisted...........................................297
But Database Tests Are S-l-o-w!....................................................300
Chapter 26: Unit Testing and Threads.................................................301
Introduction...................................................................................301
Separating Functionality and Concurrency Policy..........................302
Unit-Testing Synchronization.........................................................306
Stress-Testing Passive Objects........................................................311
Synchronizing the Test Thread with Background Threads.............312
The Limitations of Unit Stress Tests...............................................313
Chapter 27: Testing Asynchronous Code.............................................315
Introduction...................................................................................315
Sampling or Listening....................................................................316
Two Implementations....................................................................318
Runaway Tests..............................................................................322
Lost Updates..................................................................................323
Testing That an Action Has No Effect...........................................325
Distinguish Synchronizations and Assertions.................................326
Externalize Event Sources..............................................................326
Afterword: A Brief History of Mock Objects..............................................329
Appendix A: jMock2 Cheat Sheet.................................................................
Appendix B: Writing a Hamcrest Matcher..................................343
Bibliography..............................................
|
any_adam_object | 1 |
author | Freeman, Steve Pryce, Nat |
author_facet | Freeman, Steve Pryce, Nat |
author_role | aut aut |
author_sort | Freeman, Steve |
author_variant | s f sf n p np |
building | Verbundindex |
bvnumber | BV036552470 |
callnumber-first | Q - Science |
callnumber-label | QA76 |
callnumber-raw | QA76.64 |
callnumber-search | QA76.64 |
callnumber-sort | QA 276.64 |
callnumber-subject | QA - Mathematics |
classification_rvk | ST 231 |
ctrlnum | (OCoLC)699240299 (DE-599)BVBBV036552470 |
dewey-full | 005.1/17 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 005 - Computer programming, programs, data, security |
dewey-raw | 005.1/17 |
dewey-search | 005.1/17 |
dewey-sort | 15.1 217 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Informatik |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>02039nam a2200517 c 4500</leader><controlfield tag="001">BV036552470</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20171220 </controlfield><controlfield tag="007">t|</controlfield><controlfield tag="008">100707s2010 xxu |||| 00||| eng d</controlfield><datafield tag="010" ind1=" " ind2=" "><subfield code="a">2009035239</subfield></datafield><datafield tag="015" ind1=" " ind2=" "><subfield code="a">014-86435</subfield><subfield code="2">dnb</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9780321503626</subfield><subfield code="c">pbk. : alk. paper</subfield><subfield code="9">978-0-321-50362-6</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">0321503627</subfield><subfield code="c">pbk. : alk. paper</subfield><subfield code="9">0-321-50362-7</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)699240299</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV036552470</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rakwb</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="044" ind1=" " ind2=" "><subfield code="a">xxu</subfield><subfield code="c">US</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-861</subfield><subfield code="a">DE-523</subfield><subfield code="a">DE-739</subfield></datafield><datafield tag="050" ind1=" " ind2="0"><subfield code="a">QA76.64</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">005.1/17</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 231</subfield><subfield code="0">(DE-625)143618:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Freeman, Steve</subfield><subfield code="e">Verfasser</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Growing object-oriented software, guided by tests</subfield><subfield code="c">Steve Freeman and Nat Pryce</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Upper Saddle River, NJ</subfield><subfield code="b">Addison Wesley</subfield><subfield code="c">2010</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">XXIII, 358 S.</subfield><subfield code="c">24 cm</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="490" ind1="0" ind2=" "><subfield code="a">The Addison-Wesley signature series</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Includes bibliographical references (p. 347-348) and index</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Object-oriented programming (Computer science)</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Computer software</subfield><subfield code="x">Testing</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Software</subfield><subfield code="0">(DE-588)4055382-6</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Programmierung</subfield><subfield code="0">(DE-588)4076370-5</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Objektorientierung</subfield><subfield code="0">(DE-588)4346172-4</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Langzeitversuch</subfield><subfield code="0">(DE-588)4332269-4</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Programmierung</subfield><subfield code="0">(DE-588)4076370-5</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2="1"><subfield code="a">Objektorientierung</subfield><subfield code="0">(DE-588)4346172-4</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2="2"><subfield code="a">Software</subfield><subfield code="0">(DE-588)4055382-6</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2="3"><subfield code="a">Langzeitversuch</subfield><subfield code="0">(DE-588)4332269-4</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Pryce, Nat</subfield><subfield code="e">Verfasser</subfield><subfield code="4">aut</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">HBZ Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=020473991&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="943" ind1="1" ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-020473991</subfield></datafield></record></collection> |
id | DE-604.BV036552470 |
illustrated | Not Illustrated |
indexdate | 2024-12-20T14:36:45Z |
institution | BVB |
isbn | 9780321503626 0321503627 |
language | English |
lccn | 2009035239 |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-020473991 |
oclc_num | 699240299 |
open_access_boolean | |
owner | DE-861 DE-523 DE-739 |
owner_facet | DE-861 DE-523 DE-739 |
physical | XXIII, 358 S. 24 cm |
publishDate | 2010 |
publishDateSearch | 2010 |
publishDateSort | 2010 |
publisher | Addison Wesley |
record_format | marc |
series2 | The Addison-Wesley signature series |
spellingShingle | Freeman, Steve Pryce, Nat Growing object-oriented software, guided by tests Object-oriented programming (Computer science) Computer software Testing Software (DE-588)4055382-6 gnd Programmierung (DE-588)4076370-5 gnd Objektorientierung (DE-588)4346172-4 gnd Langzeitversuch (DE-588)4332269-4 gnd |
subject_GND | (DE-588)4055382-6 (DE-588)4076370-5 (DE-588)4346172-4 (DE-588)4332269-4 |
title | Growing object-oriented software, guided by tests |
title_auth | Growing object-oriented software, guided by tests |
title_exact_search | Growing object-oriented software, guided by tests |
title_full | Growing object-oriented software, guided by tests Steve Freeman and Nat Pryce |
title_fullStr | Growing object-oriented software, guided by tests Steve Freeman and Nat Pryce |
title_full_unstemmed | Growing object-oriented software, guided by tests Steve Freeman and Nat Pryce |
title_short | Growing object-oriented software, guided by tests |
title_sort | growing object oriented software guided by tests |
topic | Object-oriented programming (Computer science) Computer software Testing Software (DE-588)4055382-6 gnd Programmierung (DE-588)4076370-5 gnd Objektorientierung (DE-588)4346172-4 gnd Langzeitversuch (DE-588)4332269-4 gnd |
topic_facet | Object-oriented programming (Computer science) Computer software Testing Software Programmierung Objektorientierung Langzeitversuch |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=020473991&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT freemansteve growingobjectorientedsoftwareguidedbytests AT prycenat growingobjectorientedsoftwareguidedbytests |