Efficient Software Testing

A small book about the big picture


My name is Itamar Turner-Trauring, and I'm working on a book about software testing. I'd love to hear your feedback; email me at itamar (at) itamarst.org.

Currently available chapters

Note that these are rough drafts, and need editing and polish. Last updated Nov 14, 2015.

The big picture: the benefits and costs of testing.
Fast feedback from the start: testing in early development.
Functionality testing: an introductory overview.
Software Components: when to test: sometimes you need to, sometimes you don't.
Real-world testing: the final form of testing.

More coming soon!

How should you test software?

When you start learning about software testing you will hear a variety of one-sided and contradictory opinions:

Myth: Only automated tests can ensure software quality!
Reality: Manual testing can be expensive and error prone, but it can also uncover problems automated testing will never find.

Myth: Only unit tests can ensure software quality!
Reality: Unit tests are not necessary for simple applications lacking library code.

Myth: End-to-end tests are all you need, unit tests are a waste of time!
Reality: Unit tests can massively reduce your costs when your application goes through transformational change.

Myth: There's no such thing as too much testing!
Reality: Unnecessary testing can keep your project from shipping on time; bad testing can make it difficult to change your code.

Your software, your way

The truth is software testing is all about trade-offs; this book will help you understand them. Once you understand your options, you can choose the testing methods best suited to your project's goals and the resources (time, money, expertise) available to you.

The book will cover:

  • The costs and benefits of testing, and why testing can be a hard sell.
  • The variety of testing methods available to you, including:
    • Testing you can do before development starts: performance modeling, preliminary usability tests, etc..
    • Testing you can do during development:
      • Application feature testing: Ensuring your software meets its users needs, using both human and automated testing.
      • Library testing: Future proof your applications by testing its library code.
      • Code reviews.
    • Testing you can do before shipping to users: Usability testing, security testing, smoke tests for deployments, etc..
  • How to decide which testing methods are best suited to your project's needs.