Do Software Testers Need to Know how to Code?

Every now and then I’ll hear people argue either that software testers absolutely must know how to code, or that software testers absolutely do not need to know how to code. I believe the true fact of the matter is that it totally depends upon the situation. At Microsoft for example, virtually all testers must have some knowledge of coding. Microsoft produces all kinds of software including complex systems software. Testers must know how to code so that can understand and effectively test the systems software they’re working on as well as understand, modify, and write test automation which is the only practical way to test certain aspects of some types of systems software. On the other extreme you have pure manual testers who are testing a relatively simple (compared to systems software that is) application program of some sort. Do these kind of testers need to know how to code? Well, it depends. However, I can state this with pretty much 100% confidence: the more any tester knows about coding, they better he’ll be able to do his job, and the more career opportunities he’ll have. But here’s an opinion I have that many of my colleagues (whose opinions I respect a lot) do not agree with. I believe that, in general, knowledge of specific programming languages is (in a way that I’ll explain in a moment) actually more important for software testers than it is for software developers. My logic is that it is critically important for software developers to understand algorithms and problem solving. Sure, the programming language used is extremely important so that any algorithm can be implemented accurately and efficiently, but the underlying algorithms are in most (but certainly not all) cases more important than the choice of programming language used. Software testing is primarily an analysis activity so in many (but not all) situations software testers need to be able to understand the algorithms used in the software system they’re testing, but not necessarily create very complex algorithms themselves. By sort of a weird default this means that knowledge of different programming language features is more important for testers, so that can quickly implement test automation (and test cases) that test the software system they’re working on as thoroughly as possible. Now I’m not saying that this algorithms vs. languages importance idea is a Boolean thing; I’m merely suggesting that all software testers can do their jobs better and expand their career opportunities by learning how to program better and by learning multiple programming languages.
This entry was posted in Software Test Automation. Bookmark the permalink.

3 Responses to Do Software Testers Need to Know how to Code?

  1. Conan says:

    I totally agree that the more test knows about coding the better. They need to know a whole lot more too, like understanding archetecture priciples and how to analyze the whole system from both technical and business angels. Testers need to know about usablity issues and how to spot clunky and arcane code & functionality.
    I\’ve seen how testers microfocusing on a single area verifies that any one peice works find, but when put together the system / product doesnt work.  End to end testing is one way to attack this problem. In this case the tester will need to know black box, white box, and all the other test methods.
    Your blog, my comments are just the beginning. The devil is in the details, and the software development proces has lots of them. I would expand the arguement to the more testers know about Software Engineering the better, and include that it helps to be a great diplomat that can handle a lots of undiplomatic behavior once the first bug is filed against the sacrad code base … which leads back to your article about testing being a low prestige trade. You really need to know how to identify BS and stand your ground.
    An interesting twist on your argument is the difference between knowing a lot about coding and being a good coder. I think devs need to be really good, quick coders, testers need to know a lot about coding. What do you think, is there an interesting debate here?

  2. James says:

    Your comments are right in line with other comments I\’ve been hearing from engineers who work at Microsoft — one of the biggest changes at Microsoft over the past few years is that all engineers (dev, test, PM, etc) must increasingly deal with larger and larger systems. This fact, combined with the fact that new languages, technologies, and paradigms are being created all the time, means that you must constaly be learning. And this includes learning more about coding — both depth and breadth.

  3. Conan says:

    Your comment touches one of the core aspects of why a tester needs to be soo good (and also my favorite part of contracting at MS through Volt), the learning curve can be brutal and you never know what to expect. All the MS products, as you pointed out, are increasingly integrated and interdependent upon lots of other products (sharepoint, reporting services, the new office toolbar and command buttons, new OS services, etc). The build systems, test frameworks and processes are typically complex. Little things like knowing EXACTLY what branch(s) to test in is critical, and keeping track of the integration schedules helps too. 
    The bottom like is that your expected to know all of this already, consiquentially, you have to figure this all out on your own (think of it like intellectual rock climbing). The great part is, if you can make off the beach, you are quicky exposed to LOTs of technology, and work with lots of talented people, and a Barista is never far 🙂

Comments are closed.