Gunnar Kudrjavets

Paranoia is a virtue

Can't write code, shouldn't be testing the code either

When it comes to the software engineering then I have number of strong opinions. I wouldn’t call them radical but just different. One belief I have is that people who haven’t spent years developing software shouldn’t be testing the software either. Somehow it just doesn’t make sense and feel right - how can you tell if something is wrong if you never have gone through the pain of trying to do the right thing and therefore never understood the clear differentiation between working software and non-working one?

I’ve been referencing Edward Kit already in number of my posts. Here’s another quote (Chapter 13, page 164) from him:

There are many managers who unfortunately only see testing as a training ground for development, not a place to put their best developers. Too bad. I count myself among the managers who will not hire a person to do testing unless that person is qualified today to join the development group responsible for developing the same product that he or she would be testing.

Pretty strong words, but IMHO the correct ones. One of the basic observations in regards to this subject I made during last couple of years is that the more code you write (or have written) the better chances you have to accomplish something in software testing related positions. (Wow, I just reinvented the wheel!) Constantly reading and writing code assures that you’ll understand what this is all about. One of my recommendations to everyone has been that before testing anything at all the person should spend significant amount of time doing source code inspections and catching the first wave of bugs this way. Static source code analyzers have their limitations, buddy code reviews aren’t always as thorough as they could be (time constraints, pressure to get your own job done, natural tiredness at the end of the day), the development teams usually don't have time to spend days inspecting their code, and I feel pretty confident about arguing with anyone that the time initially spent on inspecting code gives order of magnitude more in return than just starting to hammer on the product. Catch with this is of course that it takes years of product development experience to acquire the skills of looking at the code and telling that something is wrong.

Development experience in the same application domain grows tester’s efficiency I would say again by order of magnitude. Most of the people who have gone through the entire product development cycle have learnt the hard way about how much it costs to find bugs earlier in the cycle vs. two days before shipping. Let's take a basic database application with the web interface for example. If you have done the database development yourself you know bunch of stuff about stored procedures, triggers, query optimization, indexing, transactions etc. and you can start thinking where the big problems might be. If you have done web development before then you'll know where the problems related to web-based solutions reside and so on. Yes, one can take a testing textbook and do all the classical stuff, come up with number of test cases, define equivalence classes, do a bit of performance testing, do a bit of usability testing, do a bit of security testing, do a bit of stress testing etc., but this will be IMHO just scratching the surface lightly. I would bet that in lots of root cause analysis reports when people look at why certain class of bugs hasn’t been found the answer is that nobody knew to look for them.

What am I saying here? That testing in its current form is inefficient and everyone else is wrong and I'm right? Definitely not, but I think thoughts described in this post are rather interesting subject to explore. Maybe someone could run a couple of experiments with the team consisting only of developers and divide them into two parts: coders and verifiers. One could make them periodically change roles and mix all this with a shot of Extreme Programming to look trendier and compare this to traditional software development organization developing the project with similar qualities. Or something like this.

P. S. Since I stopped drinking coffee, I have been writing these strange and provoking posts on software testing and quality assurance. I don’t know what will happen if I’ll also start having breakfast regularly ;-)

Posted: Jun 15 2004, 11:58 PM by gunnarku | with 8 comment(s)
Filed under:

Comments

Manish said:

I don't think its a really good idea. To me, the testers should resemble the real world users as much as possible. And those users are certainly not going to be programmers. They don't care whether you used Delphi or .NET, XP or CMM-5 methodologies. They would subject the software to all kinds of stupid things and thats what the testers should be testing.
# June 16, 2004 4:57 AM

dal said:

I agree with the sentiment but the practice I've seen is that testers aren't developers. Perhaps MSFT can afford to put their talent at testing software but few other companies can. For one thing, if someone is really good at writing software that's what they'd prefer to be doing, not writing scripts that drive someone else's software. The other is that recognition, awards, raises, etc. are usually given to the star developers, and testers are way down that food chain. From management's perspective, testing is a necessary evil that does not add features to the product, or is useful mainly as a way to train a young developer just out of school.

