Software Testing
-Table of Contents** *generated with DocToc
- Books on Testing
- Rationale
- Websites and Articles on Testing
- Research on TDD
- Miscellaneous
- Tools and Ideas
Books on Testing
-
Andreas Spillner, Tilo Linz: Basiswissen Softwaretest (in German) - Aus- und Weiterbildung zum Certified Tester – Foundation Level nach ISTQB®-Standard.
-
Roy Osherove: The Art of Unit Testing, 2nd Edition, Manning Publications Co. November 2013. ISBN 9781617290893.
-
Gerard Meszaros: xUnit Test Patterns - Refactoring Test Code.
Rationale for Testing (in General)
All literature I have found up to now agrees that automated software testing is an essential integral part of the software development process.
In chapter 4 “Technical Practices” of Accelerate: The Science of DevOps the authors state:
Testing is not something that we should only start once a feature or a release is “dev complete.” Because testing is so essential, we should be doing it all the time as an integral part of the development process. Automated unit and acceptance tests should be run against every commit to version control to give developers fast feedback on their changes. Developers should be able to run all automated tests on their workstations in order to triage and fix defects. Testers should be performing exploratory testing continuously against the latest builds to come out of CI. No one should be saying they are “done” with any work until all relevant automated tests have been written and are passing.
More prominent and widely accepted opinions are given in the following works (sorted by descending date):
-
David Thomas and Andrew Hunt: The Pragmatic Programmer, 20th Anniversary Edition, The Pragmatic Bookshelf, September 2019. ISBN 9780135957059.
-
Nicole Forsgen, Jez Humble and Gene Kim: Accelerate: The Science of DevOps, IT Revolution Press, 2018. ISBN 9781942788331.
-
Martin Fowler, Don Roberts, John Brant, William Opdyke, Kent Beck, Paul Becker, Erich Gamma: Refactoring - Improving the Design of Existing Code. 2nd Edition, Addison-Wesley, 2018.
-
Jez Humble: Evidence and case studies in Jez Humble: Continuous Delivery, Website, pulished presumably in 2017, last visited on May 31, 2021.
-
Gene Kim, Jez Humble, Patrick Debois, and John Willis: The DevOps Handbook, IT Revolution Press, 2016. ISBN 1942788002.
-
Nick Hodges: Coding in Delhpi, Nepeta Enterprises, 2014. ISBN 1941266037.
-
Robert C. Martin: Clean Code: A Handbook of Agile Software Craftsmanship, Pearson Education, 2008. ISBN 978-0132350884.
-
Michael Feathers: Working Effectively with Legacy Code. USA, Pearson Education, 2004. ISBN 9780132931755, 0132931753
Websites and Articles on Testing
-
ISTQB: International Software Testing Qualification Board - The international standard in training and certification of software testers.
-
Roy Osherove: The four most common root causes that slow down enterprise continuous delivery - Anti-Patterns reducing team performance.
Research on TDD
-*Annotations**
| Annotation | Description |
|---|---|
| 🤝 | Link was provided by Daniel Spicher via Michael Mahlberg. Thank you! :-) |
| 🔓 | Open Access Publication :-) |
-
Caspers Jones: “Chapter 59: Test-Driven Development (TDD)” in Caspers Jones: Software Methodologies - A Quantitative Guide, pp. 467 - 471, CRC Press Taylor & Francis Group, LLC, 2018. ISBN 978-1-138-03308-5.
-
🤝🔓 Mohammad Ghafari, Timm Gross, Davide Fucci, and Michael Felderer: Why Research on Test-Driven Development is Inconclusive? in Proceedings of the 14th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM) (ESEM ‘20). Association for Computing Machinery, New York, NY, USA, Article 25, 1–10. 2020. DOI:https://doi.org/10.1145/3382494.3410687
- this current meta study is somewhat pessimistic about the current state of research
- objective: identify factors contributing to the inconclusing research results on tdd so that scientists can improve their study design
- value: use this study as a starting point for further research
-
🤝🔓 D. Fucci, H. Erdogmus, B. Turhan, M. Oivo and N. Juristo: A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last? in IEEE Transactions on Software Engineering, vol. 43, no. 7, pp. 597-614, 1 July 2017, DOI:https://doi.org/10.1109/TSE.2016.2616877.
- “Conclusion: The claimed benefits of TDD may not be due to its distinctive test-first dynamic, but rather due to the fact that TDD-like processes encourage fine-grained, steady steps that improve focus and flow.”
- refers to caveats regarding refactoring
- discusses the tdd approach and variations of it
Miscellaneous
- Lisa Crispin: Using the Agile Testing Quadrants
Tools and Ideas
-
Cucumber - Validate executable specifications against your code on any modern development stack.
-
FitNesse - The fully integrated standalone wiki and acceptance testing framework.
-
Pact - code-first tool for testing HTTP and message integrations using contract tests.
- Approval Tests - simplify testing by taking a snapshot of the results and confirming that they have not changed. Allows getting legacy code under control.
-
TextTest regression tests - Test-Based Approval tests for the GildedRose refactoring kata.
- MailDev - test your project’s generated emails during development.
Property Based Testing
-
Romeu Moura: Property-Based Testing for everyone
-
Koen Claessen: QuickCheck: Automatic testing of Haskell programs - Property based testing for Haskell (associated GitHub project)
-
David R. MacIver: HypothesisWorks / hypothesis - Property based testing for python.
-
Go Package quick - Property based testing for Go.
Fuzzing / Fuzz Testing
- Vincent Blanchon: Go: Fuzz Testing in Go - A short introductory article for Go.
- Dmitry Vyukov: go-fuzz - A coverage-guided fuzzing solution for testing of Go packages.
- Google: gofuzz - A library for populating go objects with random values.
- Jazzer - A coverage-guided, in-process fuzzer for the JVM platform.
- Atheris - A Coverage-Guided, Native Python Fuzzer.
- OSS-Fuzz - Combining modern fuzzing techniques with scalable, distributed execution for open source projects.