Задавая вопрос о проблеме, источник которой вы видите в своем коде, можно рассчитывать на получение гораздо более качественных ответов, если привести код, с помощью которого участники смогут воспроизвести проблему. Такой пример кода должен быть:
- минимальным — максимально сократите код, сохранив все проблемные моменты;
- самодостаточным — приведите все части кода, необходимые для воспроизведения проблемы;
- воспроизводимым — проверьте, что используя приведенный пример кода, другие участники смогут воспроизвести проблему.
Минимальность
Чем больше кода в вопросе, тем меньше шансов понять вашу проблему. Упростите ваш пример, руководствуясь одним из двух способов.
- Начните с нуля. Создайте новую программу, куда войдет только то, что необходимо, чтобы понять проблему. Это ускорит нахождение проблемы в случаях, когда, по вашему мнению, источник проблемы вам уже известен. Данный подход также крайне эффективен в случае, когда вы не можете привести весь код по причинам юридического или этического характера.
- Разделяй и властвуй. Если код небольшой, но источник проблемы неясен, начните сокращать его по частям, пока проблема не исчезнет — тогда верните последний удаленный фрагмент.
Минимально, но внятно
Минимально не значит сжато — не надо жертвовать информативностью ради краткости.
Соблюдайте последовательность наименований, используйте отступы и приводите комментарии, если нужно объяснить какие-то части кода. В большинстве редакторов есть комбинации для форматирования кода — узнайте их и используйте! Помните, не стоит использовать символы табуляции — возможно, в вашем редакторе они смотрятся неплохо, но на Stack Overflow они портят презентационный вид вопроса.
Самодостаточность
Убедитесь, что вы указали все необходимое, чтобы воспроизвести проблему.
- Иногда, участники используют код из вопроса, чтобы проверить решения, которые планируют опубликовать как ответы.
- Проблема может быть совсем не в той части кода, в которой вы думали, а совершенно в другом месте.
Если проблема требует добавления в вопрос кода сервера или XML–файл конфигурации, добавьте и то, и другое. Если проблема с веб-страницей, и для решения нужен HTML-код, что–то из JavaScript и таблица стилей — добавьте в вопрос и первое, и второе, и третье.
Воспроизводимость
Чтобы помочь вам с проблемой, участникам необходимо убедиться, что она действительно существует.
- Опишите проблему. «Это не работает» — не является описанием проблемы. Расскажите, что именно вы хотите получить в результате. Приведите точное сообщения об ошибке (слово в слово), укажите на проблемную строку в коде. Суммируйте суть проблемы в заголовок вашего вопроса.
- Предупредите возникновение любых вопросов, не относящихся к проблеме. Если компиляция не является темой вашего вопроса, убедитесь, что в вопросе нет упоминаний об ошибках на стадии компиляции. Используйте программы, такие как JSLint, чтобы валидировать интерпретируемые языки. Проверьте корректность HTML и XML.
- Убедитесь, что пример действительно воспроизводит проблему! Если вы случайно решили проблему, но не проверили воспроизводится ошибка или нет, лучше узнать об этом до того, как попросите помощи у сообщества.
Перезагрузка операционной системы или проверка составленного примера на чистой установке поможет понять, можно ли пользуясь информацией из публикуемого вопроса воспроизвести ошибку.
Узнать больше о том, как отладить программу, чтобы составить минимальный пример, можно из чудесной статьи в блоге Эрика Липперта по теме Как отладить небольшую программу (перевод статьи).