Створення відтворювача багів
Дата оновлення перекладу 2025-01-11
Створення відтворювача багів
Основний репозиторій коду Symfony отримує тисячі звітів про проблеми на рік.
Деякі з цих проблем легко зрозуміти і їх можна виправити без будь-якої іншої інформації.
Однак, інші проблеми набагато складніше зрозуміти, оскільки розробники не можуть
відтворити їх на своїх комп'ютерах. Саме в таких випадках ми попросимо вас створити
«відтворювач багу», тобто мінімальну кількість коду, необхідну для того, щоб при
виконанні з'явився баг.
Відтворення простих багів
- Якщо ви повідомляєте про баг, пов'язаний з якимось компонентом Symfony, що використовується
- поза межами фреймворку Symfony, достатньо поділитися невеликим PHP-скриптом, який при виконанні
показує баг:
1 2 3 4 5 6 7 8 9 10 11 12 13
// Спочатку запустіть "composer require symfony/validator"
// Потім виконайте цей файл:
<?php
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\Validator\Constraints;
$wrongUrl = 'http://example.com/exploit.html?<script>alert(1);</script>';
$urlValidator = new Constraints\UrlValidator();
$urlConstraint = new Constraints\Url();
// URL неправильний, тому var_dump() має відобразити помилку, але він натомість відображає
// "null", тому що немає контексту для побудови порушення валідатора
var_dump($urlValidator->validate($wrongUrl, $urlConstraint));
Відтворення складних багів
Якщо баг пов'язаний з фреймворком Symfony або якщо він занадто складний для створення
PHP-скрипта, краще відтворити баг, створивши новий проект. Для цього виконайте наступні дії:
- Створіть новий проект:
1
$ composer create-project symfony/skeleton bug_app
- Додайте та зафіксуйте зміни, згенеровані Symfony.
- Тепер ви повинні додати мінімальну кількість коду, щоб відтворити баг. Це найскладніша
частина, і вона буде пояснена трохи пізніше. - Додайте і зафіксуйте ваші зміни.
- Створіть новий репозиторій на GitHub (дайте йому будь-яку назву).
- Дотримуйтесь інструкцій на GitHub, щоб додати віддалений репозиторій
origin
до
вашого локального проекту і запустіть його. - Додайте коментар до вашого оригінального звіту про проблему, щоб поділитися URL-адресою
вашого форкованого проекту (наприклад,https://github.com/YOUR-GITHUB-USERNAME/symfony_issue_23567
) і, якщо необхідно, поясніть кроки для відтворення (наприклад, "перегляньте цю URL-адресу", "заповніть ці дані у формі та надішліть їх" тощо).
Додавання мінімально можливої кількості коду
Ключ до створення відтворювача багів полягає в тому, щоб зосередитися виключно на функції, яка, як ви ви підозрюєте, не працює. Наприклад, уявіть, що ви підозрюєте, що баг пов'язаний з визначенням маршруту. Тоді, після створення вашого проекту:
- Не редагуйте жодних опцій конфігурації Symfony за замовчуванням.
- Не копіюйте код вашого оригінального додатку і не використовуйте ту саму структуру контролерів, дій тощо, як у вашому оригінальному додатку.
- Створіть невеликий контролер і додайте своє визначення маршрутизації, яке показує баг.
- Не створюйте і не змінюйте жодних інших файлів.
- Встановіть локальний веб-сервер, наданий Symfony
та скористайтеся командою
symfony server:start
для переходу за новим маршрутом і перевірте, чи з' явиться баг. - Якщо ви бачите баг, ви закінчили і можете поділитися кодом з нами.
- Якщо ви не бачите баг, ви повинні продовжувати вносити невеликі зміни. Наприклад, якщо ваш початковий маршрут був визначений за допомогою XML, забудьте про попередній маршрут і визначте маршрут за допомогою XML замість цього. Або, можливо, ваш додаток реєструє декілька слухачів подій, і саме в них і є баг. У такому випадку додайте слухача подій, схожого на ваш реальний додаток, щоб перевірити, чи зможете ви знайти баг.
Коротше кажучи, ідея полягає в тому, щоб продовжувати додавати невеликі та поступові зміни до нового проекту доки ви не зможете відтворити баг.