Исправить ошибку с доказанной причиной
Начните с наблюдаемого дефекта. Причину нужно установить до исправления, а результат — проверить исходным сценарием.
Постановка
При двойном клике на «Отправить» создаются две заявки. На медленном соединении ошибка повторяется чаще. Ожидается одна заявка независимо от повторного клика во время отправки.
В постановке полезны шаги воспроизведения и наблюдаемый результат. Гипотезу о причине указывайте отдельно, чтобы её можно было проверить.
Схема процесса
| Этап | Что проверяем | Результат |
|---|---|---|
| Воспроизведение | Получается ли повторить описанный сбой. | Условия, шаги и наблюдение. |
| Исследование причины | Объясняет ли найденная причина именно этот сбой. | Доказательство связи между кодом и наблюдением. |
| Согласование | Достаточно ли доказательств для исправления. | Решение человека. |
| Исправление | Устраняется ли подтверждённая причина в границах задачи. | Изменение кода и проверки. |
| Повторная проверка | Исчез ли дефект в тех же условиях. | Результат исходного сценария и проверка соседнего поведения. |
Почему нужен отдельный этап причины
Отключение кнопки может скрыть один вариант ошибки, но повторный запрос может приходить другим способом. Сначала разберите, где нарушается ожидаемое поведение и какие гарантии должен обеспечивать проект.
Пример проверки: воспроизвести двойной вызов с задержкой ответа и установить, какие обработчики успевают выполниться до изменения состояния отправки.
Подготовка проекта
- Доступный стенд с воспроизводимым сценарием.
- Способ наблюдать результат отправки.
- Проверки обычной отправки, повторного клика и сетевой ошибки.
- Разрешённая область временной инструментации, если она нужна для исследования.
Для debug-процесса область инструментации объявляется заранее в профиле. Временные изменения должны корректно убираться. Подробности — в контракте профиля.
Возвраты и остановки
Причина не доказана. Верните исследование с указанием, какого наблюдения не хватает. Например: «Покажи, что второй вызов происходит до завершения первого запроса».
Исправление ломает повторную попытку. Верните реализацию: после ошибки сети пользователь должен иметь возможность отправить форму снова.
Дефект не воспроизводится. Зафиксируйте условия и запросите недостающие сведения. Предположение о причине не должно превращаться в утверждение, что ошибка исправлена.
Далее: настроить исходы и возвраты.