Testing is a subject very dear to my heart and, whilst I can see that XP offers a fascinating programming ethos there seems - IMHO - to be a large gap in the thinking of the role of testing. I agree with Kent Schnaith (another Kent?) when he says that "There seems to be some confusion about the roles of QA and of testing. These are two very different things.". True. Generally testing is ensuring the system is being written right, whereas QA is about ensuring that the right system is being written. I will attempt to restrict myself to testing issues, but unfortunately the scope of my use of the term 'testing' creeps into the QA arena.
To make unit testing an integral part of the development process is a massive leap of quality in the right direction. But it is not enough. To polarise it into unit (techie) and functional (user) testing is to misunderstand the very real contribution that can be made by testers and testing throughout the development process.
Jen Wu said: "Some background ... a sophisticated QA team will do most if not all of the following (among other things):
David Brady put it well when he said "If you have a good QA team, it's easy to get lazy and write lots of hopey code, because if it doesn't work, QA should catch it. In a better world - one I believe *can* exist, but so far haven't seen, and therefore am trying to create - the developers write the Quality, and the (good) QA team does the Assurance." XP offers the prize of quality code being generated first time by developers rather than the traditional 'sling it over to the test guys' approach that has fundamentally crippled so many projects. Testers can then ensure that the product will be more acceptable to the users/customers by feeding back user-related concerns before the user/customer gets sight of the application.
I also agree with Malte Kroeger when he says that "... what I think is most important about a QA-Team is, that it stays in very close contact with the development team." In a way I see pair programming as an implicit form of 'testing' in itself, but independent testers seeking to produce quality black box tests will often ask the question of the system design that the designers and developers hadn't thought of. So they are independent but working very closely with the developers. As Malte continued, "QA-Team members often know much better what to test. What problems usually occur. How the tests should look like to find the most likely bugs". We bring a wealth of experience, use of tools, and an enthusiasm for testing that can only positively impact on any project.
Before everyone throws their hands up and shriek 'what about the cost?!', the case has been made that pair programming improves quality and drives down overall costs, professional QA/testing has a much longer track record in the industry of doing likewise. Imagine the impact and power of properly implementing both!
ColinDavidMiller Senior Test Specialist (One of those with the particular demonic twist of mind required to destroy all your happy little programs ...)
If TestFirstDesign produces an order of magnitude fewer defects (an hypothesis someone should test), then the value of many of the activities recommended above drop dramatically.
Because TestFirstDesign and the activities I recommended above are not mutually inclusive. Testing a unit of code does not necessarily test whether the user story is correct in the first place (and does not contradict other stories), does not necessarily verify that the HCI is usuable to the business, that the business process is correct (writing the system right versus writing the right system) or prove the application's performance under any kind of loads. Unit tests do not reflect user story functional coverage or offer any kind of independent review of the code written.
I would argue that the value of these activities are assured whether unit testing happens or not - hopefully their role should be to verify what a wonderful team of XPers you have ... but then again (cdm)
XP doesn't reduce the value of QA as much as change it. Without XP, QA can get overloaded with basic testing duties -- validating that a build works. XP allows the QA people to do more in-depth testing: load tests, hardware compatibility tests, etc. They can also look at quality issues such as ease-of-use. This makes sense because XP is an automation technology; and these typically free people from repetitive tasks. Bank clerks no longer have to worry about doing arithmetic on deposit slips and can focus on serving the customer. --IanRae