Статический анализ и метрики PHP-кода
Статический анализ кода — процедура, выполняемая над исходниками программы с целью выявления метрик программного обеспечения. Соответственно, статический анализатор — это утилита, выполняющая данную процедуру. Метрики программного обеспечения — это просто сумма каких-то последовательностей или фрагментов кода, найденные в анализируемом источнике. Например, цикломатическая сложность — это всего лишь сумма всех логических элементов(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 классов, то кто-то с чем-то перемудрил. С точки зрения качества программного обеспечения могут иметь ценность такие метрики как цикломатическая сложность, количество прокомментированных строк кода, число методов и атрибутов класса, а также покрытие кода тестами. На их обработке проще всего составить представление о качестве разрабатываемого продукта, поэтому нередко их используют в системах непрерывной интеграции и доставки.
На самом деле, как их лучшим способом использовать — это открытый вопрос, и все ограничивается лишь вашей фантазией.
Comments