Eu trabalhei em uma base de código muito grande que inicialmente não tinha testes de unidade. Seguindo algumas práticas, agora (após vários anos) temos a maior parte da base de código coberta por testes.
Todo novo código deve ter testes de unidade.
Todo código alterado deve ter testes de unidade adicionados a ele.
A maneira pela qual adicionamos testes com segurança ao código antigo sem quebrá-lo é principalmente usando a seguinte abordagem básica:
Escolha uma pequena seção de código da qual você precisa alterar a funcionalidade.
- Tente criar testes de integração no nível do sistema para envolver o código. Devido à complexidade combinatória dos testes nesse nível, esses testes formarão apenas um teste de "fumaça" para detectar os principais erros.
Introduza as interfaces necessárias para poder testar o código que está sendo alterado. Use as técnicas de refatoração que consistem em sequências de alterações muito pequenas que você tem alta confiança e que estão corretas. Tente usar o suporte da ferramenta sempre que possível. Você pode fazer isso, por exemplo, movendo / extraindo o método que está mudando para seu próprio objeto. Verifique suas alterações regularmente para poder reverter. Revise regularmente seus pares como você fez as alterações, percorrendo o histórico de controle de revisões.
Tente minimizar ao máximo as alterações necessárias para interromper as dependências que estão impedindo a adição de testes.
- Escreva testes para, na medida do possível, abranger a funcionalidade do código que você vai alterar. Faça check-in regularmente e analise todas as alterações por pares.
- Escreva testes para a nova funcionalidade / alteração de funcionalidade.
- Implemente a funcionalidade (este é o seu ciclo TDD normal)
- Certifique-se de refatorar as áreas cobertas pelos testes (refator vermelho-verde).
Descobrimos que quanto mais fizemos isso, mais fácil ficou. Como toda vez que você volta para a base de código, é um pouco melhor.
Vimos uma queda maciça no número de bugs chegando aos nossos testadores de controle de qualidade. Com as regressões de funcionalidade agora quase inéditas, acho que valeu a pena o esforço para nós.
Você pode começar a cobrir seu código atual e, se tiver algum tempo para gastar, começar a cobrir a funcionalidade principal do código antigo. Além disso, você pode pedir ao seu PM um tempo extra para isso =)
fonte
Absolutamente não! Comece a testar o novo código que você está adicionando. Você verá imensos benefícios fazendo isso, mesmo que alguns dos componentes mais antigos não tenham testes. Como você precisa lidar com um desses componentes ou encontrar um bug, escreva um teste. Com o tempo, você obterá mais do código antigo em teste.
fonte