Аудит коду проекту на 1С-Бітріксі
Проект працює, але кожна зміна перетворюється в лотерею: правиш форму зворотного зв'язку — ломиться кошик. Новий розробник витрачає тиждень, щоб розібратися в структурі. Швидкість розробки падає з кожним місяцем. Це симптоми накопленого технічного боргу, та аудит коду — спосіб його виміряти, задокументувати та спланувати усунення.
Що перевіряється при аудиті
Аудит Бітрікс-проекту суттєво відрізняється від аудиту довільного PHP-додатку. Бітрікс навязує свої паттерни — компоненти, шаблони, інфоблоки, агенти — та критерії якості прив'язані до них.
Архітектура інфоблоків. Інфоблоки — центральне сховище даних у Бітріксі. Типові проблеми:
- Використання одного інфоблока для різнорідних сутностей (товари та статті в одному місці)
- Властивості типу «Строка» замість «Справочник» або «Привязка до елементу» — неможливість фільтрації та зв'язків
- Відсутність складових індексів на таблицях
b_iblock_element_propertyдля часто використовуваних фільтрів - Зберігання даних в
PREVIEW_TEXT/DETAIL_TEXTзамість окремих властивостей — втрата структурованості
Компоненти та шаблони. Перевіряємо:
- Бізнес-логіка в
template.phpзамістьresult_modifier.phpабо кастомного компонента - Прямі SQL-запити через
$DB->Query()замість ORM або API інфоблоків - Невикористовувані параметри компонентів, копіпаст між шаблонами
- Кастомізація стандартних компонентів через модифікацію ядра (замість
class.phpспадкування)
init.php. Файл /bitrix/php_interface/init.php — головний індикатор здоров'я проекту. На поганих проектах він містить тисячі рядків: обробники подій, функції, класи, SQL-запити — все в одному файлі. На хороших — тільки підключення автолоадера та реєстрація обробників.
Продуктивність запитів. Включаємо $DB->ShowSQLStat = true та аналізуємо кількість SQL-запитів на сторінку. Нормально: 30-80 запитів. Проблема: 300+ запитів через N+1 проблему: виклики CIBlockElement::GetList() в циклі.
Результат аудиту
Звіт містить не абстрактні рекомендації, а конкретний список:
| Проблема | Файл/Модуль | Критичність | Рекомендація |
|---|---|---|---|
| SQL у шаблоні компонента | /bitrix/templates/main/components/.../template.php:45 |
Висока | Вилучити в result_modifier.php, використовувати CIBlockElement::GetList() |
| N+1 при виборці властивостей | Компонент catalog.section (кастомний) |
Висока | Використовувати GetNextElement() з PROPERTY_* у $arSelect |
| init.php 2000+ рядків | /bitrix/php_interface/init.php |
Середня | Декомпозиція на модулі, підключення через автолоадер |
Критичність визначається по впливу на продуктивність, безпеку та вартість підтримки. Звіт пріоритизований — зверху те, що потрібно виправляти першим.
Інструменти
- phpstan / psalm — статичний аналіз, виявлення звернень до неіснуючих методів та властивостей
- PHP_CodeSniffer — перевірка відповідності стандартам кодування
-
Бітрікс «Монітор продуктивності» (
perfmon) — профілювання SQL та PHP - Xdebug + Cachegrind — детальний профайлінг для виявлення вузьких місць
Аудит займає 2-3 робочих дні для середнього проекту. На виході — документ, за яким можна планувати рефакторинг з зрозумілими пріоритетами та оцінками трудозатрат.







