В настоящее время я занимаюсь рефакторингом части большой кодовой базы без каких-либо модульных тестов. Я попытался реорганизовать код грубо, то есть, пытаясь угадать, что делает код, и какие изменения не изменили бы его значения, но безуспешно: он случайным образом нарушает функции по всей базе кода.
Обратите внимание, что рефакторинг включает в себя перевод унаследованного кода C # в более функциональный стиль (в унаследованном коде не используются какие-либо функции .NET Framework 3 и более поздних версий, включая LINQ), добавление обобщений, где код может извлечь из них пользу, и т. Д.
Я не могу использовать формальные методы , учитывая, сколько они будут стоить.
С другой стороны, я предполагаю, что, по крайней мере, следует строго соблюдать правило «Любой переработанный унаследованный код с юнит-тестами» , независимо от того, сколько это будет стоить. Проблема в том, что когда я выполняю рефакторинг крошечной части частного метода 500 LOC, добавление модульных тестов оказывается сложной задачей.
Что может помочь мне узнать, какие модульные тесты актуальны для данного фрагмента кода? Я предполагаю, что статический анализ кода был бы как-то полезен, но какие инструменты и методы я могу использовать для:
Точно знать, какие юнит-тесты я должен создать,
И / или знаете, повлияло ли изменение, которое я сделал, на исходный код так, как он выполняется по-другому?
formal methods in software development
любом случае, вы не захотите использовать его, потому что он используется для доказательства правильности программы, использующей логику предикатов, и не может применяться для рефакторинга большой кодовой базы. Формальные методы, обычно используемые для проверки кода, работают правильно в таких областях, как медицинские приложения. Вы правы, делать это дорого, поэтому его не часто используют.