Growing Object-Oriented Software, Guided by Tests by Steve Freeman, Nat Pryce

Today i review following tech book:  
Growing Object-Oriented Software, Guided by Tests (Steve Freeman, Nat Pryce)

This book is very interesting to anyone, who want go deep into advance test driven development experience and actually improve software quality at real projects.
For me as experienced TDD craftsman it was one book which on my must read list and let me say it was quite of an experience.
The authors of this book use examples in Java and JMock as main examples for TDD, you will read here the story of invention of mock and how exactly it came to live.
Furthermore this book provides not only practical part of the TDD knowledge, but it gives a theoretical one too.
You will see the mind of very experienced test driven developer and gain understanding on how to go about implementing your project critical stories.
For the UI examples authors use Java Swing UI, which in my opinion already outdated UI framework, still it is in use by many companies worldwide.

What I really, really liked about this book?
This book covers important thinking processes like for example decoupling, encapsulation and information hiding.
You will see how the object oriented design can be done and for me it’s pretty useful template when I implement client requirements.

Then, when I saw this diagram

I immediately recognized the similar pattern which I have experienced from actual projects, so this book is not completely theoretical one, which is good and for the first time my expectations were satisfied so to speak my assertion was met and test passed green!

Can this book do something better?
The examples for java thread testing were kind of hard to follow, threads in Java and in any object oriented languages can be «messy», but i liked that the authors even tried to do that.
A thread with synchronized fields is hard to test, because the test framework and the jvm must not be different in synchronized behavior it all should behave as expected, which is hard to achieve.
In real project/s most times I don’t test threads in the way how this book presents, most times I assume you will encounter crazy dependencies and object field/s which is shared amount many different thread and or even distributed network for that you need quite different approach for testing.

Can I recommend this book and who should read it?
This book is quite good for introduction into TDD, some parts as I mentioned already outdated with modern Java, but it give you a right mindset, which will allow you to think differently about your code and the quality so if you have time , you should read this book regards of you knowledge levels of  programming experience.

Summary: This book is a definitive must have, if you a developer or want to become a professional developer, you should read this book, because it will guide you into right mindset and allow to create and to improve the overall quality of your software which you developing.

One of the major topics is analyzing levels of abstraction and thinking about how to test it separately from each other:

Can this book do something better?
The examples for java thread testing were kind of hard to follow, threads in Java and in any object oriented languages can be «messy», but i liked that the authors even tried to do that.
A thread with synchronized fields is hard to test, because the test framework and the jvm must not be different in synchronized behavior it all should behave as expected, which is hard to achieve.
In real project/s most times I don’t test threads in the way how this book presents, most times I assume you will encounter crazy dependencies and object field/s which is shared amount many different thread and or even distributed network for that you need quite different approach for testing.

Can I recommend this book and who should read it?
This book is quite good for introduction into TDD, some parts as I mentioned already outdated with modern Java, but it give you a right mindset, which will allow you to think differently about your code and the quality so if you have time , you should read this book regards of you knowledge levels of  programming experience.

Summary: This book is a definitive must have, if you a developer or want to become a professional developer, you should read this book, because it will guide you into right mindset and allow to create and to improve the overall quality of your software which you developing or plan to develop.