I state no “MUST”s in here, you don’t “HAVE” to know how to program to work effectively as a tester but…when you do know how to program, then you have more options. How many more? Well…
“Reasons to be cheerful - one, two, three…”
Reasons why I have found it useful to have programming knowledge:
- Speak to the developers in their own language – build relationships with the development team
- Different languages have their own problems and idioms – useful to know these
- Different languages have to make different physical decisions when implementing logical designs
- Implement custom test tool utilities – metric collating, defect management, data generation
- Use existing test tool APIs and customise your test tools e.g. mercury open test architecture, TPlan API
- Automate your test process
- Identify new tools that you can use to help you
- Build the application from the version control system directly
- Learn the database schema without extensive documentation
- Reuse development code to construct test tools
- Get free tools working – Java & Perl
- Regular Expressions - use and read
- Understand the design process and artifacts (OO, UML)
- You know what the developers mean when they say: Refactoring, polymorphism, mock objects, …
- Compile in Debug Mode to make applications testable
Early in my career, I busied myself learning how to test and I worked on some projects where I didn’t know the programming language in use (IBM System 360 ASM anyone?). That meant that I had fewer options in how I could approach my testing and my dealings with the development team, and sometimes I could not even understand the problems they discussed. I decided never to stay in that situation for the duration of the project again.
“Do Testing Early” – “More Unit Testing” – Can you really promote automated unit testing if YOU don’t know how to do it? What tools can you use? Why should the developers listen to your advice on coding if you can’t code?
How easily can you make the system testable? Could you help make it testable, or do the development team need to do all the work?
Can you easily add logging in the current development language without interfering with the code? Do you know?
I cannot claim “greatness” as a programmer, but I do learn the language for the projects that I work on - even just a little. I use the fact that I want to learn the language to strengthen my relationship with the development team by asking them for help with my learning process.
Now. I find it interesting that I wrote the above text 4 years ago. And in that time I’ve worked on Agile projects, paired with developers, learned TDD, created mock objects to aid in Unit Testing. I did a lot of this through book learning and experimentation. Fortunately I have worked with developers kind enough to explain things to me, recommend books, and point out what web-sites and blogs they read.
I appreciate that a lot of people don’t want to do this. But I feel the need to reiterate - when you do, you increase the options available to you and increase your own personal flexibility.
I highly recommend every tester learns how to program in the language used to develop the system under test.
At least a little bit. Just a little bit? A teeny bit, just a teeny weeny bit?
Yes, yes, dear, dear, perhaps next year
Or maybe even never
In which case …..
Reasons to be Cheerful (Part 3)
by Dury, Payne and Jankel