Pull to refresh

Подробнее об анализаторе исходного кода PHP Depend

Reading time 4 min
Views 5.4K
image В одном из обзоров на Хабре уже упоминался анализатор кода PHP Depend (http://pdepend.org/). В данном материале хотелось бы рассмотреть небольшой пример его использования и интерпретации результатов.

Установка


Итак, начнем с начала – с установки. Для работы PHP Depend необходимо наличие PEAR.

Регистрируем канал pdepend в pear:
94:bin sergeypanarin$ ./pear channel-discover pear.pdepend.org
Adding Channel "pear.pdepend.org" succeeded
Discovery of channel "pear.pdepend.org" succeeded


Устанавливаем:
94:bin sergeypanarin$ ./pear install pdepend/PHP_Depend-beta
Did not download optional dependencies: pecl/imagick, use --alldeps to download automatically
pdepend/PHP_Depend can optionally use package "pecl/imagick" (version >= 2.2.0b2)
downloading PHP_Depend-0.9.9.tgz ...
Starting to download PHP_Depend-0.9.9.tgz (291,705 bytes)
.............................................................done: 291,705 bytes
install ok: channel://pear.pdepend.org/PHP_Depend-0.9.9



Проверяем правильность установки:
94:bin sergeypanarin$ ./pdepend --version
PHP_Depend 0.9.9 by Manuel Pichler


Запускаем тестовый прогон на исходниках самого анализатора:
94:bin sergeypanarin$ ./pdepend --summary-xml=/Users/sergeypanarin/PDepend/summary.xml --jdepend-chart=/Users/sergeypanarin/PDepend/jdepend.svg --overview-pyramid=/Users/sergeypanarin/PDepend/pyramid.svg /Users/sergeypanarin/PEAR/PEAR/PHP/Depend
PHP_Depend 0.9.9 by Manuel Pichler

Parsing source files:
............................................................ 60
............................................................ 120
................................. 153

Executing CyclomaticComplexity-Analyzer:
............................................................ 1200
...... 1335

Executing ClassLevel-Analyzer:
............................................................ 1200
1204

Executing CodeRank-Analyzer:
........ 180

Executing Coupling-Analyzer:
............................................................ 1200
................. 1545

Executing Dependency-Analyzer:
......................................................... 1160

Executing Hierarchy-Analyzer:
............................................................ 1200
........ 1370

Executing Inheritance-Analyzer:
...................... 443

Executing NodeCount-Analyzer:
........................................................ 1123

Executing NodeLoc-Analyzer:
............................................................ 1200
... 1276

Executing NPathComplexity-Analyzer:
............................................................ 1200
...... 1335

Generating pdepend log files, this may take a moment.

Time: 00:27; Memory: 48.00Mb

Получившиеся файлы можно скачать отсюда — results_0.zip

Интерпретация результатов


В состав результатов входят 3 файла:
  1. summary.xml – полные результаты анализа исходников
  2. jdepend.svg
  3. pyramid.svg

На двух последних файлах остановимся подробнее.
jdepend.svg

image
Каждый из «шариков» отображает файлы определенного пакета-папки (в 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

image

Данные отображены в виде пирамиды, потому что на ее внешних гранях располагаются коэффициенты, полученные как отношение значений характеристики с уровня ниже и текущего уровня. Значения коэффициентов «подкрашены» в зависимости от попадания его в диапазон значений – низкий, средний и высокий.

Т.е., например, 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) – число вызовов методов и функций.

P.S. С наступившим Новым Годом всех и наступающим Рождеством!
Tags:
Hubs:
+3
Comments 12
Comments Comments 12

Articles