Eu queria fazer essa pergunta, para ver quantas empresas estavam realmente praticando TDD.
Nos 11 anos que tenho programado profissionalmente, apenas as duas últimas organizações estavam cientes do TDD (que dura quase cinco anos, antes do que o TDD não era tão popular quanto hoje). Vou direto ao assunto e responder à sua pergunta antes de entrar no meu discurso de vendas para o TDD :)
Na última empresa em que trabalhei (editora acadêmica on-line de humanidades e coleções de ciências), sabíamos que precisávamos praticar TDD, mas nunca chegamos lá. Em nossa defesa, tínhamos uma base de código de 250k; portanto, adicionar testes a uma base de código não testável desse tamanho parecia insuperável (me sinto culpado ao digitar isso agora!). Até os melhores de nós cometem erros .
Qualquer um que tenha feito até mesmo uma pequena quantidade de TDD sabe como os testes de retromontagem dolorosos podem ser um código não testável em campo marrom ... As principais causas são dependências implícitas (você não pode usar todas as alavancas para garantir resultados do código - você não pode zombar cenários) e violação do princípio de responsabilidade única (os testes são complicados, inventados, exigem muita configuração e são difíceis de entender ).
Aumentamos temporariamente nossa equipe de controle de qualidade (de uma, talvez duas pessoas para meia dúzia ou mais) para testar a plataforma antes de qualquer lançamento. Foi extremamente caro em termos de tempo e financeiramente, alguns lançamentos levariam três meses para concluir o 'teste'. Mesmo assim, sabíamos que estávamos enviando problemas, eles simplesmente não eram 'bloqueadores' ou 'críticos', apenas 'de alta prioridade'.
Se você tiver uma experiência comercial de vários anos, perceberá que toda empresa assume tarefas críticas e inventa um nível de prioridade mais alto acima disso, e provavelmente um acima disso também - especialmente quando alguém de cima está pressionando um recurso / correção de bug. Eu discordo ...
Fico feliz em informar que estou praticando TDD em minha empresa atual (empresa de desenvolvimento de telecomunicações, web e aplicativos móveis), juntamente com o Jenkins CI para fornecer outros relatórios de análise estática (a cobertura de código é a mais útil após a aprovação da aprovação no conjunto de testes) . Os projetos em que usei o TDD são um sistema de pagamento e um sistema de computação em grade.
O discurso de vendas ...
Muitas vezes, pode ser uma luta difícil justificar testes automatizados para membros não técnicos da equipe. Escrever testes adiciona mais trabalho ao processo de desenvolvimento, mas ... o tempo que você investe em testes agora, economiza em esforços de manutenção mais tarde. Você está realmente apenas emprestando tempo . Quanto mais tempo o produto estiver em uso, maior será a economia - e isso ajudará a evitar a grande reescrita .
Teste primeiro significa que você está codificando sua intenção primeiro e, em seguida, confirmando que seu código cumpre essa intenção. Isso fornece foco e destila seu código para fazer apenas o que se destina e não mais (leia sem inchaço). É uma especificação e documentação executável ao mesmo tempo (se o seu teste estiver bem escrito, e os testes devem ser tão legíveis / limpos quanto o código do sistema, se não mais!).
Os não programadores (geralmente) não têm esse insight e, portanto, o TDD não tem muito valor para eles, e é visto como um atalho descartável para uma data de lançamento anterior.
A programação é o nosso domínio e, em minha opinião, isso torna nossa responsabilidade , como profissionais, aconselhar sobre as melhores práticas como o TDD. Não cabe aos gerentes de projeto decidir se isso é feito para reduzir o tempo de desenvolvimento, mas está fora de sua jurisdição . Da mesma forma, eles não informam qual estrutura, solução de cache ou algoritmo de pesquisa usar, não devem informar se você deve empregar testes automatizados.
Na minha opinião, o setor de desenvolvimento de software (no geral) está quebrado no momento, o fato de ter testes para o seu software NÃO é a norma.
Imagine isso em outras indústrias: médica, aviação, automóvel, cosméticos, brinquedos macios, bebidas alcoólicas etc. Pedi à minha noiva que nomeiasse uma indústria na qual eles não testam o produto e ela não podia!
Talvez seja injusto dizer que nenhum teste ocorre porque ocorre ... mas em empresas sem testes automatizados, é um processo muito manual / humano (leia-se desajeitado e geralmente propenso a erros).
Um ponto que eu argumentaria na sua pergunta ...
Eles geralmente queriam que o desenvolvimento fosse iniciado imediatamente, ou após um curto período de design. Mais parecido com o Agile.
Sendo "Agile" não prescreve procedimentos sem testes, o primeiro membro listado no agilemanifesto.org é Kent Beck , criador do XP e TDD!
Dois livros que eu recomendo se você estiver interessado em TDD, ou simplesmente não os leu e é um programador interessado (é todo mundo que está lendo isso certo?;)
Crescimento de software orientado a objetos guiado por testes
Código Limpo - Série Robert C Martin ("Tio Bob")
Esses dois livros se complementam e condensam muito sentido em poucas páginas.
Obrigado por fazer esta pergunta :)