Recentemente, fiz uma pergunta sobre testes no desenvolvimento de jogos - é assim que eu sabia sobre esse. As respostas apontaram algumas desvantagens curiosas e específicas:
- É caro fazer isso quando seu código deve ser altamente acoplado .
- É difícil fazer isso quando você precisa conhecer as várias plataformas de hardware, quando você deve analisar a saída para o usuário e o resultado do código só faz sentido em um contexto mais amplo .
- Teste de interface do usuário e UX é muito difícil .
- E, notavelmente, os testes automatizados podem ser mais caros e menos eficazes do que vários testadores beta de baixo custo (ou gratuitos) .
O quarto ponto me faz lembrar de alguma experiência minha. Trabalhei em uma empresa gerenciada pelo Scrum, enxuta e orientada para XP, onde os testes de unidade eram altamente recomendados. No entanto, em seu caminho para um estilo mais enxuto e menos burocrático, a empresa negligenciou a construção de uma equipe de controle de qualidade - não tínhamos testadores. Com tanta frequência, os clientes encontraram bugs triviais usando alguns sistemas, mesmo com cobertura de teste> 95%. Então, eu acrescentaria outro ponto:
- Testes automatizados podem fazer você sentir que o controle de qualidade e o teste não são importantes.
Além disso, eu estava pensando naqueles dias sobre documentação e cogitei uma hipótese que pode ser válida (em menor grau) para os testes dois. Eu apenas senti que o código evolui tão rapidamente que é muito difícil criar uma documentação que siga essa velocidade, por isso é mais valioso gastar tempo tornando o código legível do que escrever uma documentação pesada e facilmente desatualizada. (Obviamente, isso não se aplica às APIs, mas apenas à implementação interna.) O teste sofre um pouco com o mesmo problema: pode ser muito lento para escrever quando comparado com o código testado. OTOH, é um problema menor porque os testes avisam que estão desatualizados, enquanto sua documentação permanecerá silenciosa enquanto você não a reler com muito, muito cuidado .
Finalmente, um problema que às vezes encontro: o teste automatizado pode depender de ferramentas, e essas ferramentas podem ser mal escritas. Comecei um projeto usando o XUL há algum tempo e, cara, isso é doloroso para escrever testes de unidade para essa plataforma. Iniciei outro aplicativo usando Objective-C, Cocoa e Xcode 3 e o modelo de teste nele era basicamente um monte de soluções alternativas.
Tenho outras experiências sobre as desvantagens do teste automatizado, mas a maioria delas está listada em outras respostas. No entanto, sou um defensor veemente dos testes automatizados. Isso economizou muito trabalho e dor de cabeça e eu sempre o recomendo por padrão. Eu acho que essas desvantagens são apenas meros detalhes quando comparados aos benefícios dos testes automatizados. (É importante sempre proclamar sua fé depois de comentar as heresias para evitar o auto da fé.)