Go beyond basic testing! Great software testing makes the entire development process more efficient. This book reveals a systemic and effective approach that will help you customize your testing coverage and catch bugs in tricky corner cases.
In Effective Software Testing you will learn how
Engineer tests with a much higher chance of finding bugs Read code coverage metrics and use them to improve your test suite Understand when to use unit tests, integration tests, and system tests Use mocks and stubs to simplify your unit testing Think of pre-conditions, post-conditions, invariants, and contracts Implement property-based tests Utilize coding practices like dependency injection and hexagonal architecture that make your software easier to test Write good and maintainable test code
Effective Software Testing teaches you a systematic approach to software testing that will ensure the quality of your code. It’s full of techniques drawn from proven research in software engineering, and each chapter puts a new technique into practice. Follow the real-world use cases and detailed code samples, and you’ll soon be engineering tests that find bugs in edge cases and parts of code you’d never think of testing! Along the way, you’ll develop an intuition for testing that can save years of learning by trial and error.
About the technology Effective testing ensures that you’ll deliver quality software. For software engineers, testing is a key part of the development process. Mastering specification-based testing, boundary testing, structural testing, and other core strategies is essential to writing good tests and catching bugs before they hit production.
About the book Effective Software Testing is a hands-on guide to creating bug-free software. Written for developers, it guides you through all the different types of testing, from single units up to entire components. You’ll also learn how to engineer code that facilitates testing and how to write easy-to-maintain test code. Offering a thorough, systematic approach, this book includes annotated source code samples, realistic scenarios, and reasoned explanations.
What's inside
Design rigorous test suites that actually find bugs When to use unit tests, integration tests, and system tests Pre-and post-conditions, invariants, contracts, and property-based tests Design systems that are test-friendly Test code best practices and test smells
About the reader The Java-based examples illustrate concepts you can use for any object-oriented language.
About the author Dr. Maurício Aniche is the Tech Academy Lead at Adyen and an Assistant Professor in Software Engineering at the Delft University of Technology.
Table of Contents 1 Effective and systematic software testing 2 Specification-based testing 3 Structural testing and code coverage 4 Designing contracts 5 Property-based testing 6 Test doubles and mocks 7 Designing for testability 8 Test-driven development 9 Writing larger tests 10 Test code quality 11 Wrapping up the book
This is my new favourite overview of automated testing and will be the book I recommend as an introduction to others from now on. Very balanced and useful coverage of the most important concepts. Worth reading for beginners and experts alike. Warmly recommended! The references to further reading throughout are useful too.
What a great introduction into testing! Sure, if you have experience a lot will be familiar, but there is enough interesting material for those as well.
As an experienced software developer, I didn't learn a lot that was new to me from this book. So why did I read it? Because I am always interested in learning about books that I can recommend to mentees and or, more generally, more junior colleagues. "Effective Software Testing" is a book I can definitely recommend. It gives a very thorough overview of all the relevant techniques for software testing that developers should have in their toolbelt, and it gives a lot of good advice on how to systematically come up with good test suites.
Naturally, some topics are not covered in as much detail as is necessary to really dig them. For example, the introduction to property-based testing only scratches the surface and doesn't have a lot of advice on how to devise good properties for the unit under test. To be fair, entire books can and have been written about this, and the author does a good job of arousing the reader's curiosity. Also, the book, which uses Java for all its examples, has a strong focus on object-oriented design with mutable classes. Readers who use functional programming, for example, will have to abstract from the concrete examples.
I don't agree with everything the author writes. Nevertheless, I think that this book is a valuable resource for junior or intermediate software developers who want to get better at writing tests.
I extraordinarily advocate "Effective Software Testing: A developer's guide" for builders who prefer to go past simple trying out and research Best QA Practices for 2023. The e book gives a complete and systematic strategy to software program checking out that can assist builders optimize their trying out insurance and pick out complex bugs in nook cases. The author's writing fashion is clear and concise, making it effortless to recognize complicated trying out concepts. The e book consists of sensible examples and case research that illustrate the ideas and strategies discussed. Moreover, the writer offers pointers and recommendation that builders can use to personalize their checking out techniques based totally on the precise desires of their projects. Overall, "Effective Software Testing: A developer's guide" is an awesome useful resource for builders who prefer to continue to be up to date with the contemporary satisfactory practices in software program testing. I relatively advise this e book to every person who desires to enhance their checking out capabilities and make their improvement method greater efficient.
Solid book on developer testing. I particularly like chapters 2 and 3 - a systematic way of coming up with test cases, based on both the specification and the structure of the code. Also, the examples are great throughout the book - not too simplistic, but still small enough to keep in your head. The author is a professor of Software Engineering, but has also worked as a developer. This shows in the book: it is quite pedagogical, with many interesting and relevant references to research. There are also many instances where he uses his own experience in the discussions of different techniques.
It is well-structured and has some good tips.. but it's too tied to an outdated definition of unit testing (that a unit test is a function test and everything has to be mocked). Besides, it gives some weird advice, like adding new queries to production code only to be able to test commands. Also, the 1st half of the book is about writing production code and running behind writing tests for it. It mentions TDD too late, like just a nice-to-know the technique. It's still worth a read.
This book took me some time to read carefully—not because it's difficult to understand, but because it's packed with valuable information. The density of knowledge is quite high. Although I was already familiar with much of the content, the book helped me organize and structure what I knew, which I truly appreciate, as I prefer systematic material. The author clearly has deep expertise and has invested a great deal of time in the subject of software testing. I highly recommend this book to anyone looking to either gain a deep understanding of software testing or to bring clarity and structure to their existing knowledge.
One of the best books about software testing I have ever read. Maurício describes the theory behind testing software in a pleasant way. Also, the examples are well written and it is easy to read even for people that don't use Java in a daily basis
Amazing book! Highly recommended for every developer keen on getting better at testing. Not only covers testing practices and principles but also suggests tools and techniques with actual examples. Kudoz for the author on such a great book. I am definitely going to spread the word at my workplace!