PHP Depend - показывает качество дизайна кода для расширяемости, повторного использования и сопровождения.
Для запуска оптимальней всего испоользовать bash скрипт, который сформирует отчет и описание к графикам
cd project_dir
sh pdepend.sh
Пример скрипта:
#!/bin/sh log=`pdepend --summary-xml=summary.xml --jdepend-chart=jdepend.svg --overview-pyramid=pyramid.svg .`; echo "${log}" echo "<pre><code>${log}</code></pre> <p><img src='jdepend.svg' alt='jdepend.svg'/></p> <h5><strong>jdepend.svg</strong></h5> <p>Каждый из «шариков» отображает файлы определенного пакета-папки (в svg-файле при наведении на шарик всплывает подсказка с названием пакета). Размер шарика определяется количеством абстактных и конкретных классов в пакете.</p> <p>По оси Х откладываются значения <i>коэффициента абстракции</i> (abstraction ratio), по оси Y – <i>коэффициента нестабильности</i> (instability ratio).</p> <p>Прямая изображает оптимальное соотношение между этими коэффициентами.</p> <p><strong>Коэффициент абстракции</strong> (abstraction ratio, A) – отношение количества абстрактных классов и интерфейсов к общему числу классов в анализируемом пакете. Принимает значение от 0 до 1. Если равно 0, то пакет абсолютно конкретный, если 1 – то абсолютно абстрактный.</p> <p><strong>Коэффициент центростремительной связности</strong> (afferent couplings, Ca) – количество пакетов, которые зависят от классов текущего пакета.</p> <p><strong>Коэффициент центробежной связности</strong> (efferent couplings, Ce) – количество пакетов, от которых зависят классы текущего пакета.</p> <p><strong>Коэффициент нестабильности</strong> (instability ratio, I) – отношение коэффициента центробежной связности к сумме коэффициентов связности: I = Ce / (Ce + Ca). Показывает устойчивость пакета к изменениям. Принимает значение от 0 до 1. Если равен 0, то считается абсолютно стабильным пакетом (вообще не зависит от других пакетов), если 1 – то абсолютно нестабильным (полностью зависимый пакет, от которого не зависят другие).<p> <p><img src='pyramid.svg' alt='pyramid.svg' /></p> <h5><strong>pyramid.svg</strong></h5> <p>Данные отображены в виде пирамиды, потому что на ее внешних гранях располагаются коэффициенты, полученные как отношение значений характеристики с уровня ниже и текущего уровня. Значения коэффициентов «подкрашены» в зависимости от попадания его в диапазон значений – низкий, средний и высокий.</p> <p>Т.е., например, 0.176 = CYCLO / LOC.</p> <p>Теперь подробнее об используемых аббревиатурах.</p> <p>Слева:</p> <ul> <li><strong>CYCLO</strong> (Cyclomatic Complexity) – цикломатическая сложность пакетов (на основе числа ветвлений в коде типа if, for, foreach).</li> <li><strong>LOC</strong> (Lines Of Code) – число строк кода.</li> <li><strong>NOM</strong> (Number Of Methods+functions) – число методов классов + число функций.</li> <li><strong>NOC</strong> (Number Of Classes) – число классов.</li> <li><strong>NOP</strong> (Number Of Packages) – число пакетов.</li> <li><strong>AHH</strong> (Average Hierarchy Height) – средняя глубина иерархии.</li> <li><strong>AND</strong> (Average Number of Derived classes) – среднее число классов-наследников.</li> </ul> <p>Справа:</p> <ul> <li><strong>FANOUT</strong> (Number of Called Classes) – число использований классов (по-видимому, число созданий объектов классов).</li> <li><strong>CALLS</strong> (Number of Operation Calls) – число вызовов методов и функций.</li> </ul>" > pdepend.html
Пример выполнения
PHP_Depend 1.1.4 by Manuel Pichler Parsing source files: ............................................................ 60 .................... 80 Executing CyclomaticComplexity-Analyzer: ........................ 493 Executing ClassLevel-Analyzer: .................... 415 Executing CodeRank-Analyzer: ..... 102 Executing Cohesion-Analyzer: ................................ 659 Executing Coupling-Analyzer: ......................... 505 Executing Dependency-Analyzer: ................. 342 Executing Hierarchy-Analyzer: ..................... 425 Executing Inheritance-Analyzer: ..... 120 Executing NPathComplexity-Analyzer: ........................ 493 Executing NodeCount-Analyzer: ................. 342 Executing NodeLoc-Analyzer: ..................... 422 Generating pdepend log files, this may take a moment. Time: 00:04; Memory: 16.50Mb
jdepend.svg
Каждый из «шариков» отображает файлы определенного пакета-папки (в svg-файле при наведении на шарик всплывает подсказка с названием пакета). Размер шарика определяется количеством абстактных и конкретных классов в пакете.
По оси Х откладываются значения коэффициента абстракции (abstraction ratio), по оси Y – коэффициента нестабильности (instability ratio).
Прямая изображает оптимальное соотношение между этими коэффициентами.
Коэффициент абстракции (abstraction ratio, A) – отношение количества абстрактных классов и интерфейсов к общему числу классов в анализируемом пакете. Принимает значение от 0 до 1. Если равно 0, то пакет абсолютно конкретный, если 1 – то абсолютно абстрактный.
Коэффициент центростремительной связности (afferent couplings, Ca) – количество пакетов, которые зависят от классов текущего пакета.
Коэффициент центробежной связности (efferent couplings, Ce) – количество пакетов, от которых зависят классы текущего пакета.
Коэффициент нестабильности (instability ratio, I) – отношение коэффициента центробежной связности к сумме коэффициентов связности: I = Ce / (Ce + Ca). Показывает устойчивость пакета к изменениям. Принимает значение от 0 до 1. Если равен 0, то считается абсолютно стабильным пакетом (вообще не зависит от других пакетов), если 1 – то абсолютно нестабильным (полностью зависимый пакет, от которого не зависят другие).
pyramid.svg
Данные отображены в виде пирамиды, потому что на ее внешних гранях располагаются коэффициенты, полученные как отношение значений характеристики с уровня ниже и текущего уровня. Значения коэффициентов «подкрашены» в зависимости от попадания его в диапазон значений – низкий, средний и высокий.
Т.е., например, 0.176 = CYCLO / LOC.
Теперь подробнее об используемых аббревиатурах.
Слева:
- CYCLO (Cyclomatic Complexity) – цикломатическая сложность пакетов (на основе числа ветвлений в коде типа if, for, foreach).
- LOC (Lines Of Code) – число строк кода.
- NOM (Number Of Methods+functions) – число методов классов + число функций.
- NOC (Number Of Classes) – число классов.
- NOP (Number Of Packages) – число пакетов.
- AHH (Average Hierarchy Height) – средняя глубина иерархии.
- AND (Average Number of Derived classes) – среднее число классов-наследников.
Справа:
- FANOUT (Number of Called Classes) – число использований классов (по-видимому, число созданий объектов классов).
- CALLS (Number of Operation Calls) – число вызовов методов и функций.
Установка PHP Depend и другие инструменты анализа и тестирования кода, такие как Dead Code Detector, PHP Mess Detector, phpDocumentor, PHP CodeBrowser, PHP Copy/Paste Detector, PHPLOC.