Если вы работаете с командой php-разработчиков, то вы знаете как много кода они пишут, особенно если это высокопроизводительная команда разработчиков. программистам свойственно автоматизировать любой рутинный труд, поэтому и труд по контролю над кодом тоже понемногу автоматизируется.
Самым полезным, для меня, оказался инструмент Copy/Paste Detector for PHP code. Как ясно из названия, этот инструмент используется для дублирующегося кода, ярым поборником которого я являюсь.
Устанавливается он очень просто, как PEAR пакет:
[email protected] ~ % pear channel-discover pear.phpunit.de Adding Channel "pear.phpunit.de" succeeded Discovery of channel "pear.phpunit.de" succeeded [email protected] ~ % pear channel-discover components.ez.no Adding Channel "components.ez.no" succeeded Discovery of channel "components.ez.no" succeeded [email protected] ~ % 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:
[email protected] ~ $ pear channel-discover pear.phpmd.org [email protected] ~ $ pear channel-discover pear.pdepend.org [email protected] ~ $ 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, позволяет оценить насколько ваш код соответствует стандартам кодирования.
6 comments On Инструменты анализа кода на предмет “говнокода”, copy/paste, соответствию стандартам
Полезно, приятно будет увидеть продолжение
Да тут особо продолжать некуда. Хорошо хоть такие инструменты есть, можно сказать – мегапрорыв
К слову пришлось
“Поборник” – это тот кто защищает, борется за что-то.
Поборник дублирования кода – тот кто борется за то, чтобы код дублировался. Хотя по смыслу вы имели в виду совершенно противоположное.
VMusulainen, глубоко копаете, – черта хорошего кодера
Мдя, местами бы я этот копипаст-тест не прошёл. Особенно, когда просят “быстро-быстро” :)
В том-то и прелесть инструмента!
Sliding Sidebar
About Me
Для кого этот блог?
Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.
Что заставило меня создать его?
Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.
Немного о себе.
Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.
Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:
e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом
Прочая онлайновая деятельность: