- Estou falando de testes de unidade no sentido TDD. ("Integração" não automatizada, ou como você gostaria de chamar de testes.)
- Código legado como em: código (C ++) sem testes. (veja: Michael Feathers ' trabalhando efetivamente com o código legado )
- Mas também código legado, como em: código com o qual nossa equipe trabalha nos últimos 10 a 5 anos; portanto, muitas vezes temos uma boa idéia de onde colocar as coisas para mudar alguma coisa.
- Temos testes de unidade em vigor (via Boost.Test) para alguns módulos que vieram mais tarde ou foram adequados para testes de unidade (contêineres específicos de aplicativos comuns, material de cadeia, auxiliares de rede etc.)
- Ainda não temos testes de aceitação automatizados adequados.
Agora, recentemente, tive o "prazer" de implementar três novos recursos voltados para o usuário.
Cada um deles levou cerca de 1-2 horas para me familiarizar com as partes do código que eu precisava alterar, 1-2 horas para implementar o (pequeno) código que eu precisava mudar e mais 1-2 horas para garantir que o aplicativo correu corretamente depois e fez foi o que deveria fazer.
Agora, eu realmente adicionei pouco código. (Acho que um método e algumas linhas de chamada para cada recurso.)
Fatorar esse código (através de qualquer um dos métodos sugeridos no WEwLC ), para que um teste de unidade fizesse sentido (e não fosse uma tautologia completa) levaria facilmente mais 2-4 horas, se não mais. Isso acrescentaria 50% a 100% de tempo a cada recurso, sem benefício imediato, pois
- Não precisei do teste de unidade para entender nada sobre o código
- O teste manual é a mesma quantidade de trabalho, pois ainda preciso testar se o código está corretamente integrado ao restante do aplicativo.
Concedido, se , mais tarde, "alguém" aparecer e tocar esse código, ele teoricamente poderia se beneficiar desse teste de unidade. (Apenas teoricamente, como a ilha de código testada viveria em um oceano de código não testado.)
Então, "desta vez", optei por não fazer o trabalho duro de adicionar um teste de unidade: as alterações de código para colocar essas coisas em teste teriam sido significativamente mais complexas do que as alterações de código para obter o recurso corretamente (e de forma limpa) implementado.
Isso é algo típico para código legado fortemente acoplado? Sou preguiçoso / estabelecemos prioridades erradas como equipe? Ou sou prudente, apenas testando coisas onde a sobrecarga não é muito alta?