Do testers need programming skills?

Posted by Peter L | Posted in General, Main, Skills | Posted on 14-10-2010

10

Do we as software testers need to have programming skills? This question is not new. It has been discussed back and forth for some years now. I don’t know if we as a community are heading toward any sort of consensus on this, but I’m going to throw my opinion out there all the same.

The short answer is ‘No, we don’t need to, but it sure can help’. There are plenty of reasons I can think of to have at least a rudimentary ability to cut code and no real arguments against (If you can think of any, I’d love to hear them).

The slightly longer answer is that there are many different kinds of testing and for some of them, strong coding skills are essential. For others, not so much. It depends on a lot of things. Do you have a dedicated toolsmith to build testing tools for you? Do you have others in your team who have strong coding skills and can put them to use for your benefit? If so, then you might get away with not being able to cut code. There are still advantages to being able to write your own code and understand other people’s.

Knowing how to write code can help you to build your own suite of helper tools that are perfectly tailored to the work you need to do (or easily adaptable to how you need to work), or even throw-away scripts to quickly take care of something repetitive. Having knowledge of basic regular expressions is a life saver if you need to do any sort of text manipulation or pattern searching at all (Knowing Awk and Sed can help too). If your toolsmith gets hit by a bus or your helpful code guy is too busy to help you out, you can carry on.

Knowing how to read code lets you look under the hood at what the program is doing. If you can check out the source code and read through it, you can spot things that may well change the way you approach your testing. How does the code handle error reporting? Are there any unhandled edge-cases you can see (often the answer is yes). That random number generator they’re using – is it custom built or native to the language? Are those tightly-coupled components going to cause maintenance or testability issues? These are questions you can ask and answer if you know how to read through other people’s code.

It can help you gain credibility if you have a hostile or indifferent developer group. If you can speak their language and report bugs to them in their terms, it can help cut down the ‘you’re just a tester‘ schtick. If you’re pairing with a programmer, you can code while they drive and you can suggest unit tests that can help out along the way.

You can look through the unit tests that already exist and understand exactly what they’re doing and what they’re checking. It might save you a lot of time checking something that’s already covered and vice versa, you can see the difference in what your programmers mean when they say ‘yeah we’re already checking that’ as opposed to what you mean by checked.

There are places where these skills will be in demand and some where they won’t. I know of some companies that do not hire testers without coding skills and there are plenty that make the STE and SDET distinction. The hiring thing I can understand if the team is small, but the STE/SDET thing I think is a bridge too far. You aren’t a failure as a tester if you can’t cut code. Some of the Rat Pack are coders, some are not. I happen to think they’re all brilliant testers. Being able to code is one small facet of the precious stone that is your testing repertoire. Not having it doesn’t necessarily devalue you, but being able to code can make the other facets of your testing stone shine more brightly.

If you’re a tester who has no experience coding, but is open to learning, my recommendation would be to pick up a copy of ‘Everyday Scripting with Ruby (for Teams, Testers and You)’ by Brian Marick. It starts out very simply (not quite ‘here is the on switch’, but close) and has a flow that makes it very approachable.

EDIT: Here are a few other  posts on the subject.

Elisabeth Hendrickson
Adam Knight
Lanette Creamer
Sauce Labs

http://blogs.msdn.com/b/imtesty/archive/2008/01/28/do-testers-need-programming-skills.aspx

Comments (10)

Thanks for linking to my article.

I once asked Michael Bolton whether “anyone can test”. He answered me by asking if “anyone can drive”.

The analogy is great when speaking about testing education and practice. And although analogies are not allways ‘portable’, it fits here as well.

Anyone can drive, and his professional skills can be high even without knowing car mechanics.
But knowing how his tool works from inside can help a big deal, due to the reasons written in your post above and mine. OTOH, if a race car driver feels like practicing driving or training to control his fear and stess give him more benefits than learning about clutches and motors, then he may be better off practicing.

The problem in the question about testing requiring programming skills is in the word “requiring”.

Shmuel

nooooooo anyone can NOT drive. Just because you have a driving license does not mean you CAN drive. It takes skills and practice. If that really is the belief of Michael B i invite Michael to challenge me on this if you do not agree. I offer this scenario what if you are blind? Would you still consider you to be able to drive. Well you could say if i had someone else to be my eyes and instruct me i could drive, but then are YOU really driving or is it cooperation? Can you take all the credit for this? Look at the WRC rally where you have a co-driver who reads the map and give the man by the steering wheels directions. Who is the driver in this scenario?

To be honest guys, I think the driver / mechanic analogy in relation to testing/coding skill is a little bit strained to start with – probably because it’s oversimplified. I like using analogies as much as anyone, but they need to serve your purpose.

Can anyone drive (with or without knowledge of how a vehicle is put together or how it operates)

Well, it depends.

Drive what?
A dune buggy? A prime mover? An M1 Abrams?

Drive with a minimum level of competence? Safely? Defensively? Aggressively?

