Обнаружение мертвого кода в [закрытом] PHP

Я не чрезмерно знаком с командой вины, но я предполагаю, что Вы ищете, кто изменяет конкретную строку кода. Самый легкий путь состоит в том, чтобы использовать 'представление промежутка времени Perforce', доступное и от p4win и от p4v.

Этот инструмент использование аннотируют и некоторые другие команды для предоставления Вам мнения строки кода со временем. Вы видите, кто изменил, какой код, когда он был вставлен или удален из строки кода, и т.д.

, Это не командная строка все же. Я проверил кратко в справку и там,' кажется, не способ запустить представление промежутка времени непосредственно от p4win или p4v вызова. Мог бы быть то, хотя... Я буду проверять далее...

Редактирование: Я сверился с поддержкой, и можно запустить представление таймлапса через p4v следующим образом:

p4v.exe -cmd "annotate //<path/to/file>"

HTH.

33
задан Nikita Fedyashev 22 November 2009 в 13:23
поделиться

7 ответов

Инструменты покрытия кода xdebug позволяют проверить, какие строки кода фактически выполняются, без необходимости помещать операторы трассировки во все функции / методы.

Пример:

<?php
    xdebug_start_code_coverage();

    function a($a) {
        echo $a * 2.5;
    }

    function b($count) {
        for ($i = 0; $i < $count; $i++) {
            a($i + 0.17);
        }
    }

    b(6);
    b(10);

    var_dump(xdebug_get_code_coverage());  // array '/path/file.php' => array line_number => int 1 or 0.
?>  
14
ответ дан 27 November 2019 в 18:39
поделиться

Я не знаю способа обнаружить полностью неиспользуемый код, который может оказаться за пределами возможностей всех имеющихся инструментов. Но что касается имеющихся инструментов, нажмите https://phpqa.io/ , чтобы ознакомиться с ними.

  • Пока что один из моих любимых инструментов на phploc, который отделяет ваш код от Объектно-ориентированная перспектива и дает вам подробную информацию о том, сколько классов и сколько функций против сколько тестов против среднего loc на функцию против Cyclomatic Complexity.

  • Мой следующий фаворит - phpcpd, который является «детектором копирования-вставки PHP». Он токенизирует всю вашу кодовую базу, ищет общие подписи и дает вам список файлов с номерами строк.

  • На этой странице много других инструментов, выберите те, которые вам пригодятся.

Мы ' мы активно использовали эти инструменты в web2project , и за два года, прошедшие с момента выхода из dotProject, мы отказались от рефакторинга около 35% кодовой базы, исключив дублирование (первоначально 12%, теперь около 2,5%), и вообще лучше структурировать вещи. И это с учетом наших 15k + строк модульных тестов. :)

3
ответ дан 27 November 2019 в 18:39
поделиться

Что касается инструментов профилирования, если вы решите пойти этим путем, вы можете взглянуть на xhprof http://developers.facebook.com/xhprof/
It имеет меньший размер выходных файлов и веб-интерфейс, который вы можете встроить в свое приложение для непрерывного отслеживания. Он может генерировать визуальное представление дерева вызовов. Для этой цели я рекомендую его вместо xdebug .

2
ответ дан 27 November 2019 в 18:39
поделиться

См. Инструмент покрытия тестов SD PHP . Вы тренируете свой код так, как вам нравится, включая (или не) запускаете тестовые пакеты так, как вам нравится. По окончании выполнения вы можете увидеть отображение того, какой код был выполнен (скриншоты есть на сайте). Код, который не выполняется, может быть мертвым и требует дополнительного анализа с вашей стороны, но если вы хорошо испытаете систему, невыполненный код будет либо обработчиком ошибок, либо действительно мертвым материалом. Инструмент PHP Test Coverage не требует каких-либо изменений на вашем PHP-сервере.

Инструмент SD CloneDR находит повторяющийся код в очень больших базах исходного кода. Он чувствителен к языку (охватывает C, C ++, Java, C #, Ada, Fortran, а также PHP4 и PHP5), поэтому его не обманывают изменения в форматировании, пробелы или наличие или отсутствие комментариев. Он будет обнаруживать точные копии клонов и клоны с ошибкой. На веб-сайте представлены примеры отчетов о клонах для нескольких языков.

2
ответ дан 27 November 2019 в 18:39
поделиться

Я считаю, что кто-то реализовал разновидность Structure101g , которая использует данные xdebug - затем s101 обнаружит любые неиспользуемые кластеры, то есть файлы, которые используют друг друга, но отключены от основная кодовая база.

0
ответ дан 27 November 2019 в 18:39
поделиться

Я бы порекомендовал запустить систему с профилировщиком xdebug ( http://xdebug.org/docs/profiler ).

Запустите систему, чтобы просмотреть регистрирует с помощью http://code.google.com/p/webgrind/ и физически видит, что вызывается.

2
ответ дан 27 November 2019 в 18:39
поделиться

Уже немного поздно, но PHPDCD утверждает, что делает это статически, что должно дать вам гораздо более информативный результат, чем профилирование фактического выполнения кода с помощью xprof / xdebug .

13
ответ дан 27 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: