Estou prestes a reimplementar uma interface já definida (um conjunto de arquivos de cabeçalho C ++) em uma base de código antiga e relativamente grande. Antes de fazer isso, gostaria de ter a cobertura de teste o mais completa possível, para poder detectar erros de reimplementação o mais cedo e fácil possível. O problema é que a base de código já existente não foi projetada para ser facilmente testável, com (muito) grandes classes e funções, um alto grau de acoplamento, funções com (muitos) efeitos colaterais etc.
Seria bom saber de qualquer experiência anterior com tarefas semelhantes e algumas dicas boas e concretas sobre como você fez a adaptação de testes automatizados (unidade, integrações, regressão etc.) ao seu código legado.
Respostas:
Antes de tudo, obtenha e leia Trabalhando com código legado de Michael Feathers - é uma ajuda indispensável para essas tarefas.
Depois, algumas notas:
fonte
O melhor método é saber é o método Mikado. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ Esta é apenas a generalização de uma técnica simples, mas é a única maneira que eu sei para começar a melhorar a qualidade do código em uma grande base de código sem correr riscos desnecessários.
O WEWLC também é um livro muito bom sobre o assunto, mas ser escrito em C ++ nem sempre é útil com código Java ou Ruby.
fonte
Testes de adaptação retro em uma base de código antiga podem ser bastante difíceis se forem monolíticos no design.
Se possível (você tem tempo / dinheiro), uma maneira de avançar seria refatorar o código em unidades mais testáveis.
fonte
Eu gostaria de adicionar um link . Existem poucos exemplos de implementações não tão facilmente testáveis re-fatoradas em códigos mais compatíveis com xUnit. Quanto à abordagem geral, tente os links já mencionados (postagem de Joel, código Working With Legacy
fonte