Логотип HuTor Tech HuTor Tech
← Усі записи

· hutor.tech

Як провести аудит легаси-коду на PHP

Як провести аудит легаси-коду на PHP

Аудит відповідає на три питання: що зламається, що коштуватиме грошей і що можна полагодити дешево. Усе інше — думки. Ми вкладаємо аудит приблизно в тиждень і завершуємо документом, за яким може діяти нетехнічний власник.

Почніть із фактів, які збирає машина. Версії PHP і фреймворка проти дат завершення підтримки; кількість файлів і рядків; найбільші класи; скільки коду у vendor, а скільки вашого; чи є тести і чи проходять вони. `composer audit` і `npm audit` за хвилини дадуть відомі вразливості, а PHP без підтримки — зазвичай найдорожча знахідка всього звіту.

Далі шукайте форми, що віщують біду:
— SQL, зібраний конкатенацією рядків із даними запиту всередині;
— паролі, захешовані md5 або sha1, чи не захешовані взагалі;
— облікові дані, закомічені в репозиторій;
— завантаження файлів, що довіряє MIME-типу від клієнта;
— один файл на кілька тисяч рядків, від якого залежить усе решта;
— каталог `vendor`, правлений руками, — `composer install` зітре ці правки.

Запускайте застосунок, а не лише читайте його. Увімкніть лог запитів на реальній сторінці й порахуйте їх: N+1 — найпоширеніший дефект продуктивності в успадкованому коді й найлегший для демонстрації. Дивіться в лог повільних запитів. Прогоніть найважчу сторінку через профайлер один раз — і зазвичай виявиться, що за очікування відповідає одна колонка без індексу, а не фреймворк.

Перевіряйте експлуатацію з тією ж серйозністю, що й код: резервні копії (і чи відновлював їх хоч хтось), розгортання (скрипт чи людина з FTP), логи, моніторинг, тестовий сервер. Охайний код, який розгортають руками опівночі, небезпечніший за неохайний із конвеєром.

Пишіть звіт для того, хто платить. Згрупуйте знахідки за ризиком, поставте біля кожної приблизну ціну і відокремте «треба лагодити зараз» від «варто зробити, поки ми тут». Додайте два-три швидкі здобутки, які знайшли, — індекс, заголовок кешування, оновлення, — щоб перший рахунок уже купував щось видиме.

Аудит закінчується планом, а не вироком. Переписати з нуля майже завжди неправильна відповідь: легаси-код бридкий тому, що містить роки бізнес-правил, які більше ніде не записані.