Что делать с ошибками, которые не воспроизводятся?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/1376

  •  16-10-2019
  •  | 
  •  

Вопрос

У меня есть тестировщик, у которого во время тестирования возникает ошибка (пока все в порядке), но затем он часто сразу сообщает об этом.Позже мы (разработчики) обнаруживаем, что тестировщик не пытался воспроизвести проблему и (когда его спрашивают) не может найти способ, чтобы это повторилось.

Теперь это все еще ошибки, я не хочу их игнорировать.Но без повторных шагов я как бы застрял.Иногда существует трассировка стека (хотя часто это бесполезно, потому что это компактный фреймворк и в нем нет номеров строк).Но когда он есть, я могу взять трассировку стека, взломать код и начать угадывать, но это не приводит к тестируемым "исправлениям".

Что вы делаете в подобных ситуациях?

Это было полезно?

Решение

Ошибка без контекста - это не ошибка, это случайность. Проблема может быть вашим кодом, это может быть сторонняя библиотека, это может быть аппаратное обеспечение, или это может быть солнечное излучение, заставляющее один бит, который переворачивается самостоятельно. Если вы не можете воспроизвести, по крайней мере, с немного Регулярность (даже если «это происходит раз в 10 или 20 раз, я делаю X»), это не намного лучше, чем ваш тестер говорит вам: «что -то пошло не так - исправить это».

Возможно, вам придется объяснить своему тестеру, что его работа не в том, чтобы просто генерировать ввод, пока что -то не сломается. Если бы это было так, вы могли бы заменить его на генератор случайных чисел. Часть его работы - идентифицировать ошибки, которые влечет за собой определение того, как их производить.

Другие советы

В конечном счете, если ни разработчик, ни тестер не могут воспроизвести ошибку, она должна быть закрыта, но помечена как таковая.

Однако, сколько времени вам понадобится, чтобы добраться до этой точки, спорно.

Некоторые люди утверждают, что если это не будет сразу воспроизводимо, то это должно быть немедленно закрыто.

Я обычно стараюсь попытаться получить больше информации от создателя проблемы. В первоначальном отчете может быть что -то, что они забыли. Разговор о необходимых шагах часто может показать недостающую информацию.

Последняя мысль - закрыта как "без репро" не среднее значение. Если есть реальная проблема, она рано или поздно раскрывается, и иметь всю информацию, которую вы можете помочь, если вы наконец сможете воспроизвести проблему.

Еще несколько предложений:

  1. Добавьте журнал (а не просто клавиш:}) в код вашего продукта. «Никакие резо» ошибки могут быть плавниками, но это может быть коррупцией памяти или состояния, которая возникает только в грязной системе, используемой непредвиденными способами (то есть как компьютер клиентов). Информация о ведении журнала или отслеживания может помочь вам выяснить, что май были неверны, когда тестер нашел случайность.

  2. Сканируйте остальные ошибки «Нет резо» в базе данных (или все, что вы используете для отслеживания ошибок). Часто Flukes объединяются в одной области продукта. Если он выглядит так, как один компонент виноват, код просмотрите компонент для возможного шелушения, добавьте дополнительные журналы в этот компонент - или оба.

  3. Возьмите полчаса или около того и посмотрите тест на тестер. Их подход может дать вам представление о том, что пошло не так (например, «Интересно - я не знал, что вы сможете добраться до этого диалога таким образом»). Вы также можете обнаружить, что они непреднамеренно пропускают диалог или шаг конфигурации. Стоит немного инвестиций, чтобы немного войти в голову.

Я занимаюсь капиталом в большом коммерческом коде, этот раздражающий сценарий возникает слишком часто. Обычно это свидетельствует о том, что у него нет железных материалов для строительства бинарника на всех платформах, которые мы поддерживаем. Поэтому, если разработчик создает свой собственный код (который он должен сделать для отладки и исправления), и не будет следовать той же издании на сборку, что существует вероятность того, что системные ошибки будут выглядеть волшебно исчезнуть (или появиться) Анкет Конечно, эти вещи обычно закрываются с «работами для меня» в базе данных ошибок, и если они выйдут из строя в следующий раз, когда эта проблема будет выполнена, ошибка может быть повторно открыта. Всякий раз, когда я подозреваю, что ошибка может зависеть от системы, я стараюсь проверить ее на различных платформах и сообщаю, в каких условиях это происходит. Часто проблема развращения памяти ONLT появляется, если поврежденные данные имеют достаточно большую величину, чтобы вызвать сбой. Некоторые платформы (комбинации HW и OS) могут потерпеть крах ближе к фактическому источнику коррупции, и это может быть очень ценным для бедного парня, который должен его отладить.

