Wednesday, October 21, 2020

Context-Driven, or What?

I was interviewed on Testers' Island Discs a few months ago. During the conversation, Mark Winteringham asked me about the Association for Software Testing and I said this:

The AST is a professional body for software testers. It's a non-profit — we're all volunteers — and its mission is to advance understanding of the science and practice of software testing according to context-driven principles ... which sounds like a real mouthful.

The way I like to gloss it, and the way it speaks to me, is that we value both expertise and experience when it comes to testing and generally speaking we favour context-driven testing too.

My sense is that, these days, most people would, even if they don't really know the terms, probably be doing some kind of context-driven testing. The proportion of people doing old-school stuff, test cases and so on, is shrinking as far as I can see.

I love talking about AST (why not come and join us?) and I very am happy with the way I interpret our mission as being about valuing expertise and experience ... but the way I referred to context-driven testing has been nagging away at me.

Why? Because I talked about "some kind of context-driven testing ..." as if there are flavours, and contrasted it with up-front test cases as if that's all it is.

What we say in the moment often isn't the optimal way we could express ourselves and I'm not vain enough to think that anyone listening was hanging on my every syllable in any case. However, I am interested in reflecting on what I said to better internalise what I think and make it more natural for me to say it concisely and accurately next time.

So, let's start at It describes the set of principles that underpin the Association for Software Testing's mission:

  • The value of any practice depends on its context.
  • There are good practices in context, but there are no best practices.
  • People, working together, are the most important part of any project’s context.
  • Projects unfold over time in ways that are often not predictable.
  • The product is a solution. If the problem isn’t solved, the product doesn’t work.
  • Good software testing is a challenging intellectual process.
  • 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.

These are opinionated principles, for sure, but they are principles that I can sign up to. 

The rest of attempts to carve out a space in which context-driven testing is distinguished from testing where context is somehow considered, testing where context is not considered, agile testing, and even exploratory testing.

I am not under any illusions that being driven by context is any guarantee of good testing, or of consistent testing. There just isn't "the context" but instead "the contexts." Every person in a situation has their own take on what they see and hear at any given time, some parts shared with others and some not. The method of observing, the observations, and the tester's biases of interpretation will all contribute to determining any resulting actions.

On top of that, even for a given person with their own context, it's not possible to consider the whole context the whole time. Where are the edges of a context? How to know that the relevant context has been included and irrelevant context excluded? How to track when the context changes in a significant way?

Testers who are taking a context-driven approach will recognise these problems and try to balance them by, for instance, repeated observation, applying heuristics, finding similar examples from their experience, calling on their expertise, looking for collaboration, making regular attempts to synchronise with the people who matter on the project, and aligning work with current goals and constraints.

It's not a thought that I've had before, but I have the feeling that I have wrappd up context-driven approaches with being congruent. In congruent communication I want to make sure that I give fair consideration to myself, the other parties, and the wider situation. That's how I approach testing too. That's how I try to approach pretty much everything that matters to me.

I have also just noticed that I didn't use the term context-driven in my recent How To Test Anything talk even though I would readily describe the values it put forward and the approaches it described as context-driven.

What's that about, then? Good question. My immediate reaction is that I'm wary of labels and the preconceptions that go with them. There are so many X-driven-Y approaches these days, for example. That's a shame because context-driven, for me, provides scaffolding to stand on, not a stick to be beaten with.

My second reaction is that I'm unwittingly precious about the term and what it represents and that I don't want to dignify testing that doesn't deserve to be called context-driven by suggesting that it is. 

Back to Testers' Island Discs, then. When I said "most people will be doing some kind of context-driven testing ..." I think what I really wanted to say was something like "most people will be setting up their testing to take context into account rather than, for example, simply starting with a big set of test cases that they've derived from the requirements."

Which is all well and good yada yada blah blah blah semantics, you might say. Fair enough, but understanding what I think helps me to guide how I act and I'm very interested in acting in ways that I am comfortable with. This kind of writing helps me to get there.

No comments:

Post a Comment