TL;DR
At one meetup, @neektza, excellent developer, asked me: “Karlo, I learned xy testing framework, but now I do not know which test should I write”? At that time, I could not answer it, but that question stuck with me. As I am almost done reading through resources Exploratory testing pathway provided by Marcel Gehlen, combining that knowledge and my working experience, here is my first draft answer on that question.
How developer should test?
When I speak with developers about new feature, I often get following developer statements:
- Hmm, this part of feature is complex
- Oh, this is very fishy
And then comes the punchline, Karlo you should test this risk in following way …
This test should be designed, executed, refactored, executed again by you my dear developer. And yes, you should use Test Driven Development (TDD) technique. And yes, you should automate this experimented (test) in you favourite testing framework.
When developer starts to think about the feature, questioning it, he/she creates test ideas that covers feature risk driven by quality criteria (for example error handling).
The plainest definition of software (formerly known as exploratory) testing is test design and test execution at the same time [James Bach].
Software developer should do the same using TDD.
And I think (you do not need to agree) that developer logical flow is to first write code, then test. Not the vice versa. You first need to have product in order to create experiment (test idea). And TDD is recursive, output of previous test is input for code refactor and new test ideas, same as in software (exploratory) testing.
To the extent that the next test we do is influenced by the result of the last test we did, we are doing exploratory testing [James Bach].
The basic rule is this: exploratory testing is called for any time the next test you should perform is not obvious, or when you want to go beyond the obvious. In my experience, that’s most of the time [James Bach].
Software testing difference between software tester and software developer is that developer is doing it against code that it develops, while software tester does it against other product elements (for example with help files, requirements, application, log component,…).