After the results of a previous poll focused on functional testing automation, I wondered if there was still a great divide between the worlds of development and functional testing. So I did this follow-up question to check who was performing the functional testing.
This poll was trying to determine who perform functional testing in IT department? Here are the answers:
|Nobody: functional testing is done by end-users||11.0%|
Ending date: March 2010
Source: Methods & Tools Software Development Magazine
As you can see, in close to 50% of the cases, developers are not involved in functional testing. Trying to find the causes of this situation, I asked for explanations in various testing and agile groups on LinkedIn. Two explanations came out:
Developers do not master functional testing tools. These are specialized tools that use mostly proprietary scripting languages, even if some new tools like the WatX family use the same programming language to create tests. Then validation needs to be independent from development. Following this rule, people said that the role of analyst and functional tester can be mixed in software development projects, but you cannot ask a developer to test its own work. This opinion has been expressed both in software testing and in agile focused groups.
This situation is also representative of the mistrust relationships that often exists between development and testing teams in software development organizations and apparently Agile hasn’t’ changed it. If few people will deny the fact that the customer is the ultimate judge to validate an application, QA people often describes developers as careless people that are unable to challenge their own work and developers see QA people as disconnected from the project reality and slowing the delivery of applications to users. Having worked in large software organizations, I have sadly witnessed the truth of both cases: developers that don’t test enough their work and QA people that don’t know the domain of the application or built process that could be nice looking in theory, but practically not adding value to the software delivery.
I strongly favor the case when developers take the full responsibility from understanding the requirements to deliver the application to the user. The more specialization you involved in the process, the more information you loose when you try to transmit it. Understanding the requirements allow the developer to take the full responsibility of its code. If it cannot be trusted for functional testing, then it should be the same for unit testing… and then it should just not be trusted as a developer. I understand that this vision could sound a little bit utopian due to the reality of human behavior, but to me it is not more idealistic than thinking that users can give you the right requirements and have enough time and knowledge to validate the delivered application.