Если в вашем коде используется «eval», довольно сложно получить гарантию того, что где-то код не собирает строку каким-либо неясным способом и вычисляет ее, вызывая ваш мертвый код.(И действительно неприятные вещи могут вызвать eval для строки, содержащей eval ...).
Вам также нужно беспокоиться о вызовах из за пределами вашего кода;многие веб-страницы используют HTML-атрибуты «on» для вызова кода JavaScript.
Итак, вам нужно найти методы / объявления, которые кажутся мертвыми, найти и проверить все вызовы eval, а также найти и проверитьвсе атрибуты «вкл.».
Использование тестового покрытия, как предлагали другие, - это способ получить начальный список возможных мертвых кодов.Очевидно, что вы хотите использовать как можно больше функциональности, чтобы исключить возможно мертвых кандидатов, а затем искать оставшиеся, чтобы увидеть, есть ли в вашем коде вызовы.Нахождение зловредных и происходящих событий - это вопрос поиска в коде таких вещей.
Grep, вероятно, сработает, хотя может быть болезненно просматривать список имен по одному, введите правильный поиск,по его выводу определите, какие из них не являются ложными срабатываниями, и поочередно проверьте их в редакторе.
Вы можете взглянуть на нашу поисковую систему исходного кода SD (SCSE) , которая можетвыполнять поиск по языку для многих языков, включая HTML-страницы различных типов и JavaScript.Вы можете легко ограничить SCSE проверять только вызовы функций в коде JavaScript (например, игнорировать комментарии и строки) для оставшихся кандидатов и / или eval, а также проверять только атрибуты «on *» на страницах HTML (например, чтобыигнорировать весь другой текст на страницах HTML).Он использует графический интерфейс пользователя, чтобы принять ваш поисковый запрос, показать попадания и получить исходный текст, содержащий попадание, для удобства просмотра.Это даже приведет вас к вашему редактору при ударе, если это необходимо.
Для решения статического анализа вам нужны инструменты, которые могут анализировать код и определять, какие имена относятся к каким объектам;сфера имеет значение.Затем вы должны быть в состоянии определить вероятные пути выполнения через код, по модулю структуру динамического объекта и эти неприятные уловки.Для этого вам понадобится довольно сложный движок и, вероятно, немного инженерных разработок, если только у кого-то это не случится, у меня все в порядке, в чем я сомневаюсь.
Наш инструментарий реинжиниринга программного обеспечения DMS является именно таким движком и имеет полный JavaScript (и HTML) парсер.Хотя мы не использовали DMS для этого для JavaScript, мы создали такой инструмент для удаления мертвого кода для Java с использованием DMS.Вы передаете ему Java-код, и он создает «кажущийся мертвым» список классов, методов и полей (включая транзитивное закрытие мертвых: если класс А мертв и ссылки В, ссылки А не учитываются).в качестве реальных ссылок на B), и модифицированная версия кода с удалением всех «мертвых» вещей.Вы решаете, верите ли вы в отчет;если вы делаете, вы держите код.Если вы этого не сделаете, вы измените код, чтобы убедиться, что эта явно мертвая вещь не мертва, и запустите ее снова.