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.50Mbjdepend.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.