Подтвердить что ты не робот

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

У меня есть проект с очень грязным кодом - много дублирования и мертвого кода здесь и там.

Некоторое время назад на модульных тестах было нулевое покрытие кода, но теперь мы пытаемся написать весь новый код в T.D.D. способ и снижение технического долга путем покрытия "старого" кода с помощью модульных тестов (тест-последний метод).

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

Как можно найти эти методы мертвого кода? Обширная регистрация? Более высокий охват тестирования? (Это не очень просто, потому что клиенты хотят, чтобы новые функции выходили)

4b9b3361

Ответ 1

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.
?>  

Ответ 2

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

Ответ 3

Я не знаю способа обнаружения полностью неиспользуемого кода, который может оказаться вне возможностей всех инструментов. Но с точки зрения инструментов там, нажмите http://phpqatools.org/ для хорошего изложения их.

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

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

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

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

Ответ 4

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

Пропустите систему, чтобы просмотреть журналы с http://code.google.com/p/webgrind/ и физически увидеть, что называется.

Ответ 5

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

Ответ 6

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

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

Ответ 7

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