测试工程师是否需要懂开发

.!.

这是测试界的一个永恒的话题:测试工程师是否需要懂开发(或者叫会编码)

文中论述的十分充分,最后的结论是 it depends,我在很大程度上十分同意文中的观点。我的观点是“测试工程师不一定要懂开发,但是懂开发可能对你的测试职业发展有很大的帮助”

原文地址

Am I a Tester or a Programmer? Who am I?

Abhijit Navindgikar: “I am having one question regarding software testing. Currently I am working as a software tester. I am having 3 years of experience in manual testing and having the basic knowledge of C/C++. Is it necessary for me to learn new technologies like C# .NET for future prospects in testing? Is it necessary for the tester to have the programming skills also? (Till know I didn’t feel that tester need to know the programming but let me know your views). Also will it be possible for a black box tester to shift his career to white box testing? If yes what steps need to follow to start the same?”

Lakshmi: “Recently I was browsing some of the testing sites and came to know that “No knowledge on programming language is a hindrance to a tester’s career”. Is that correct? Really, programming language knowledge is that much necessary for a tester? I am not able to digest this. Please help me.”

John: “My test manager feels that all testers must have decent programming skills. He is so much obsessed with his belief that I fear he may go ahead and fire testers who are not so good in programming (even though they are quite good at testing). Is there a way to change his mindset without hurting his ego?”

These are excerpts of few emails from my inbox. These are kind of questions that always have made me to think. Every time I think on these questions, some more questions start popping up in my mind. Questions like:

1. Knowledge of programming and effectiveness of a tester – is there a connection?

2. Can a good programmer make a good tester?

3. Can a bad programmer make a good tester?

4. Can a non-programmer make a good tester?

5. Can I think of contexts when knowledge of programming can enhance my testing?

6. Can I think of contexts when knowledge of programming can hamper my testing?


7. Can I think of contexts when ignorance of programming can enhance my testing?

8. Can I think of contexts when ignorance of programming can hamper my testing?

9. The list of questions continues…

I have seen quite a lot of such “Do testers need programming knowledge” kind of debates, especially since Microsoft started distinguishing its testers as Software Test Engineers (STE) and Software Design Engineers in Test (SDET)! And this debate gathered momentum as Microsoft started shifting weightage from STEs to SDETs while hiring (and firing) test engineers! However, I am not going to extend the STE Vs. SDET debate in this particular post of mine. Rather I will try to focus on the need of programming knowledge for a tester.

To me the single sentence answer for the question “Do I need programming skills to excel as a tester” can be – “It depends”. It depends on your particular context, the type and complexity of the AUT [Application Under Test] and more importantly your testing mission. Blindly hiring testers who can code may prove to be a bad idea, especially if you are neglecting your testing mission while taking such a biased decision!

Having said that, there can be contexts where a tester who can code, can be an asset for the test project. Think of scenarios where testers need to automate GUI tests. Even if the tester might be using some so-called record-and-playback kind of tool (WinRunner, QTP, IBM Rational Robot blah blah…), knowledge of programming, can be an added advantage. That can allow a tester to tweak his tests at script level to make them more powerful and flexible! e.g. The tester need not re-record his tests each time a object name for a recorded test object is changed (may be due to recent code refactoring). He can simply go and change that particular object name from the script. As Danny Faught talks in this interview, “Test automation requires programming skills. Plain and simple, no way around it. No tool can get around that.”

In cases where the organization (or the client) can not afford acquiring license for costly automation tools, the programming skill (in most cases knowledge in some scripting languages like Perl, Python, Ruby, JavaScript and markup languages like XML, XSLT) can help the tester in setting up a home-grown test driver framework to cut down the license cost of Commercial tools and at the same time can result in a customized tool that fits better for your testing requirement. Forget about test automation, testers with programming skills may detect defects earlier in development cycle and may also be able to pin point the cause for the defect (provided that the tester is aware of the underlying code and the system architecture). This may also help the tester in finding other areas in code where there can be similar errors. A tester who has a development background can also participate in code reviews, can debug problems, perform unit testing and identify patterns in the code that are error prone. If you are a tester, knowledge in programming can sometimes earn you greater credibility among the programmers.

But does this mean a tester without coding skills is useless? Of course not! To say Manual Testing (Sapient Testing, the James Bach way) is losing its value, in my opinion, is too early to jump into any conclusion. With user’s expectations increasingly higher, it would be foolish to lower its value. How many testers do unit testing in this agile era of software development (where the programmer has to write unit tests for his own code snippet)? A good tester is a good tester for his ability to test, not for his ability to code! After all, a tester gets paid to test, not to code. Although coding background can help in certain contexts to test better, that should not be over-generalized! Test automation can never replace manual testing. I think, the same can be safely said about programming skills of a tester. A tester with coding skills can not replace a tester without coding skills. If asked to test an application, both of them will find different sets of defects. Think of user experience/interface related defects for example. Or for that matter, think of scenarios where you don’t have enough time to test. Would you sit down to do code review and perform a cause and effect analysis using your programming skills or would you rather exploratory test it right away?

If I were a test manager, I would rather hire testers both with and without coding skills. Testing is all about flexibility! Each and every member of the testing team can’t be expected to have equal skill sets and equal areas of expertise. Testing as a craft is evolving into different specializations and it must be understood that each kind has its own importance. So it always helps to have a testing team comprising of a variety of skill sets. Testers with different specializations (with or without coding knowledge) are not mutually exclusive rather they should compliment each other. What do you think?

Happy Testing…

This entry was posted in 软件测试 and tagged . Bookmark the permalink.

One Response to 测试工程师是否需要懂开发

  1. bubill says:

    完全同意!

Leave a Reply

Your email address will not be published. Required fields are marked *