Não houve processo de desenvolvimento orientado a testes durante o desenvolvimento devido a prazos muito apertados
Esta afirmação é muito preocupante. Não porque significa que você desenvolveu sem TDD ou porque não está testando tudo. Isso é preocupante, porque mostra que você acha que o TDD o atrasará e fará com que você perca um prazo.
Contanto que você veja dessa maneira, você não está pronto para TDD. O TDD não é algo em que você possa se adaptar gradualmente. Você sabe como fazê-lo ou não. Se você tentar fazer isso no meio do caminho, você fará com que você fique mal.
TDD é algo que você deve praticar primeiro em casa. Aprenda a fazê-lo, porque ajuda a codificar agora . Não porque alguém lhe disse para fazê-lo. Não porque ajudará quando você fizer alterações mais tarde. Quando se torna algo que você faz porque está com pressa, está pronto para fazê-lo profissionalmente.
TDD é algo que você pode fazer em qualquer loja. Você nem precisa entregar seu código de teste. Você pode guardar para si mesmo se os outros desdenharem os testes. Quando você faz o que é certo, os testes aceleram seu desenvolvimento, mesmo que ninguém mais os execute.
Por outro lado, se outras pessoas amam e executam seus testes, você ainda deve ter em mente que, mesmo em uma loja de TDD, não é seu trabalho verificar os testes. É para criar um código de produção comprovado. Se acontecer de ser testável, puro.
Se você acha que a gerência precisa acreditar no TDD ou que seus colegas codificadores precisam oferecer suporte aos seus testes, então você está ignorando a melhor coisa que o TDD faz por você. Ele mostra rapidamente a diferença entre o que você acha que seu código faz e o que realmente faz.
Se você não consegue ver como isso, por si só, pode ajudá-lo a cumprir um prazo mais rapidamente, então você não está pronto para o TDD no trabalho. Você precisa praticar em casa.
Dito isso, é bom quando a equipe pode usar seus testes para ajudá-los a ler seu código de produção e quando o gerenciamento compra novas ferramentas TDD.
É uma boa ideia escrever todos os casos de teste possíveis após transformar a equipe em TDD?
Independentemente do que a equipe esteja fazendo, nem sempre é uma boa idéia escrever todos os casos de teste possíveis. Escreva os casos de teste mais úteis. 100% de cobertura de código tem um custo. Não ignore a lei dos retornos decrescentes apenas porque é difícil fazer um julgamento.
Economize sua energia de teste para a interessante lógica de negócios. O material que toma decisões e aplica políticas. Teste os pedaços fora disso. O código de cola estrutural óbvio e fácil de ler, chato, que apenas liga as coisas, não precisa de testes tão ruins.
(1) Ainda é bom ou uma boa ideia interromper a maior parte do desenvolvimento e começar a escrever casos de teste possíveis desde o início, mesmo que tudo esteja funcionando completamente OKAY (ainda!)? Ou
Não. Esse é o pensamento "vamos reescrever completamente". Isso destrói o difícil conhecimento adquirido. Não peça tempo para a gerência escrever testes. Basta escrever testes. Depois de saber o que está fazendo, os testes não o atrasarão.
(2) é melhor esperar que algo ruim aconteça e, durante a correção, escreva novos testes de unidade ou
(3) até esqueça os códigos anteriores e apenas escreva testes de unidade apenas para os novos códigos e adie tudo para o próximo grande refatorador.
Vou responder 2 e 3 da mesma maneira. Quando você altera o código, por qualquer motivo, é muito bom se você pode fazer um teste. Se o código é legado, atualmente não é bem-vindo a um teste. O que significa que é difícil testá-lo antes de alterá-lo. Bem, já que você está alterando de qualquer maneira, pode transformá-lo em algo testável e testá-lo.
Essa é a opção nuclear. É arriscado. Você está fazendo alterações sem testes. Existem alguns truques criativos para colocar o código herdado em teste antes de alterá-lo. Você procura as chamadas costuras que permitem alterar o comportamento do seu código sem alterá-lo. Você altera os arquivos de configuração, constrói os arquivos, o que for preciso.
Michael Feathers nos deu um livro sobre isso: Trabalhando efetivamente com o Legacy Code . Leia e você verá que não precisa queimar tudo o que é antigo para criar algo novo.