Autres vendeurs sur Amazon
+ 0,01 € (livraison)
+ 0,01 € (livraison)
+ 0,01 € (livraison)
Growing Object-Oriented Software, Guided by Tests (Anglais) Broché – 12 octobre 2009
|Neuf à partir de||Occasion à partir de|
Produits fréquemment achetés ensemble
Les clients ayant acheté cet article ont également acheté
Description du produit
Quatrième de couverture
Foreword by Kent Beck
"The authors of this book have led a revolution in the craft of programming by controlling the environment in which software grows.” --Ward Cunningham
“At last, a book suffused with code that exposes the deep symbiosis between TDD and OOD. This one's a keeper.” --Robert C. Martin
“If you want to be an expert in the state of the art in TDD, you need to understand the ideas in this book.”--Michael Feathers
Test-Driven Development (TDD) is now an established technique for delivering better software faster. TDD is based on a simple idea: Write tests for your code before you write the code itself. However, this "simple" idea takes skill and judgment to do well. Now there's a practical guide to TDD that takes you beyond the basic concepts. Drawing on a decade of experience building real-world systems, two TDD pioneers show how to let tests guide your development and “grow” software that is coherent, reliable, and maintainable.
Steve Freeman and Nat Pryce describe the processes they use, the design principles they strive to achieve, and some of the tools that help them get the job done. Through an extended worked example, you’ll learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects. Along the way, the book systematically addresses challenges that development teams encounter with TDD--from integrating TDD into your processes to testing your most difficult features. Coverage includes
• Implementing TDD effectively: getting started, and maintaining your momentum
throughout the project
• Creating cleaner, more expressive, more sustainable code
• Using tests to stay relentlessly focused on sustaining quality
• Understanding how TDD, Mock Objects, and Object-Oriented Design come together
in the context of a real software development project
• Using Mock Objects to guide object-oriented designs
• Succeeding where TDD is difficult: managing complex test data, and testing persistence
Biographie de l'auteur
Steve Freeman is an independent consultant specializing in Agile software development. A founder member of the London Extreme Tuesday Club, he was chair of the first XPDay and is a frequent organizer and presenter at international conferences. Steve has worked in a variety of organizations, from writing shrink-wrap software for IBM, to prototyping for major research laboratories. Steve has a Ph.D. from Cambridge University, and degrees in statistics and music. Steve is based in London, UK.
Nat Pryce has worked as a programmer, architect, trainer, and consultant in a variety of industries, including sports reportage, marketing communications, retail, telecoms, and finance. With a Ph.D. from Imperial College London, he has also worked on research projects and does occasional university teaching. An early adopter of Extreme Programming, he has written or contributed to several open source libraries that support Test Driven Development. He was one of the founding organizers of the London XPDay and regularly presents at international conferences. Nat is based in London, UK.
Freeman and Pryce were joint winners of the 2006 Agile Alliance Gordon Pask award.
Détails sur le produit
Si vous vendez ce produit, souhaitez-vous suggérer des mises à jour par l'intermédiaire du support vendeur ?
Quels sont les autres articles que les clients achètent après avoir regardé cet article?
Un problème s'est produit lors du filtrage des commentaires. Veuillez réessayer ultérieurement.
Meilleurs commentaires internationaux
It is the first clear, detailed description I have seen of how test-driven development (TTD) not just improves the quality of code, but can and should be used as a driver to change the actual design of the code. In other words, why you don't merely write less buggy code with TDD, but fundamentally different (and better) code.
The book describes how to kick off a new project with a "walking skeleton" - a minimal end-to-end feature that exercises the entire automated build-deploy-test infrastructure that you will need for the rest of the project.
It describes how end-to-end acceptance tests differ from unit tests and integration tests, and how the three types fit together.
Much of the book is an extended worked example, including asynchronous networking and UI code. This level of detail requires effort to read, but prevents the authors from hiding behind any form of hand-waving, and is well worth the effort - I am currently re-reading all the way through.
If you aspire to test-first programming then you need this book. If you don't aspire to test-first programming then you should read this book.
Growing Object Orientated Software Guided by Tests was the first place I read about the Walking Shelton. Originally described by Alistair Cockburn, this is a technique I've been using for the last few years and didn't realise there was a name for. The Auction sniper example that covered by the middle chapters introduces not only testing techniques, but lots of useful and practical lessons about good design. The later chapters discuss improving your tests, including readability. The final two chapters cover testing threaded code and asynchronous code. Some of the ideas presented here were new to me and would have have been very useful refactoring exercises for some projects I used to work on.
If you want to develop higher quality, robust software, read and apply the lessons in the book.
Warning: The code examples in the Kindle version of this book are difficult to read and there are a few misprints compared to the paper version.
I consider myself an experienced programmer when it comes to Test Driven Development. I've picked up the practice back around 2003, when I first read Kent Beck's XP Explained. The habit was further reinforced by Martin Fowler's Refactoring book, and those 2 guys are my programming idols to this day. I hope I grow to have as much an open mind to experimentation as they have.
After watching Kent's screencasts on TDD by the Pragmatic Programmers, I felt pretty confident I was doing the "right thing"™ when it came to TDD. I later interviewed with ThoughtWorks, and had some harsh feedback on my TDD skills. This is one of the books they told me to pick up in order to toughen up, and boy were they right.
Steve and Natan dig deep into "modern" mockist TDD, building a real application with a UI and testing it both inside-out and outside-in with unit and acceptance tests. While mocks and behaviour driven development are not new things as they were when they wrote the book, the practices and hints they give throughout the book will be just as valid as they were a few years ago.
Along with Eric Evans' DDD book, this is a must read and must have for anyone that considers themselves a professional programmer. My TDD skills have levelled up much after following the book, and most importantly, I have a reference to look into when I found myself stuck in a corner with a "real world application" and testing.
If you can master TDD, this will open up a whole new world of software engineering.
This book appears to be the best there is on the subject, and contains many valuable bits of info. Also talks about, though briefly, the Ports and Adapter architecture (aka Hexgonal), which looks like a great architecture.
The crux of the matter, is if your code is easy to test (read 'use'), it's good code. And the only way to know if it's easy to test, is to test it.
Buy this book, study it, become a better coder, get a payrise...
It's a good read and I found quite a few "aha" paragraphs (my copy's now punctuated with permanently folded corners/post it notes).
It's nicely written without sounding arrogant. I think it's quite a hard topic to cover without getting bogged down in the minutiae of whys and wherefores of decisions, which it covers at exactly the right level
My only criticism is that I found it wee bit annoying the way it referred to the latter worked example when introducing an aspect of TDD, forcing me to skip back and forth a bit - but I think that's just a personal book reading preference.
I'm not sure how much an experienced TDD practioner would gain from it (except to see some of your own thoughts mirrored in black and white), but would very much recommend it to those new or getting started with TDD, wishing to `do it right'
Although the code samples are in Java it is applicable to other languages, such as C#, as the concepts are language independent
Once you get beyond the basics of TDD examples covering things like the Fibonacci sequence or tiny parts of larger systems become less and less useful. Why? Because there is no design involved - if someone asks for a Fibonacci generator then the specification is completely fixed and understood right from the beginning. The implementation may vary but there will be (one hopes!) no real confusion or alternative specifications to consider. When starting most real-world software projects that is not how things begin and it is not until the project matures that the code takes on this clearer form. This maturation does not happen by itself or by magic and most developers will have worked on projects where that has never occurred. It is making this transformation happen through a combination of good design and the intelligent application of TDD that this book uniquely focusses on.
Having read this book whilst it was being produced on the authors' website, pre-ordering it from Amazon and returning to it on and off ever since I'm going to stick my neck out and say that this is my favourite software engineering book at the moment (and I have a lot to pick from). The easy and relaxed writing style makes it a joy to read, the advanced concepts covered and the way that the worked example really speaks to my experience in developing real-world software add up to an exciting read for any developer interested in pushing the boundaries of their craft.
As a final note, although the worked examples are all in Java I found it very easy to follow despite coming from a .net/C# background (I think a C# version of the code is now available as well).
For those that are concerned about this sort of thing, note that all the code examples are in Java and the anciliary testing and mocking applications are Java-centric. They are written clearly enough for a pure C# developer like me to follow and translate into C# and nUnit.
My only complaint with the book was in Part III which is a worked example. This is a large part of the book that uses a development example to demonstrate their approach to software development. As such the code goes through a lot of refactorings and this is where the problem lies. Too often they discuss a refactoring that is required without showing the code that they are considering refactoring. As the code has already gone through so many changes it is very difficult to keep track of what it currently looks like.
Ein Training und dann dieses Buch haben dann Hoffnung gegeben. Wir haben einfach den Platz von Unit Tests in der SW-Entwicklung missverstanden. Es geht um viel mehr, als um bessere Testabdekcung, kürzere Testlaufzeiten, schnelleren Feedback und Stabiliserung der Tests.
Freeman und Pryce zeigen Theorie und Praxis, wie mit Hilfe von TDD feingranular inkrementeller Design erfolgen kann. Nach einer prinzipiellen Einführung folgt über 150 Seiten die Entwicklung eines kleinen SW-Systems von Null aus.
- Zuerst wird die grobe Architektur überlegt, inklusive End-to-End Testautomatisierung.
- Es wird der erste End-to-End Test Entwickelt.
- Dann wird geschaut, dass ein Walking Skeleton diesen Test besteht.
Was ich noch gelernt habe:
- Der unglaublich lesbare Kodierstil, der hier gezeigt wird.
- Das Verwenden von Mocking für das Voranbringen der Entwiclung von Klasse zu Klasse, nach dem Pull-Prinzip aus Lean. Es kommt keine Funktion in eine Klasse hinein, die nicht von Aussen durch einen End-to-End Test erfordert wird, oder durch eine andere Klasse konkret benötigt wird.
Definitv eines der besten Bücher über OOP/OOD!