PHP Depend

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

image

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 – то абсолютно нестабильным (полностью зависимый пакет, от которого не зависят другие).

image

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.

Теги: Php depend, Php


Похожие статьи

Модульное тестирование (phpunit)

Модульное тестирование Dependency Injection в Symfony2