Perhaps I'm being too cynical this morning. I know how crucial testing is, and it's a joy when you can get someone who knows how to write code to do the testing, it's just that I see that the same practice that Edward Kit sees.



# June 16, 2004 5:13 AM

AT said:

Nice post.
I agree that testers must have strong coding skills.

But I do not agree with you that testing is not "training ground for development".
In case if you hire experienced developer to work on your new project - I prefer to not put him immediately into coding.
Novice (as for your project) developer must spend a bunch of time to read and understand specification, see real examples of your technology/codebase use, understand user-scenarios, check possible errors and fault he already know about from his prior experience.

All of this describe testers job. So initial position for developer joining your company can be a tester position.
Once developer will have deep understanding of your codebase you can allow him to start coding something other that "non-critical" automation tests. I mean non-critical because bugs in tests code will be detected early and mostly in-house.

IMHO, Tester vs. Developer jobs differ only in time percentage spend for core activities. Both of them must code and test. Otherwise there will be big gap of understanding.

P.S> While working in web-design there was long flame-wars between art-designers and programmers. Art people were unable to understand programmers job results, while programmer were unable to find anything good in pictures, videos art-designers create. Art vs. 0-1 people are different.
I would like Testers and Developers be able to understand each other.

That's why Testers <-> Developer mix will be okey.
You can "promote" tester to developer once he understand your project, but you also can "downgrade" your Developer to Tester once he start working on another feature or project.
No needs to abandon coding phase for developer in the middle. Developer must produce something usable once started.
# June 16, 2004 6:05 AM

Tim Roberts said:

We must not forget that there are many different classes of testing: unit testing, system testing, acceptance testing, etc.

Unit testing is obviously something that development is responsible for, most likely using a unit testing framework such as CPPUnit, NUnit or JUnit for example. It is also most likely that these tests will be run automatically as part of a build, and as such the results of which should be viewed only by developers.

Acceptance testing should not be conducted by developers. This class of testing should be conducted by the users with guidence from an independent testing authority (ideally also independent from the project).

The middle ground class of testing (i.e., system testing) is more fuzzy. It should be conducted by resources who are technically aware, have access to the source code and so. I look at these people more as integrators rather than developers. They will have excellent development backgrounds, but work at a focus that is more coarse-grained. As such, developers develop associated components, that work to well defined interfaces and architectural properties. Unit tests are carried out utilizing drivers and stubs for example. The integrators then integrate the components and conduct system tests. Finally, the entire system can be released for acceptance tests.
# June 16, 2004 8:16 AM

Gunnar Kudrjavets [MSFT] said:

Thanks, these are very fruitful comments. It's always good to get such a wide range of opinions.
# June 16, 2004 12:32 PM

jeffrey_palermo@dell.com (Jeffrey Palermo) said:

Personally, if my manager moved me to a testing position from development, I'd start looking for a new job. Our current test lead is most certainly NOT a deverloper, but she finds bugs we would have never dreamed of! She is a great tester because she is more like the users that our applications target. I think if our best developers were testers, then we wouldn't have our best developers.
# June 16, 2004 2:43 PM

Michael Russell said:

To be honest, the best test teams are a blend of people who know how to code and people who don't care about coding one way or another.

Back when I was at MGS Salt Lake, we had about a 1:3 split of code-savvy testers and "code-ignorant" testers. Both approached their areas with a different focus, and it worked well. For me, I'd look at a feature as a black box and say, "Now, how would I develop that feature?" and test it appropriately. After I found the bugs that I'd find that way, then I'd look at the source code and test further. The non-code-savvy would approach the features as, "Okay, how are the end users going to interact with this feature?"

As an aside, the best tester in the department, Chris Okelberry, didn't really know much about programming at all. He was an English major.
# June 16, 2004 4:56 PM

Don said:

I have to disagree. Good coders dont become good testers. The biggest challenge in s/w testing is to find people with a high dose of passion for the product. I have a couple of STE's and a couple of SDETs in my team. I'm satisfied with my code only when one STE who doesnt happen to do too much coding gives his thumbs-up. This is because I know this dude does his job with enthusiasm, passion and a degree of realworld thoroughness that most testers that I interact with lack.
# June 19, 2004 12:42 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)