Helping Testers to Improve Test Design
Programmers who understand good coding practices can help testers to set up a robust test automation suite that works for the whole team. I've seen test automation projects fail because the tests are poorly designed. They try to test too much, or the test authors haven't understood enough about the technology to keep the tests independent. Many times, the testers are the bottleneck, and working with the programmers on tasks like automation makes sense. Testers can work with developers to learn better ways to design automated tests.
Consider a tester who's new to automation. He tries to automate exactly like the manual script he's followed for years. There may be no separate setup or tear-down methods, and the test reads like the manual script. When it fails, someone then has to read the whole test to determine where it failed. When a piece of functionality changes (at login, for example), that test and every other related (login) test needs to change. Developers can help testers to understand the need for independent tests, and show them how to organize the tests to take advantage of object-oriented principles, so that sub-tests and tests that occur in more than one place can be encapsulated.
When developers and testers work together, we can streamline the process flow so that the testing team isn't waiting around, twiddling their thumbs while the programmers get the next batch of code ready. Programmers also can help testers by creating mock objects or test harnesses that enable testing to happen earlier. Programmers often want to finish off a whole chunk of code for a story or feature before they turn it over to the testers. Working with the testers to understand what can be tested early, perhaps with a simple tool, gives the programmers another cycle of feedback, which helps them to deliver better code in the long run.
I really enjoy being a tester on teams that follow good coding practices, the kind promoted by methodologies such as extreme programming. It makes my role fun; I can concentrate of finding integration and system-level issues rather than unit-level bugs (such as pages not loading). Good development practices help programmers to build quality into the codeand far too many programmers don't recognize how much they can do to make testing easier and more effective. Which, by the way, makes the development process a lot better for everyone.