Поиск мертвого кода
От: Alximik509 Россия  
Дата: 25.10.10 14:18
Оценка:
Всем доброго времени суток.
Встала следующая проблема.
Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен.
Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного.
Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.

Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни

Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)

Проект под win C++.

заранее спасибо)
Re: Поиск мертвого кода
От: okman Беларусь https://searchinform.ru/
Дата: 25.10.10 16:18
Оценка:
Здравствуйте, Alximik509, Вы писали:

A>Всем доброго времени суток.

A>Встала следующая проблема.
A>Есть достаточно старый и большой проект. В следствии постоянного развития в нем много старого кода, который уже никогда не будет нужен.
A>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного.
A>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.

A>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни


A>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)


A>Проект под win C++.


A>заранее спасибо)


Есть, например, Intel C++ compiler.
Там есть инструмент, называется CodeCoverage, кажется (точно не помню, давно не пользовался).
Re[2]: Поиск мертвого кода
От: Alximik509 Россия  
Дата: 25.10.10 22:12
Оценка:
Здравствуйте, 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, а код который не влияет на выход программы. Он может и выполняться, но абсолютно бесполезен.

Поиск в инете как раз и выводит в основном на такие тулзы...
Re: Поиск мертвого кода
От: Donz Россия http://donz-ru.livejournal.com
Дата: 26.10.10 07:03
Оценка: +1
Здравствуйте, Alximik509, Вы писали:

A>Причем это не просто мертвый код(хотя и он тоже) а код который выполняется, но не делает ничего полезного.

A>Например читает какие-то параметры из реестра в переменную, но дальше эту переменную никак не использует.

Полностью автоматизированным этот процесс не сделать. Если проект большой и тупой, то есть вероятность, что код читающий данные реестра в никуда все-таки нужен. Например, он проверяет, что определенные ключи существуют. Или еще хитрее — обновляет данные логгирования о доступе к реестру/ветке реестра.

A>Хочется узнаеть есть ли уже тулзы для анализа подобного кода, автоматические или полуавтоматические. Или что можно почитать на эту тему чтобы сделать что-то подобное самому. И какие там могут быть подводные камни

A>Естественно задача не стоит найти абсолютно все неиспользуемые участки. А скорее минимальными усилиями найти максимальное колличество(самые очевидные)
A>Проект под win C++.

Был бы под Java, посоветовал бы следующее:
1)Прогоняем через обфускатор с занесением в лог методов, которые были выкинуты за ненужностью
2)Остатки кода анализируем в современной IDE, например, IntelliJ IDEA. Она подскажет, какие переменные/поля присутствуют, но не используются на чтение, что можно конвертировать в локальную переменную и т.д. Там сотни условий анализа.

Как с этим обстоят дела на С++ не знаю, но попробуй покопать в эту сторону.
А вообще, я бы поступил по принципу "работает — не трожь". Если взялся модернизировать конкретный модуль, тогда да, проводишь анализ и делаешь его рефакторинг. В этом случае возможность ошибки минимальна, так как ты будешь полностью в теме, что делает этот модуль. А брать весь проект и рефакторить только ради чистоты исходников — это гарантированный факап на выходе.
Какая конечная цель этой чистки?
Re[3]: Поиск мертвого кода
От: blackhearted Украина  
Дата: 28.10.10 13:34
Оценка:
Здравствуйте, 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, а код который не влияет на выход программы. Он может и выполняться, но абсолютно бесполезен.

И как это узнать в рамках С++? Вот записали вы что-то по указателю, а дальше что?
Попробуйте описать маленький пример работы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.