Создание воспроизводителя багов
Создание воспроизводителя багов
Главное хранилище кода Symfony получает тысячи сообщений об ошибках каждый год. Некоторые из этих проблем такие очевидные и простые для понимания, что базовые разрсботчики 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 require symfony/skeleton bug_app
- Теперь вы должны добавить минимальное количество кода, чтобы воспроизвести баг. Это самая сложная часть и она разъясняется больше далее.
- Добавьте и зафиксируйте свои изменения.
- Создайте новое хранилище на GitHub (дайте ему любое имя).
- Следуйте инструкциям на GitHub, чтобы добавить удалённый
origin
к вашему локальному проекту и закрепите его. - Добавьте комментарий к вашему исходному заявлению о проблеме, чтобы поделиться
URL вашего отвевтлённого проекта (например,
https://github.com/YOUR-GITHUB-USERNAME/symfony_issue_23567
) и, если необходимо, объясните шаги для воспроизведение (например, "перейдите по этому URL", "заполните эти данные в форме и отправьте её" и т.д.)
Добавление минимально возможного количества кода
Клюс к созданию воспроизводителя бага кроется в фокусировании на функции, которую вы подозреваете в ошибке. Например, представьте, что вы подозреваете, что баг относится к определению маршрута. Далее, после ответвления стандартной версии Symfony:
- Не редактируйте никакие опции конфигурации Symfony по умолчанию.
- Не копируйте исходный код вашего приложения и не используйте ту же структуру пакетов, контроллеров, действий и т.д., как в вашем исходном приложении.
- Создайте простой контроллер и добавьте ваше определение маршрутизации, отображающее баг.
- Не создавайте и не изменяйте любой другой файл.
- Выполните
composer require server
и используйте командуserver:run
, чтобы перейти по новому маршруту и увидеть, появляется ли баг. - Если вы видите баг, то вы закончили и уже можете делиться кодом с нами.
- Если вы не видите баг, то вам нужно продолжать делать маленькие изменения. Например, если ваш исходный маршрут был определён, используя XML, забудьте о предыдущем маршруте и определите его используя XML. Или может ваше приложение регистрирует некоторые слушатели событий и именно в этом заключается баг. В таком случае, добавьте слушатель событий, схожий с вашим настоящим приложением, чтобы увидеть, сможете ли вы найти баг.
Короче говоря, идея в том, чтобы добавлять маленькие постепенные изменения к стандартной версии Symfony по умолчанию, пока вы не воспроизведёте баг.