No momento, estou refatorando parte de uma grande base de código sem nenhum teste de unidade. Tentei refatorar o código da maneira bruta, ou seja, tentando adivinhar o que o código está fazendo e quais mudanças não o mudariam, mas sem sucesso: ele quebra aleatoriamente os recursos em toda a base de código.
Observe que a refatoração inclui mover o código C # herdado para um estilo mais funcional (o código herdado não usa nenhum dos recursos do .NET Framework 3 e posterior, incluindo o LINQ), adicionando genéricos nos quais o código pode se beneficiar deles, etc.
Não posso usar métodos formais , considerando quanto eles custariam.
Por outro lado, presumo que pelo menos a regra "Qualquer código legado refatorado venha com testes de unidade" deve ser rigorosamente seguida, não importa quanto custaria. O problema é que, quando refatoro uma parte minúscula de um método privado 500 LOC, adicionar testes de unidade parece ser uma tarefa difícil.
O que pode me ajudar a saber quais testes de unidade são relevantes para um determinado pedaço de código? Suponho que a análise estática do código seja útil de alguma forma, mas quais são as ferramentas e técnicas que posso usar para:
Saiba exatamente quais testes de unidade devo criar,
E / ou sei se a alteração que fiz afetou o código original de uma maneira que está sendo executada de maneira diferente a partir de agora?
formal methods in software development
lo de qualquer maneira, porque é usado para provar a correção de um programa usando lógica de predicados e não teria aplicabilidade para refatorar uma grande base de código. Métodos formais normalmente usados para provar o código funcionam corretamente em áreas como aplicações médicas. Você está certo, é caro fazer, e é por isso que não é usado com frequência.