Тестер должен сделать некоторую добавленную стоимость, помимо того, что он просто сообщает, что его система показывает неудачу. Я провожу много времени на проверку ложных срабатываний -может быть, рассматриваемая платформа была перегружена, или у сети был сбой. И да, иногда вы можете получить что -то, на что действительно влияют случайные события времени, аппаратные ошибки часто могут быть похожими на прото: если два запроса данных возвращаются в один и тот же часовой период, а аппаратная логика для обработки потенциального конфликта неисправна, неверна, неверно, неверно, неверно, неверно, неверно, нет. Тогда ошибка появится только периодически. Аналогичным образом, с параллельной обработкой, если только с помощью тщательного дизайна вы не ограничивали решение, независимо от того, какой процессор оказался быстрее, вы можете получить ошибки, которые случаются только один раз в голубой луне, и их статистическая импорищера

Кроме того, наш код обновляется, обычно много раз в день, отслеживая точный номер пересмотра SourceCode, когда он пошел на юг, может быть очень полезной информацией для усилий отладки. Тестер не должен находиться в состязательных отношениях с отладчиками и разработчиками, он является частью команды, чтобы улучшить качество продукта.

Есть два вида ошибок, которые не воспроизводимы:

1) Те, которые тестер (или пользователь) видел один раз, но либо не смог или не пытался воспроизвести.

В этих ситуациях вы должны:

  • Очень кратко проверьте основной курс действий, которые показали дефект, чтобы убедиться, что он не воспроизводим.

  • Поговорите с тестером / пользователем, чтобы увидеть, есть ли какая -либо другая информация, которая может помочь.

  • Перекрестная ссылка на них с любыми другими дефектами, которые могут быть связаны, чтобы увидеть, достаточно ли у вас информации, чтобы изучить их на основе нескольких экземпляров. Вы можете обнаружить, что эта одна проблема не дает вам достаточно информации, чтобы продолжить, однако, в сочетании с рядом других вопросов, это может предложить вам что -то, что не так, что стоит расследовать.

  • Если у вас все еще нет достаточно, чтобы продолжить, вам нужно объяснить пользователю / тестеру, что у вас недостаточно информации. Набросок им вежливо, как будет выглядеть достаточно информации и почему это нужно.

2) Те, где они не могут быть надежно воспроизведены, однако существует достаточно доказательств (с точки зрения повторных случаев), чтобы предположить, что дефект существует, тогда я склонен видеть, что это проблемы разработчика и что разработчик, поддерживаемый тестером / Пользователь - должен исследовать.

Это, вероятно, будет медленным и болезненным, вам, вероятно, придется пройти код, добавить больше журнала, посмотреть данные и поговорить с тестерами / пользователями в глубине, но если есть достаточно доказательств, чтобы предположить, что это, вероятно, там есть Это проблема, которую вам нужно взять на себя ответственность и сделать все, что нужно сделать, чтобы исправить это.

Похоже, это происходит относительно часто - что заставляет меня задуматься, потому что это потому, что большинство ошибок действительно трудно резо по какой -то другой причине, которую он не пытается? Вы знаете Почему Он не пытается воспроизвести проблему? Это потому, что он не понимает, насколько это важно для вас? Или, возможно, у него есть другие давления - менеджер тестирования, который просто хочет, чтобы он быстро прошел отведенные тесты и, например, бросал жуков на стену? Или, может быть, он просто не уверен, как это сделать?

Я согласен с другими, что работа над лучшим журналом является приоритетом. В то же время, если вы подозреваете, что отсутствие навыков/уверенности тестера может быть проблемой, то мне очень нравится эта статья от Дэнни Фаутировал изоляцию ошибок - Вы можете указать ему на это для начала.

Если проблема оказывается связана с давлением управления - у вас есть мои симпатии, так как это сложно взломать, особенно если тестеры и программисты сообщают разным менеджерам, а менеджеры не склонны «помогать» другой команде.

Как правило, я отмечаю, что это не воспроизводимо, но оставляйте его открытым, пока эта партия тестирования или итерации не будет завершена.

Если он не был воспроизведен к этому моменту, он закрыт, но может быть повторно открыт, если оно встретится снова.

установите кейлоггер на рабочую станцию этого тестировщика!

Что ж, первая задача - иметь воспроизводимую тестовую систему. Ваш тестер должен Иметь четко определенный процесс - автоматический, если это вообще возможно.

Есть эти три условия:

  • Тот же бинарный
  • То же самое
  • Та же машина

Если ошибка спорадически появляется с приведенными выше 3 условиями, начните изолировать дальше. Рассмотрим каждый уровень системного стека и его конфигурацию.

Один из способов обнаружения ошибок управления памятью - запустить программу на нескольких OSS с несколькими компиляторами. Valgrind также может помочь.

Однако, как правило, параллельные системы могут вызвать нерепро. Такие вещи, как размеры буферов и скорость обработки, асинхронологическое ввождение, блокировки базы данных, переписывание памяти переменной; Все это может вызвать проблемы. И так далее и так далее.

Прежде всего, у вас должна быть строгая процедура тестирования (но я понимаю вас, в моей компании то, что вы описали, часто случается).

В зависимости от тяжести ошибки, вы можете инвестировать в нее некоторое время или (лучше) игнорировать ее до тех пор, пока не будут предоставлены шаги резо.

Лицензировано под: CC-BY-SA с атрибуция
scroll top