Drive in order to do what?
Test the vehicle’s aerodynamics? See what it takes to make the engine explode? Conserve fuel for the longest possible time? Not kill anyone? Get from A to B?

So let me pull it back to being about testers and coding.
I firmly believe that having a working knowledge of programming and programming concepts makes you a better software tester.

You don’t always need these skills, but they’re handy to have and sometimes not having them can be a hindrance (even if you don’t realize it at the time).

If novice testers ask me for advice about what they should be studying in order to get better at testing, I give them varied answers based on what their current skill set is, but if they can’t code I recommend they start.
I don’t think you need to make it any more complicated than that.

Peter, Really!
to a novice tester your first suggestion would be to learn how to code!
Not to practice fundamental testing skills like oracles, identifying stakeholders, describing, framing, tactics and heuristics before coding?

Nice shootin’, Tex.
Not the first thing, but one of the things I suggest.
This is my third or fourth post here. I believe my first couple were on fundamentals other than coding skills :P

Hi.

This article also make me decide to learn a program launguage at least enogh to understand how it works.

Anyway, I want to translate this article into korean and introduce through my own and S/W test team blog.

May I get your permission about this?
I believe that this article should be a useful advice for the testers who are worried if they need to be a professional programmer to be a good tester in Korea.

I’m looking forward to your positive reply.
Thanks!

Jin, please go ahead and translate this into Korean. Nothing would make me happier.
Can you please post a trackback once you’re done?

(If anyone else wants to translate this into another language, please also go ahead (and let us know))

Hi.

I just completed translation and posting on my blog and my team blog.
Here’s a link.

http://angel927.tistory.com/97

Some people who visited my blog leave a message that they want to buy the book which you mentiond about. :)

Thanks for your favor!

No, not anyone can drive. I cannot. I hate it, I feel permanently at risk. I quit years ago. MBolton should learn to distinguish HIS VIEW of the world and THE world. It seems he can’t.

And yes please, some testers should learn programming. And then become programmers, because that’s what they are indeed. And quit testing.

You cannot create (code) and destroy (test). Sources? Yin and Yang; (+) and (-) in electricity; gimme an example of a good striker in soccer who also was a good defender (doesn’t exist). etc etc You have to choose.

Companies looking for testers with programming skills don’t really know/care/believe in Testing. It’s the typical situation where Project Manager is an ex-programmer. If you are a tester, I suggest avoid applying to those jobs. All you will be doing there is Unit testing (the only test developers accept, and only when customers are about to sue them for their bad product). So you will not see Test Plan, Test Strategy, respect for the Test role, etc

“We neeed testers. Programming skills essential” = “We are programmers and we need a scapegoat to cover our ass”

Regards
Jose

Thanks for dropping in to comment, Jose. Those seem to be some passionate views you have there. I disagree with the vast majority of them.

You say ‘MBolton should learn to distinguish HIS VIEW of the world and THE world. It seems he can’t.’ I don’t want to put words in anyone’s mouth, but I get the sense that Michael’s comments tend to agree with what you’re saying, in that no, not everyone can drive.

I have to pull you up on your next paragraph as well. When you say ‘some testers should learn programming, then become programmers and quit testing, who do you mean, specifically? I have a computer science degree and several years experience coding. I like testing better. Should I quit being a tester?

I have to say I find your create/destroy (etc) analogies dissimilar to testing and coding. I think they’re naieve and not helpful in making useful distinction between testing and programming.
In my experience testing is not about destruction. It’s about collaborative creation. If we are destroying anything, I’d say it would be illusions about the product. I think your other examples are equally guilty of being a poor fit to the subject matter. Your soccer reference compares specialist positions with testing as a whole and coding as a whole. That’s pretty unfair, don’t you think? There are many kinds of testing and many kinds of coding. Some of them require overlap. I could just as easily say ‘show me a world class load testing specialist who is equally good at session-based test management and hold that up as a reason why load testers shouldn’t do SBTM, but that would be an equally meaningless comparison. There are people who are good at both of these things and can apply them where needed. They may not have the deep knowledge of a specialist, but if they can do an adequate job, how is it you can dismiss their ability out of hand?

I disagree with you. You do not necessarily have to choose between testing and coding. There are roles for a jack-of-all-trades just as there are roles for specialists. It depends on what the situation requires.

‘Companies looking for testers with programming skills don’t really know/care/believe in Testing…’
That’s one possible explanation. What are some others? I’m sure there are *some* companies out there who look exclusively for testers who program and I would agree that by not hiring other kinds of testers they are potentially losing out on a wealth of other experience they might otherwise benefit from. You seem to be going to the other extreme though and with a broad blanket statement, are lumping anyone looking for a tester that can code into the same basket.

I like that you have passion Jose, but I think your experiences are deeploy coloring your opinions and your reactions seem extreme. My experience is quite a bit different from yours and so my viewpoint is different. I want to suggest that you keep an open mind.

Write a comment