|
July / August 2004 Feature Article
|
|
How to Win Friends and Influence Developers
I have this view of a battlefield; where testers assail the bastions of the much beset developers. Unrealistic, you say? Aren't developers and testers at war? Are we not attacking the developers' code with our barrage of tests and expecting that they will admit our supremacy when their code is breached rendering their position (to our mind) indefensible? Does this describe your project? Worse still, does it describe your personal attitude toward developers? It should not be a battlefield we envisage, but an alliance; where testers and developers rely on the others' strengths to counter their weaknesses and thus achieve a common goal. Out of my research and experience I offer a few words on how testers can start to ally with developers - this involves changing how some of us view developers. Developers are people. You may be thinking, duh?!? But some out there may believe that developers share certain characteristics with the machines they program; this should not be your view. Developers take pride in their work (consider the way a lot of developers hide "Easter eggs" in their programs containing developer "credits"), as do you? Tact is important here, as is appreciation. When developers achieve the "impossible", give them their due. When their "baby" throws up or worse, develops a deformity, choose your words with care, for it IS their baby. Do not be facetious, do not use irony, be direct and non-condemnatory. Get to know the developers as the people they are. This will help to build the alliance. Getting to know the developer and how he thinks can also give you new insight into your testing.
Next, remember that developers quite often believe that their work is adequately self-tested; as such they may resent
the independent tester. Your role is that of bug advocate: bring your point across in a way that clarifies to every
audience the justification behind it. You do not need to be forceful or domineering to be assertive. Bringing your
point across by becoming forceful often causes people (developers) to dig their heels in and defend their viewpoint
- even if it defies logic. Therefore, avoid being dogmatic on issues raised. As testers we are just as prone to believing that our work is adequate and does not need to be checked. Consequently, testers often show exactly the same resistance to having their work checked and criticised as do developers. A practical point in case, a dedicated tester I know wrote: 'after I had my very first "test pack" reviewed by the project team and received a barrage of suggested changes, I took it so to heart that I rewrote the document from scratch'. Think, how would you feel if your work was under the microscope? The authors of Lessons Learned in Software Testing (Cem Kaner, James Bach, Bret Pettichord; Wiley, 2002) indicate that once you have developed "production code" and run the gamut of tester's, user's and other developers' criticism, condemnation and praise (probably in that order) you will have learnt how to understand and interact with developers. (Coincidentally, their book is a good reference.) I found that empathising with developers and their frustrations automatically builds a sense of tact into our behaviour. Be constructive in your criticism. Yes, you are a critic; and much like any movie critic, you're a paid critic. But unlike many movie critics you are not paid for sharp, oft nasty, wit at the expense of the developer. Snide comments have no role in your job. Describe what you found, where you found it, when you found it, how you found it, how often you found it, how you repeated the find (and you'd better try, record-ably, to repeat it), why it is a problem (be specific, don't just say "it doesn't work") and what is your, arguably perceived, rating of the problem's severity. If you respect the developers' valuable time by giving them concise, accurate, yet descriptive bug reports, you will probably find that the developers will pay more attention to your work. Above all, avoid emotion, stick to the facts. Also, on being a paid critic, you are not being paid to root out developers' bug creation rates, or to identify questionably dud developers to management. The current build is your focus, not its creators. You would be dismayed if your boss were to use defect metrics to gauge your performance, would you not? Likewise, avoid the temptation to use them against the developers. Your mandate is only to provide accurate, objective feedback on the quality of the build under test. You need to stick to your mandate if you are to win the trust and good-will of the developers. This mutual trust and respect will also propagate and migrate to the rest of the project team. Developers are creative; they may not know one end of a brush from the other, but they can create code. They see a requirement and supply the code to make that requirement happen. As artists their interpretation of the requirement may differ from yours (or anyone else's for that matter), do your best to see it from their point of view before you jump in and tell them they've got it all wrong. Appreciate that lurking in them may be the inimical artist's temperament.
If you are involved from the start of the project, helping to clarify ambiguities in the requirements will typically
make the project less the developers' impressions of the project and more what the client had in mind. Developers are thoroughly grounded in the technology they are using. They know the development environment and technology inside out; this is part of their job. Testers are normally out of their depth here and should not try to tell the developer how he should do his job; lesson? don't try to figure out what caused a problem (unless, of course, you too are expert in the technology in use and it falls within your mandate), your job is simply to tell the developer what he needs to know to get his job done … do you see the difference? The first could get your bug report ignored, ridiculed and misdirect developer effort; the second has a good chance of getting the developer to improve the product, something you both want. A little bit of knowledge can do a lot of harm, or turn you into the unwitting court jester. When you don't understand something, admit it and ask the developers for more insight - you'll gain more respect this way than by faking it. Testers generally do not have the time to become fluent in any one area of technology, and often, ignorance is not bliss but part of the service offering as the typical user is quite often similarly (or even more so) unspecialised. |
Respect for the developer's technical skill and the willingness of the tester to learn from their expertise, can provide a cornerstone for a mutually beneficial relationship, providing a launching pad for a smooth testing effort. A willing and co-operative developer can provide many answers out of that "black box". Developers see a detailed picture. Developers have a picture in their mind of how their part of the product should work, and, being human, they have probably made assumptions on how their module will interact with others. Bear this in mind when you are testing; if the environment permits, talk to the developers about their work, what they visualised, and ask if there are any working notes or diagrams that will help you to help them make the product better. If developers' assumptions on how their specific module should interact with other modules produces errors, report those errors as bugs with (dare I repeat) concise, accurate, yet descriptive bug reports. Remember that developers want to make the product work, their unit tests focus on proving that it does. When you set out to find the ways and means to make it not work (which is within your mandate, after all) you will need to motivate why your bug should be investigated. An example of one such bug: In the days of National Service, an officer crashed a potential military system by doing something that the system's developers believed no-one using the system in practice would do. Part of the system required the operator to calculate three separate values from provided charts and enter these values into the relevant fields in the system. How did the officer crash the system? Simple. He did what he, cynical officer that he was, strongly believed any lazy Troep [slang for un-ranking soldier, in those days likely to be a conscript] not really wanting to be in the Armed Forces would do - he calculated one value and entered that value into each of the three fields. As the representative of the potential customer he had the right to demand that the developers cater for this, to their way of thinking, unlikely scenario. You would probably not have the same force of persuasion behind your reasons for fixing "your" bug. You are generally a customer advocate, but not one whose opinion is as important as the customers. Kaner et al, in Lessons Learned in Software Testing, suggest that if you feel that the bug that you have uncovered is imperative to fix, find compelling reasons for the developers to pay attention to it. [There is a whole chapter in Lessons Learned in Software Testing on how to write bug reports that get noticed. Read the book if you are serious about testing, these gentlemen have plenty of experience in the field, and their lessons are compelling ones.] Some thoughts on bug reports:
Some thoughts on collaboration early in the project:
Accept that you will not always be liked by developers in the product team. An alliance need not be built on mutual liking, after all it is not a marriage, but on mutual respect. Make sure, however that there is no reason for team members to find you unprofessional, creative and/or a dramatist. Earn developer respect, if not liking, through your work and attitude, and an alliance will have been forged. Natalie Stebbing * The answer: 57 is the octal value of the number 4710 or 578; in the hint 2F is the hexadecimal value of 47 otherwise written as 2F16 and 1011112 is its binary value (1 x 25 + 0 x 24 + 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20 = 32 + 8 + 4 + 2 + 1 = 47). 102 is the equivalent of 210 (i.e.1 x 21 + 0 x 20). Get the general idea? You might wonder why you would need the octal, hexadecimal or binary values of any "normal" (read decimal or base 10) number; well, you wouldn't, but developers would. References:
Many thanks to Rob Kerrich-Walker and John Stebbing, my reviewers, for their invaluable input into this article. |
<< May / June 2004 |
September / October 2004 >> |