PHP: PHP metrics. Инструмент оценки сложности и maintainability кода. Часть 1 | Глазами фрилансера - HD
00:49:32
Обнаружено блокирование рекламы на сайте
Для существования нашего сайта необходим показ рекламы. Просим отнестись с пониманием и добавить сайт в список исключений вашей программы для блокировки рекламы (AdBlock и другие).
12n.ru 18463 ролика
2073 просмотра на сайте 12n.ru
PHP metrics. Инструмент оценки сложности и maintainability кода. Часть 1 | Глазами фрилансера -.
Есть ли объективный способ оценить чистоту кода, его сложность и способность к развитию (maintainability)? Есть. Его предоставляет нам, в частности, пакет PHP metrics, использующий набор математически и статистически обоснованных методов такой оценки.
Давайте посмотрим, как такой анализ выглядит и как читать отчёты PHP metrics.
Содержание ролика «Анализируй это! PHP metrics. Часть 1»:
00:00 Наихудший и наилучший методы анализа кода. Статические анализаторы.
05:40 Возможен ли анализ сложности и способности к развитию кода. Открываем отчёт PhpMetrics о плохом коде.
08:15 Читаем диаграмму Maintainability/Complexity.
11:35 Другие элементы главной страницы отчёта.
16:10 Раздел Violations (нарушения) отчёта PhpMetrics.
20:15 Раздел Size & Volume (размер и объём). Словарный запас кода.
29:00 Что такое объём метода и класса? Каким он должен быть?
34:40 Логические строки кода, вес комментариев и другие метрики оценки размера и объёма кода.
39:15 Раздел Complexity & Defects (сложность и дефекты). Цикломатическая сложность. Дефекты Кена.
44:15 Раздел Object oriented metrics (объектно ориентированные метрики).
45:45 Раздел Object relations (отношения между объектами) отчёта PhpMetrics.
46:15 Начинаем разговор о Coupling.
47:40 И тут же заканчиваем. Просьба о помощи в подготовке второй части разговора о PhpMetrics.
Полезные ссылки:
➡ phpmetrics.github.io/website/ — сайт библиотеки PhpMetrics
➡ phpmetrics.github.io/website/metrics/ — описание метрик
Получать анонсы новых видео можно на нашем телеграм-канале «Глазами фрилансера»: t.me/freelancer_eyes
#ГлазамиФрилансера
Давайте посмотрим, как такой анализ выглядит и как читать отчёты PHP metrics.
Содержание ролика «Анализируй это! PHP metrics. Часть 1»:
00:00 Наихудший и наилучший методы анализа кода. Статические анализаторы.
05:40 Возможен ли анализ сложности и способности к развитию кода. Открываем отчёт PhpMetrics о плохом коде.
08:15 Читаем диаграмму Maintainability/Complexity.
11:35 Другие элементы главной страницы отчёта.
16:10 Раздел Violations (нарушения) отчёта PhpMetrics.
20:15 Раздел Size & Volume (размер и объём). Словарный запас кода.
29:00 Что такое объём метода и класса? Каким он должен быть?
34:40 Логические строки кода, вес комментариев и другие метрики оценки размера и объёма кода.
39:15 Раздел Complexity & Defects (сложность и дефекты). Цикломатическая сложность. Дефекты Кена.
44:15 Раздел Object oriented metrics (объектно ориентированные метрики).
45:45 Раздел Object relations (отношения между объектами) отчёта PhpMetrics.
46:15 Начинаем разговор о Coupling.
47:40 И тут же заканчиваем. Просьба о помощи в подготовке второй части разговора о PhpMetrics.
Полезные ссылки:
➡ phpmetrics.github.io/website/ — сайт библиотеки PhpMetrics
➡ phpmetrics.github.io/website/metrics/ — описание метрик
Получать анонсы новых видео можно на нашем телеграм-канале «Глазами фрилансера»: t.me/freelancer_eyes
#ГлазамиФрилансера
развернуть свернуть
— Volume до 8000 на класс — наверно, это много, даже как для критического показателя. И не обращаем внимание на цвет. Даже при хороших показателях, они будут иметь синий фон. Смотрим только на число.
— Самым полезным для меня оказалась цикломатическая сложность классов и методов. Сразу было видно, с чего начать рефакторинг, ну или, как минимум, на что обратить внимание. И помним, главное — не фанатеть :)
— А вот пример «плохо поддерживаемого класса». Я догадываюсь, почему так выходит. Слишком много публичных методов. Но выносить relations в какой-нибудь trait у меня рука не поднялась. Меня, кстати, удивило то, что scopes в Laravel прописываются в Model, а не в ModelQuery. В Yii2 это показалось более логичным, так как это автоматически разгружало модель. Хотя только что посмотрел и в Laravel это делается также простым переопределением query() с возвратом Query builder для определённой модели. Только вот примеров таких я ещё не встречал, по этому и подумал, что так просто не принято.
Но суть не в этом, а том, что класс плохо поддерживаемый :)
class Box extends Model
{
use SoftDeletes;
use SeoMetaModelTrait;
protected $table = 'box';
protected $casts = [
'name' => 'array',
'description' => 'array',
'date' => AsDate::class,
'datetime' => AsDatetime::class,
'image' => AsImage::class. ':widen_100|widen_500',
'images_list' => AsImages::class. ':widen_100|widen_500',
];
public function brand(): BelongsTo
{
return $this->belongsTo(Brand::class, 'brand_id')->withTrashed();
}
public function variations(): HasMany
{
return $this->hasMany(Variation::class, 'box_id')->orderBy('sort_index');
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class, 'box_category_ref', 'box_id', 'category_id')->withTrashed();
}
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class, 'box_tag_ref', 'box_id', 'tag_id')->withTrashed();
}
public function scopePublished(Builder $query): void
{
$query->where('datetime', '<=', date('Y-m-d'));
}
}
Как я понял, более всего phpmetrics невзлюбил классы, чьи методы используют переменные, находящиеся в глобальной видимости.
Я много раз читал, о том что это плохо. Но всё равно пользуюсь, ибо на практике c ними легче, если их немного.
Например, $env, $user. Это вроде как «Будешь так делать, прыщи вырастут. А от Денди кинескоп сядет».:)
Но есть вещи, которые меня заставили пересмотреть свои взгляды. Например, классы раздутые обилием методов.
Это произошло в силу того, что не очень хорошо получилось освоить ООП. Вместо наследования я избыточно использую композицию.
В php вообще сложно осваивать ООП. Вникнуть в эту парадигму помог опыт написания кода на C# в Unity.