Actualmente estoy refactorizando una parte de una gran base de código sin pruebas unitarias de ningún tipo. Traté de refactorizar el código de forma bruta, es decir, tratando de adivinar qué está haciendo el código y qué cambios no cambiarían su significado, pero sin éxito: rompe aleatoriamente las características de todo el código base.
Tenga en cuenta que la refactorización incluye mover el código C # heredado a un estilo más funcional (el código heredado no usa ninguna de las características de .NET Framework 3 y posteriores, incluido LINQ), agregando genéricos donde el código puede beneficiarse de ellos, etc.
No puedo usar métodos formales , dado cuánto costarían.
Por otro lado, supongo que al menos la regla "Cualquier código heredado refactorizado vendrá con pruebas unitarias" debe seguirse estrictamente, sin importar cuánto costaría. El problema es que cuando refactorizo una pequeña parte de un método privado de 500 LOC, agregar pruebas unitarias parece ser una tarea difícil.
¿Qué puede ayudarme a saber qué pruebas unitarias son relevantes para un determinado código? Supongo que el análisis estático del código de alguna manera sería útil, pero ¿cuáles son las herramientas y técnicas que puedo usar para:
Sepa exactamente qué pruebas unitarias debo crear,
¿Y / o sabe si el cambio que hice afectó el código original de una manera que se ejecuta de manera diferente a la actual?
formal methods in software development
todos modos , no querría usarlo porque se usa para probar la exactitud de un programa usando lógica de predicados y no tendría aplicabilidad para refactorizar una base de código grande. Los métodos formales que generalmente se usan para probar el código funcionan correctamente en áreas como aplicaciones médicas. Tiene razón, es costoso hacerlo, por eso no se usa con frecuencia.