Всем доброго времени суток.
Встала следующая проблема.
Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен.
Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного.
Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.
Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни
Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)
Здравствуйте, Alximik509, Вы писали:
A>Всем доброго времени суток. A>Встала следующая проблема. A>Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен. A>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного. A>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.
A>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни
A>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)
A>Проект под win C++.
A>заранее спасибо)
Есть, например, Intel C++ compiler.
Там есть инструмент, называется CodeCoverage, кажется (точно не помню, давно не пользовался).
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Alximik509, Вы писали:
A>>Всем доброго времени суток. A>>Встала следующая проблема. A>>Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен. A>>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного. A>>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.
A>>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни
A>>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)
A>>Проект под win C++.
A>>заранее спасибо)
O>Есть, например, Intel C++ compiler. O>Там есть инструмент, называется CodeCoverage, кажется (точно не помню, давно не пользовался).
CodeCoverage неподходит по двум причинам.
1. Покрытие тестами в моем случае практически отсутствует.
2. Я бы хотел найти не просто dead code, а код который не влияет на выход программы. Он может и выполняться, но абсолютно бесполезен.
Поиск в инете как раз и выводит в основном на такие тулзы...
Здравствуйте, Alximik509, Вы писали:
A>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного. A>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.
Полностью автоматизированным этот процесс не сделать. Если проект большой и тупой, то есть вероятность, что код читающий данные реестра в никуда все-таки нужен. Например, он проверяет, что определенные ключи существуют. Или еще хитрее — обновляет данные логгирования о доступе к реестру/ветке реестра.
A>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни A>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные) A>Проект под win C++.
Был бы под Java, посоветовал бы следующее:
1)Прогоняем через обфускатор с занесением в лог методов, которые были выкинуты за ненужностью
2)Остатки кода анализируем в современной IDE, например, IntelliJ IDEA. Она подскажет, какие переменные/поля присутствуют, но не используются на чтение, что можно конвертировать в локальную переменную и т.д. Там сотни условий анализа.
Как с этим обстоят дела на С++ не знаю, но попробуй покопать в эту сторону.
А вообще, я бы поступил по принципу "работает — не трожь". Если взялся модернизировать конкретный модуль, тогда да, проводишь анализ и делаешь его рефакторинг. В этом случае возможность ошибки минимальна, так как ты будешь полностью в теме, что делает этот модуль. А брать весь проект и рефакторить только ради чистоты исходников — это гарантированный факап на выходе.
Какая конечная цель этой чистки?
Здравствуйте, Alximik509, Вы писали:
A>Здравствуйте, okman, Вы писали:
O>>Здравствуйте, Alximik509, Вы писали:
A>>>Всем доброго времени суток. A>>>Встала следующая проблема. A>>>Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен. A>>>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного. A>>>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.
A>>>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни
A>>>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)
A>>>Проект под win C++.
A>>>заранее спасибо)
O>>Есть, например, Intel C++ compiler. O>>Там есть инструмент, называется CodeCoverage, кажется (точно не помню, давно не пользовался).
A>CodeCoverage неподходит по двум причинам. A>1. Покрытие тестами в моем случае практически отсутствует. A>2. Я бы хотел найти не просто dead code, а код который не влияет на выход программы. Он может и выполняться, но абсолютно бесполезен.
И как это узнать в рамках С++? Вот записали вы что-то по указателю, а дальше что?
Попробуйте описать маленький пример работы.