In the next several posts, I’d like to take a look at the seven basic principles of the Context-Driven School of software testing. The main reason for this is that I like what people belonging to this school say about testing, but I don’t ‘get’ the seven basic principles. I do understand the principles when I read them, but I don’t feel like I ‘own’ them.
So in the first few posts I will explore the principles as such. After that I will take a look at what other people have said about these principles. So please leave a comment if you know some good secondary sources on these principles!
The seven basic principles can be found here: http://www.context-driven-testing.com. They are also present as an appendix in “Lessons learned in software testing” by Cem Kaner, James Bach, Bret Pettichord, publised in 2002. This means that these principles were written in a context I’m not familiar with. They are at least four years older than my career in software testing, which began in 2006. And they were written by people from the USA, while I live and work in Western Europe.
My unfamiliarity with that context may be part of the reason I don’t really ‘get’ the principles. On the other hand, if these principles are the basis of a school of software testing, this shouldn’t really matter. Software testing does not differ that much between the USA and Europe, nor between 2002 and 2006, or 2012 for that matter. And if it did, I would have a good argument against these principles (and thus the school), because they should be able to survive this difference in space and time.
Another thing to note before we take a look at the principles themselves, is that these are the principles of the Context-Driven School of testing. This implies that – at least according to the authors of the principles – there are other schools. So what are these other schools?
A quick search on the internet results in the following slide show by Brett Pettichord: http://www.prismnet.com/~wazmo/papers/four_schools.pdf. He differentiates the following schools: the Analytic School, the Standard School, the Quality School, the Context-driven School and the Agile School. I won’t go into the whole Schools-idea here, but it seems that the authors of the principles use them to differentiate the Context-Driven School from the other schools. In a later post I will explore this further.
Finally, the fact that these principles exist, tells us something important about the Context-Driven School: it’s a school that thinks about testing. It is conscious of the fact that any method of software testing implies a philosophy of testing. That philosophy is the basis on which you decide what is good testing and what is bad testing. So it makes sense to try to make this philosophy explicit, if only to make it easier to think critically about the method and it’s philosophy.
Nevertheless, plenty of testing methods seem fine in telling you what they think is good testing, but never telling you why they think so.
That should be enough of an introduction, so without further ado, the seven basic principles of the Context-Driven School:
1. The value of any practice depends on its context.
2. There are good practices in context, but there are no best practices.
3. People, working together, are the most important part of any project’s context.
4. Projects unfold over time in ways that are often not predictable.
5. The product is a solution. If the problem isn’t solved, the product doesn’t work.
6. Good software testing is a challenging intellectual process.
7. Only through judgment and skill, exercised cooperatively throughout the entire project, are we able to do the right things at the right times to effectively test our products.
One thing that confuses me about these principles is that they seem to be doing two things. On the one hand some principles seem to expand on others, creating a line of reasoning. For example, principle 2 is a consequence of principle 1. Principle 7 is also a lot longer than the other principles, suggesting it’s a conclusion of some kind. On the other hand they seem to describe a set of elements that define the Context-driven School, like a kind of checklist. 1-2 are about practices, 3-5 about projects, 6-7 about testing.
Since it’s hard to read the principles in both ways simultaneously, this may be another reason for the trouble I have with really ‘getting’ the principles.
Secondly, the principles do not contain practical advice as in telling you what to do. This makes sense because of the “no best practices”. And they are principles, not guidelines or commandments. This abstract nature of the principles does make it easy to go over the principles too quickly, though.
Thirdly, the principles are not verbose. They contain few adjectives. So the principles are more about things than the qualities of those things. I’m not sure if that actually means anything. What I do know is that it’s easy to read such a terse text to fast. You just read it and go “Oh, okay.”
That’s also one of the reasons I’m writing this set of posts: to make me pauze at each principle and think about it. And in the next post, I’ll do exactly that.