Minha experiência em fazer a transição
Por muitos anos, fiquei com a má compreensão de que não tinha tempo suficiente para escrever testes de unidade para o meu código. Quando escrevi testes, eles estavam inchados, coisas pesadas que só me incentivaram a pensar que só deveria escrever testes de unidade quando soubesse que eram necessários.
Recentemente, fui encorajado a usar o Test Driven Development e achei uma revelação completa. Agora estou firmemente convencido de que não tenho tempo para não escrever testes de unidade .
Na minha experiência, desenvolvendo com testes em mente, você acaba com interfaces mais limpas, classes e módulos mais focados e, geralmente, mais código SOLID testável.
Toda vez que trabalho com código legado que não possui testes de unidade e preciso testar manualmente algo, fico pensando "isso seria muito mais rápido se esse código já tivesse testes de unidade". Toda vez que tenho que tentar adicionar a funcionalidade de teste de unidade ao código com alto acoplamento, fico pensando "isso seria muito mais fácil se tivesse sido escrito de maneira desacoplada".
Comparando e contrastando as duas estações experimentais que eu apoio. Um já existe há algum tempo e possui uma grande quantidade de código legado, enquanto o outro é relativamente novo.
Ao adicionar funcionalidade ao laboratório antigo, geralmente é necessário ir ao laboratório e passar muitas horas trabalhando com as implicações da funcionalidade de que eles precisam e como posso adicionar essa funcionalidade sem afetar nenhuma outra funcionalidade. O código simplesmente não está configurado para permitir testes off-line, então praticamente tudo precisa ser desenvolvido on-line. Se eu tentasse me desenvolver off-line, acabaria com mais objetos simulados do que seria razoável.
No laboratório mais recente, geralmente posso adicionar funcionalidades desenvolvendo-as off-line na minha mesa, zombando apenas daquilo que é imediatamente necessário e depois passando um curto período de tempo no laboratório, resolvendo os problemas restantes que não foram detectados. -linha.
Meu conselho
Parece que você começou bem, sempre que fizer grandes alterações no seu fluxo de trabalho de desenvolvimento, você precisa garantir que todos estejam envolvidos na tomada dessa decisão e, idealmente, que a maioria das pessoas tenha adquirido. Da sua pergunta, parece que você acertou. Se as pessoas não têm entusiasmo pela idéia, está fadado a falhar ou gerar má vontade.
A menos que você possa apresentar um caso de negócios atraente, eu não recomendaria uma implementação inicial de testes e especificações de unidade para todo o sistema. Como mencionei acima, se um sistema não for projetado com testes em mente, pode ser muito difícil escrever testes automatizados para ele.
Em vez disso, eu recomendaria começar pequeno e usar a regra dos escoteiros :
Sempre deixe o acampamento mais limpo do que o encontrado.
Se enquanto você estiver implementando algo nessa base de código, poderá identificar os testes específicos necessários para testar o comportamento existente e fazer a transição do comportamento antigo para o novo, então você documentou a alteração nas especificações e começou a implementar testes de unidades para Seu sistema.
Os módulos nos quais você não toca não são submetidos a testes de unidade, mas se você não os estiver tocando, provavelmente é porque eles já foram exaustivamente testados em uso e não precisam de alterações, ou nunca são usados.
O que você deseja evitar é desperdiçar toda uma carga de esforço do desenvolvedor escrevendo testes que nunca serão necessários (o YAGNI funciona tão bem para o código de teste quanto para o código de produção * 8 '), nunca mais será usado e desmoralizará as pessoas. pensando que os testes são inúteis, afinal.
Sumário
Comece pequeno, construa confiança nos testes de forma incremental e obtenha valor comercial desenvolvendo testes quando e onde eles mais beneficiam sua equipe.