Если вы работаете с командой php-разработчиков, то вы знаете как много кода они пишут, особенно если это высокопроизводительная команда разработчиков. программистам свойственно автоматизировать любой рутинный труд, поэтому и труд по контролю над кодом тоже понемногу автоматизируется.
Самым полезным, для меня, оказался инструмент Copy/Paste Detector for PHP code. Как ясно из названия, этот инструмент используется для дублирующегося кода, ярым поборником которого я являюсь.
Устанавливается он очень просто, как PEAR пакет:
sb@ubuntu ~ % pear channel-discover pear.phpunit.de Adding Channel "pear.phpunit.de" succeeded Discovery of channel "pear.phpunit.de" succeeded sb@ubuntu ~ % pear channel-discover components.ez.no Adding Channel "components.ez.no" succeeded Discovery of channel "components.ez.no" succeeded sb@ubuntu ~ % pear install phpunit/phpcpd downloading phpcpd-1.3.0.tgz ... Starting to download phpcpd-1.3.0.tgz (7,809 bytes) .....done: 7,809 bytes downloading File_Iterator-1.1.0.tgz ... Starting to download File_Iterator-1.1.0.tgz (3,181 bytes) ...done: 3,181 bytes downloading ConsoleTools-1.6.tgz ... Starting to download ConsoleTools-1.6.tgz (869,925 bytes) ......................................................... ......................................................... ......................................................... ..done: 869,925 bytes downloading Base-1.8.tgz ... Starting to download Base-1.8.tgz (236,357 bytes) ...done: 236,357 bytes install ok: channel://components.ez.no/Base-1.8 install ok: channel://components.ez.no/ConsoleTools-1.6 install ok: channel://pear.phpunit.de/File_Iterator-1 install ok: channel://pear.phpunit.de/phpcpd-1.3.0
Пользоваться, тоже, — очень просто:
bash-3.2# phpcpd PEAR/tests/ phpcpd 1.3.1 by Sebastian Bergmann. Found 5 exact clones with 85 duplicated lines in 5 files: - MDB2/tests/MDB2_extended_testcase.php:398-404 MDB2/tests/MDB2_extended_testcase.php:453-459 - MDB2/tests/MDB2_manager_testcase.php:61-75 MDB2/tests/MDB2_reverse_testcase.php:86-100 - MDB2/tests/MDB2_usage_testcase.php:1289-1321 MDB2/tests/MDB2_usage_testcase.php:1577-1609 - MDB2/tests/MDB2_usage_testcase.php:1567-1593 MDB2/tests/MDB2_usage_testcase.php:1739-1765 - Structures_Graph/tests/testCase/BasicGraph.php:111-118 Structures_Graph/tests/testCase/BasicGraph.php:142-149
Еще один полезный инструмент, это PHP Depend. Он позволяет взглянуть на ваш проект, как бы, с «высоты птичьего полета», предоставляя такие метрики как: количество строк кода, классов, пакетов, методов, вызовов и даже эмпирическую метрику «сложность кода». Здесь можно прочитать расшифровку всех показателей.
Я сравнил два довольно больших проекта, которые веду и метрики отразили в цифрах почти то же что и было «по ощущению», — более новый проект проще и лучше приблизительно в
Следующий, хороший инструмент это PHP Mess detector. Устанавливается он аналогично, с помощью PEAR installer:
mapi@arwen ~ $ pear channel-discover pear.phpmd.org mapi@arwen ~ $ pear channel-discover pear.pdepend.org mapi@arwen ~ $ pear install --alldeps phpmd/PHP_PMD-alpha
Эта утилита дает нам массу интересной информации для размышления:
bash-3.2# phpmd PEAR/Pear.php text codesize PEAR.php:87 This class has a bunch of public methods and attributes PEAR.php:87 This class has too many methods, consider refactoring it. PEAR.php:87 This class PEAR has an overall complexity of 102 which is very high. The configured complexity threshold is 50. PEAR.php:323 The method setErrorHandling() has a Cyclomatic Complexity of 11. PEAR.php:511 The method raiseError() has a Cyclomatic Complexity of 20. PEAR.php:511 The method raiseError() has an NPath complexity of 1600. PEAR.php:771 The function _PEAR_call_destructors() has a Cyclomatic Complexity of 12. PEAR.php:831 This class has a bunch of public methods and attributes PEAR.php:866 The method PEAR_Error() has a Cyclomatic Complexity of 19. PEAR.php:866 The method PEAR_Error() has an NPath complexity of 11520. bash-3.2# phpmd PEAR/Pear.php text unusedcode PEAR.php:450 Avoid unused local variables such as '$key'. PEAR.php:788 Avoid unused local variables such as '$k'.
Здесь важно насколько много проблемных мест в вашем коде. Изучая подобные отчеты вы будете всегда видеть какие части приложения должны быть подвергнуты рефакторингу в первую очередь.
Похожий по своему применению инструмент PHP_CodeSniffer, позволяет оценить насколько ваш код соответствует стандартам кодирования.