Let Observation Be Your Crystal Ball - Good at finding the weakest link in code?
By: Bret Pettichord
Summary: Are you a tester who is particularly good at finding ďthe weakest linkĒ in code? Are you a developer who has been impressed with a testerís uncanny ability to hone in on weak code? This skill is probably more a matter of organizational understanding and observation than intuition. In this column, Bret Pettichord explains how to use communication factors to predict problem areas in code (and how to avoid letting those same observations draw you into unwanted territory).
Many successful testers use their psychological and sociological perceptions to guide their testing. Developers are often amazed by these peopleís ability to hone in on weak code and quickly uncover clusters of bugs. How do they do this? In awe of this ability, they attribute it to "intuition"óas if the master testers have bug radar or something. But they donít. They just look at things from a different perspective.
Understanding How People Work (Together)
Software is created by humans, usually by groups of humans. And the strengths and weaknesses of these humans often show up in the code they produce. Most developers understand code by reading it. But this can be a daunting task, and many are not able to understand more than a part of the code for their project. They know what theyíve written and parts of what they have to work with. And the rest is a mystery.
Testers must understand something about how large software systems will workóor fail. Understanding the organization that built and assembled the software is often key. A lot can be learned by talking to the developers and observing how they communicate.
Are there some developers who donít really understand how the code they are developing will be used? Are some developers habitually behind in their schedules? Is code that needs to work closely together being developed by two different organizations? Is development dispersed across multiple physical locations? Are the design documents for some modules confusing or missing? Are different teams in dispute regarding technology or methodology choices?
These questions lead you to identify where buggy code may lie. It can simply boil down to a matter of communication. Developers who talk to each other daily are more likely to understand each otherís code (and the big picture) better than those who only see each other at weekly meetings.
I have a colleague who suggests that you simply need to measure the physical distance between the developers whose code must interact. The greater the distance, the greater the likelihood of interaction bugs. (Iíd love to see a researcher actually test this hypothesis.)
Remember the Mars Orbiter that crashed because of a mix-up over measurement? One team in Colorado calculated thrust data in pounds, but a team in California interpreted it as being in Newtons (the metric unit of thrust). I really donít know how that snafu came about, but Iíd be very surprised to learn that the two teams had good or frequent communication.
Knowing Your Limits
(But behind this technique lies a trapÖ)
Once youíve gotten into the habit of noticing organizational problems and predicting their effects on the software, itís natural to want to get to the root of many potential defects by fixing the organizational problems.
If certain people arenít talking, schedule them to attend reviews of each otherís code. If design documents are lacking, require them to be updated. If separate teams need to write code that works together, make them sit together and report to the same manager.
These are all good ideas, but the trap lies in thinking that itís your place, as a tester, to tackle these issues. There are two problems with this.
1. Testing well requires that you have access to design documents, development meetings, and interviews with developers. It can be hard to win the trust necessary for this access. Pointing fingers will lead you to losing this access. This is why it is so important to write defect reports in a neutral, nonblaming tone.
2. The developers may be amazed at your intuition, but the managers probably already know about the problems. Personnel and communication problems are not always easy to fix. Indeed, pointing them out for public attention often makes them harder to fix. This is the trap: The response you get from some might be to conclude that you are the problem.
If you are truly savvy at noticing the correlations between people, the organization, and the resulting software, and you really want to try to fix these problems up front, then you need to get into management. Iíve known plenty of software testers who were able to build careers as project or development managers from their start in testing. If thatís not for you, then stick to finding and reporting the bugs, and use your organizational observations to help you do the job. Your crystal ball can be a big helpóif you use it wisely.
... to read more articles, visit http://sqa.fyicenter.com/art/