Attualmente sto eseguendo il refactoring di una parte di una base di codice di grandi dimensioni senza test unitari. Ho cercato di refactificare il codice in modo brutale, cioè cercando di indovinare cosa sta facendo il codice e quali cambiamenti non cambierebbero il suo significato, ma senza successo: interrompe casualmente le funzionalità intorno alla base di codice.
Si noti che il refactoring include lo spostamento del codice C # legacy in uno stile più funzionale (il codice legacy non utilizza nessuna delle funzionalità di .NET Framework 3 e versioni successive, incluso LINQ), aggiungendo generici in cui il codice può trarne beneficio, ecc.
Non posso usare metodi formali , dato quanto costerebbero.
D'altra parte, presumo che almeno la regola "Qualsiasi codice legacy refactored verrà fornito con unit test" dovrebbe essere seguita rigorosamente, indipendentemente da quanto costerebbe. Il problema è che quando refactoring una piccola parte di un metodo privato 500 LOC, l'aggiunta di unit test sembra essere un compito difficile.
Cosa può aiutarmi a sapere quali unit test sono rilevanti per un dato codice? Immagino che l'analisi statica del codice sarebbe in qualche modo utile, ma quali sono gli strumenti e le tecniche che posso usare per:
Sapere esattamente quali test unitari dovrei creare,
E / o sai se la modifica che ho apportato ha influito sul codice originale in un modo che sta eseguendo in modo diverso da ora?
formal methods in software development
comunque usarlo perché è usato per dimostrare la correttezza di un programma usando la logica predicata e non avrebbe applicabilità al refactoring di una base di codice di grandi dimensioni. Metodi formali generalmente utilizzati per dimostrare che il codice funziona correttamente in aree come le applicazioni mediche. Hai ragione, è costoso fare ed è per questo che non viene usato spesso.