Блог о программировании

Статический анализ и метрики PHP-кода

Категория: DevOps
 17 июня 2017 г. 20:43

Статический анализ кода — процедура, выполняемая над исходниками программы с целью выявления метрик программного обеспечения. Соответственно, статический анализатор — это утилита, выполняющая данную процедуру. Метрики программного обеспечения — это просто сумма каких-то последовательностей или фрагментов кода, найденные в анализируемом источнике. Например, цикломатическая сложность — это всего лишь сумма всех логических элементов(if, for, while, case и т. д.) в анализируемом фрагменте. Самой же простой и понятной метрикой программного обеспечения является количество строк кода программы.

Для PHP-кода можно собирать очень много различных метрик. Некоторые метрики собираются на уровне всего приложения, некоторые для конкретного класса или пакета, а некоторые и вовсе анализируют лишь конкретный файл или функцию.

Список уже существующих метрик приведен ниже.

Название Сокращение Краткое описание Метрики чего собирает
Проект Пакет Файл Класс Метод
Average Hierarchy Height ahh Средняя глубина иерархий +
Average Number of Derived Classes andc Среднее число классов-наследников +
Affering Coupling ca Количество классов и интерфейсов из других пакетов зависящих от классов текущего пакета +
Coupling Between Objects cbo Число классов которые связанны с текущим классом +
Cyclomatic Complexity Number ccn Количество линейно независимых маршрутов + +
Efferent Coupling ce Количество классов использующих текущий класс +
Class Interface Size cis Число публичных методов и атрибутов класса +
Comment Lines of Code cloc Число прокомментированных строк кода + + + +
Number of Abstract Classes clsa Число абстрактных классов +
Number of Concrete Classes clsc Число конкретных классов +
Class Size csz Число методов и атрибутов класса +
Depth of Inheritance Tree dit Глубина наследования для корневого класса +
Executable Lines of Code eloc Число выполняемых строк кода + + + +
Number of Fanouts fanout Количество уровней ветвления +
Number of Leaf Classes leafs Число классов, объявленных как final +
Logical Lines Of Code lloc Число логических строк кода + + + +
Lines Of Code loc Число строк кода + + + +
Max Depth of Inheritance Tree maxDIT Максимальная глубина наследования +
Number Of Added Methods noam Количество добавленных методов +
Number Of Child Classes nocc Количество дочерних классов +
Number Of Overwritten Methods noom Число переписанных методов +
Non Comment Lines Of Code ncloc Количество не прокомментированных строк кода + + + +
Number Of Classes noc Количество классов + +
Number Of Functions nof Количество функций + +
Number Of Interfaces noi Количество интерфейсов + +
Number Of Methods nom Количество методов + + +
Number Of Public Methods npm Количество публичных методов +
NPath Complexity npath Количестве ациклических путей выполнения через текущий метод +
Number of Packages nop Число пакетов +
Number of Root Classes roots Количество корневых классов +
Properties vars Количество атрибутов +
Inherited Properties varsi Количество наследуемых атрибутов +
Non Private Properties varsnp Количество публичных атрибутов +
Weighted Method Count wmc Сумма сложностей методов класса +
Inherited Weighted Method Count wmci Сумма сложностей наследуемых методов +
Non Private Weighted Method Count wmcnp Сумма сложностей публичных методов +

В мире программирования сложно оценить качество написанного разработчиком кода, сложно выявить его производительность. В связи с этим, метрики могут использоваться как для косвенных оценок труда разработчика, так и для оценок качества программного продукта. Например, утрированно, если в программе, выводящей на экран «Hello, World!» 50 классов, то кто-то с чем-то перемудрил. С точки зрения качества программного обеспечения могут иметь ценность такие метрики как цикломатическая сложность, количество прокомментированных строк кода, число методов и атрибутов класса, а также покрытие кода тестами. На их обработке проще всего составить представление о качестве разрабатываемого продукта, поэтому нередко их используют в системах непрерывной интеграции и доставки.

Теги:  PHP  ci  cd  php7 

Поделиться статьей

Оставить комментарий