Background: Scrummerfall
Brad Wilson and others have blogged about a persistent “scrummerfall” pattern in agile transformations wherein, despite good-faith efforts on the part of teams to blast away cube walls, silos, and artificial role divisions, we still have programmers and testers working in phases. I’ve seen this repeatedly myself. Each little iteration is (at best) a two-phase waterfall project: programmers test-drive story implementations in isolation, then toss the stories over a tiny wall to testers in the same room, who write automated tests and do manual testing. And the testers find bugs not caught by programmers, in all the little nooks and crannies between systems, projects, frameworks, architectural layers, web service end points, yadda. This is not the only way in which crappy conveyance muda and role preservation shows up in iterations, but it is typical, and fresh in my mind.
Note that I am not arguing against the official role of tester on agile teams. To the contrary, I think the agile community at large tends to undervalue and misunderstand the value testers bring to agile teams and software development generally.
And on a side note, we could argue here about how useful non-isolation-testing is or is not, when we are supposed to be test-driving all of our code. We could argue about whether the need for automated integration tests are a measure of inadequate test-driving skill (which I do not actually believe).
But let’s not argue. Let’s instead agree that regardless of the story, its definition of done should include testing on which programmers and testers do some pairing. The story is not done unless programmers and testers have worked together on all the non-isolation testing that needs done. In a web app, this might include SeleniumRC or Watir testing. In any sort of app, it might be Story Testing of the kind we could do with Fit or Slim or RobotFramework or JBehave or EasyB or whatever. Let’s then also agree that our programmers should be learning more about testing generally, and we should be hiring testers who can program.
Most Good Agile Testers are Good Agile Programmers
Let me be more plain. Too few software testing professionals can program well. Agile Testing requires that most of its agile testers be programmers and, in my experience, pretty darned good ones. So, decent object modelers, pretty creative manual-step-automaters, pretty good build system massagers. Agility demands that testers evolve in the direction of solid, real-world development skill.
Hire Testers Who Are Good Programmers
So, please, stop hiring testers who can only do record/playback testing, manual Word doc test plan creation, etc, and have no programming ability. We have plenty of data now that whether your testers are in-house or off-shore, whether they have 2 years or 20 years of experience, most of them are going to need to be able to actually code once they join your agile teams.
This is not to say that programming is the most important or central skill a tester possesses. As Elisabeth Hendrickson recently commented, “Seems to me that professional testers do 4 things well: observe, notice what can be varied, predict risks, & explore methodically.” I agree. She and I and others wish to grow those skills as well.
But again, programming is one of the things good testers do well. And it is a means toward the above ends of noticing what can be varied, of predicting risks, of observing and exploring. And when not a means toward those things, it is an adjunct skill.
And in order to determine whether or not an agile testing candidate can actually code, you will need to test that candidate’s level of skill, using some kind of programming exercise.
More Background: an Agile Developer Coding Exercise
A bit of context: At Pillar Technology, I created a TicTacToe coding exercise (available on google code) for candidate agile Java programmers a couple of years ago. It has evolved and evolved, and we have seen several dozen programmers thrown through it. Those of you who know it, know, as I repeat constantly, that it has its flaws. Further, this is not the only hiring tool or technique we use, though we do try to use it for every programmer.
And I tell you what. Our ability to hire programmers with actual skill and experience in TDD, Refactoring, Simple Design, Clean Code, Design Patterns, and Software Craftsmanship generally has skyrocketed simply by throwing every candidate at this little exercise, and by having the right little community of Pillar programmers evaluate the code that the candidates write. And our cost per programmer hired has plummeted.
Where we had very little determinism and precision before, we now have some.
Finally: a Draft Agile Tester Coding Exercise
It turns out we also needed the ability to test how well agile testing candidates can code, at least in Java, in a particular context (Selenium RC web app GUI testing). I’ve now created another little google code project, this one for testing how well agile testers can write Java code for Selenium RC tests. It’s a very first draft (as of this writing), and it will need plenty of love and evolution and crusty criticism of the kind the other codebase got. I hereby solicit any and all, friendly or not. I just don’t want to get into conversations about whether this kind of automated testing is useful in the first place, since my operating premise is that it is.
The exercise currently uses as its System Under Test a fledgling Triangle Testing website under development by Elisabeth Hendrickson, to whom I owe thanks. Thanks, Elisabeth! As her triangle site SUT evolves, so may my codebase.
Anyone who you want to put through the exercise will need to be instructed to download and install both Eclipse (for example) and a Subversion client (like the Subclipse plugin for Eclipse). You’ll then need to instruct them to check out the coding exercise, and then finally to open and read the README file. My intention is that from there on out, the exercise instructions are clear, starting with instructions for downloading and installing the TestNG plugin for Eclipse.
If you would like some instruction in how to interpret and assess the code your candidates write, please contact me separately.
I’m really curious to see the responses to this. In planning for our workshop on having developers & testers pairing, Nate and I keep coming back to the question “do the testers HAVE to be able to code?”
Our current answer is “no, but… it’d be AWFUL nice.” At the least they have to be able to understand code well enough to pair with a programmer to help guide the programmer towards writing more effective tests. But, how much more they could do (& I have to believe, how much more empowered they’d feel) if they could code as well.
We don’t want their main STRENGTH to be coding, of course – because the whole goal of pairing programmers with testers is that when we bring different perspectives to the table, we do better. So, if you have testers that are kick ass coders it might really not be any better than just pairing programmers together.
But, enough coding to be able to automate the tests (NOT through point & click) would definitely be a Good Thing.
I agree with Abby completely, and as I am currently interviewing for 2 testers in a company about to go through an agile transition, I have had a hard time finding people with the right balance. I have said to those who have asked me “do they have to be computer science students?” (I am hiring entry level), “no, they don’t have to be, but I want them comfortable with reading code and able to learn to program pretty quickly.”
I was actually *just* a few weeks ago looking for *exactly* such a sample to give my selected interviewees.
Glad to have met you, Patrick, and looking forward to meeting Abby as well. I will be going through this example more in the coming weeks and will be sure to give feedback.
This may be a bit off topic, but … I wrote something similar to Selenium grid, but around Selenium Core (browsers were started and killed on computers, pointing at an HTML file that started a test run). That way we could use regular HTML files from the Selenium IDE as source for our (GUI) tests.
As long as coders provide sensible id attribute values on the HTML tags, the recorded tests are even easy to follow for anyone new to Selenium or perhaps the web GUI and the product itself.
I’m sad to see that Selenium still lacks an HTML driver. Most testers can work with HTML and CVS, but asking them to submit uncompiled, untested Java code wasn’t really accepted. Going with HTML source files on the other hand was.
Ok, Patrick, I just sent out this project to my first 3 candidates. I’ll let you know as I have feedback for you
“But again, programming is one of the things good testers do well. And it is a means toward the above ends of noticing what can be varied, of predicting risks, of observing and exploring.”
Yes I agree in the best case scenario testers should also be coders. Communication improves 200% and less time is wasted!