Schools and Rules

I’ve tried to (mostly) stay out of the discussions on the schools of software testing, but after spending a long weekend thinking and reading about testing, I came to a conclusion that seemed appropriate for a blog post.

A quick recap for those of you who may need it:

The “schools” as originally identified by Bret Pettichord are:

  • Factory School – emphasis on testing that can be automated or delegated to cheap labor
  • Control School – emphasis on standards and processes
  • Analytical School – emphasis on analytical methods for assessing software quality
  • Context-driven school – emphasis on adapting to circumstances (context) of the product, etc.

Cem Kaner has a nice post on the history here.

The “controversy” around the schools that seems to pop up every few months is that the schools were defined by members of the context-driven school (CDS), and they have self selected themselves as CDS members. Members of other “schools” work away, blissfully unaware of their school membership. Paul Gerard (and others) say that there is danger in applying labels – although I tend to agree, I don’t really have a problem with schools, and if someone wants to say they are a member of a school, that’s fine with me. I think all (good) testing is context-driven, but I acknowledge that there are pockets of testing in the industry that may stick to one of the more stricter approaches (now I wonder if we can just have two schools, and label them “Context-driven school”, and the “Tunnel-vision school”?). Anyway, I’m a dues paying member of AST, so I suppose I’m context-driven by association, but I refuse to label myself :}

Before I get to my concern, I’m afraid I have to tell another story about music. As I’ve mentioned before, I studied music composition in school. My degrees are officially in composition & theory, and theory is the topic de jour.

All music students take 2 years of theory. In the first year you study traditional scales and harmony, and spend a big chunk of time learning to analyze music so you can understand what works and what doesn’t work. You learn the basics of harmonic structure and voicing – basically, you learn a lot of rules. In the second year, you learn how to break some of these rules. You learn about chord structures you never thought of before – you learn non-western scale structures, and you learn how late 19th century composers and early 20th century composers were able to write great music without (obviously) following any of the “rules” you learned in first year theory. Then, for those of us who went on to study composition, we learned that we didn’t have to follow the rules. We could do whatever we wanted – we could experiment with chords, melody, rhythm, instrumentation, or anything else we wanted. We could break the rules on purpose at any time and not need to explain ourselves.

Of course, you can’t really break a rule on purpose if you don’t know what the rules are, so that early training did come into play a bit. I also think the rules were so deeply ingrained that we thought of them even though we didn’t consciously use them. The fact is, that the foundation in the basics is what allows you to be truly creative in the craft of composing music.

And this leads to my only real issue with the schools of testing – and, as I think about it, it’s not an issue with the schools as a concept – it’s an issue with many of those who self-proclaim themselves as context-driven. You see, despite the fact that the “founders” of the school are quite experienced ad knowledgeable testers, many members of the school are ignorant of the basics of testing. They’ve never learned the basics. I don’t have a problem with anyone doubting the importance of boundary values or equivalence classes as long as you understand what they are in the first place ( I’ll be the first to tell you that those are just two test patterns of hundreds, I picked those two for example purposes). First you learn the rules, then you learn how to break (or discard) them. Let me remind you – I like the context-driven approach – I just believe that it doesn’t actually work unless you have enough knowledge to develop context in the first place. I’m not saying or recommending that testers need a computer science background or a certification on testing – I’m just saying that to be good at the craft, that you can’t discard knowledge of the basics of the science. I know some may argue with the use of the word science, but I break down music the same way. Chords, scales and structure or more science (or math) than art, but composing is definitely a craft. In fact, off of the top of my head, I can’t think of a single creative process that isn’t based on some basic knowledge of the underlying science (you’re welcome to challenge me if you can think of one).

To reiterate my point (in bold) above, the fact is, that the foundation in the basics is what allows you to be truly creative in the craft of software testing. The astute reader will note that I changed two words this time.