The developer, the project manager, and the tester. On most of the projects I’ve worked on, this is the dynamic. Sometimes there is more than one developer; sometimes the project manager is also the developer, or one of the developers. Larger projects might also include a requirements analyst or manager, a technical writer, and an interface designer. But on all but the very largest projects there’s usually only one tester (that’s me!). And on most of the projects that I’ve worked on in the last few years, which tend to be smaller and more agile, it’s just the unholy threesome: developer(s), project manager, tester.
It’s interesting how the different personalities of these roles take shape and present themselves. Since I can only speak to my own experiences, I am the constant in my observations and anecdotes. I have a certain philosophy of testing and it rarely varies, though it has certainly grown and changed subtley over the years. What’s surprising is that despite having worked with many different individuals, a lot of them seem to share a world view when it comes to software projects, based on what roles they fulfill.
The Project Manager: Some are good, some are bad. The best are organized, and aware of the importance of a schedule (which can be flexible) and project milestones. Occasionally you get a really awful one who is completely unwilling to commit to a schedule, work breakdown, milestones, or anything like that. In terms of their attitudes towards testing, a lot of project managers seem to consider only testing against the requirements, or verifying the basic functionality of a system. The concept of negative testing (attempting to create error conditions, less-than-perfect environments, unexpected user behavior, user error) seems novel to them.
The Developer: A study in contrasts. On one hand, most developers are very good at thinking of negative tests, and give suggestions for possible negative test cases (some useful, some completely labrynthine and over-the-top). What often surprises me about developers is, they’re so good at thinking of negative tests for ME to run, but so bad at putting error handling into their own code. I guarantee you, you can almost always trip up even the best developer with the simple trick of testing field constraints. Enter 1,000 characters into a username field that’s probably limited in the database to 15 or so, and watch the application puke. Fun!
The Tester (yours truly): I have to do both – test to requirements and verify functionality, but also test negative conditions and check for error handling and try to break the darn thing to see what happens. I have to point out the bugs in a polite and supportive way, so nobody’s feelings are hurt. I have to nudge the project manager to put together the schedule, or at least commit to some informal milestones, then keep track of them myself. Sometimes I have to beg for more hours.
Once, a project manager asked me to create test documentation for a system, and then test it, using only the assumed correct use case scenario. That is – assume a perfect environment as specified, a perfectly-trained user, and no error conditions, hardware failures, quirks or abnormalities. To me, that kind of testing is completely useless! What does it prove? It proves that in a perfect world, your software functions exactly as described. But there is no perfect world! We all know this, yes? Heck, in a perfect world, all code would be bug-free and all systems would be perfectly designed and built, and I’d be out of a job completely!
So until that perfect world comes about (and pigs fly, and hell freezes over, and I vote Republican, etc., etc.), I keep doing both kinds of testing, and fulfilling my role in the unholy threesome.