Какова процедура отладки производственной ошибки?

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

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

Итак, какова процедура отслеживания проблемы, которая возникает только на производственных машинах? Есть ли для этого стандартная методология или, возможно, категория / семейство инструментов?

Ошибка, вызвавшая этот вопрос, уже исправлена, но это произошло скорее благодаря удаче, чем твердому подходу к отладке. Я задаю этот вопрос на будущее.

РЕДАКТИРОВАТЬ:
Ответ на этот вопрос, кажется, можно резюмировать одним словом: ведение журнала. Единственная проблема с ведением журнала заключается в том, что оно требует предусмотрительности. Что, если в существующей системе возникнет ситуация с плохим ведением журнала, или если клиент беспокоится о конфиденциальных данных и не хочет иметь обширные системы ведения журнала в первую очередь?

Некоторые связанные вопросы:
Тестовые учетные записи и продукты в производственной системе
Запуск теста на производственном коде / сервере


person Pops    schedule 10.06.2010    source источник


Ответы (7)


В дополнение к ведению журнала, что бесценно, вот некоторые другие методы, которые я и мои коллеги использовали на протяжении многих лет ... возвращаясь к 16-битным окнам на клиентских машинах, к которым у нас не было доступа. (Я встречался с самим собой?) Конечно, не все может / будет работать.

  • Проанализируйте любое поведение, которое вы видите.
  • Воспроизвести, если возможно, воспроизвести его.
  • Проверка на столе, просмотр кода, который вы подозреваете.
  • Резиновая уточка с членами команды И людьми, которые мало или совсем не знакомы с кодом. Чем больше вам придется что-то кому-то объяснять, тем больше у вас шансов что-то раскрыть.
  • Не расстраивайтесь. Сделайте перерыв 5-10 минут. Совершите быструю прогулку по зданию / улице / чему-то еще. Пока не думай о проблеме.
  • Слушайте свои инстинкты.
person DevSolo    schedule 10.06.2010

Это один из самых сложных сценариев отладки. Ответ будет зависеть от деталей производственной системы. Это система, над которой вы полностью контролируете? Или он установлен на клиентском компьютере, и вам нужно пройти через многочисленные телефонные звонки только для того, чтобы получить доступ к файлу журнала или изменить параметр конфигурации?

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

person kgiannakakis    schedule 10.06.2010

Я бы начал с небольших, легко проверяемых различий между производственной и тестовой версией. Удалите очевидные вещи, такие как разрешения, брандмауэры, различные версии и т. Д., Путем фактического тестирования. Однажды я срезал углы и сказал о, этого не может быть, это так.

Затем я отдаю приоритет более дорогим тестам по вероятности и стоимости. Будь креативным. Подумайте о действительно странных вещах, которые могут вызвать такое поведение.

person Robert Wohlfarth    schedule 10.06.2010
comment
здорово выявить то, чего не может быть или это невозможно !. Все мы знаем, что произошло, когда Люк упомянул об этом ... - person DevSolo; 10.06.2010

Как правило, «отладка» [т.е. присоединение к процессу и проверка выполнения] неосуществима - по многим причинам, не последней из которых является конфиденциальность данных [например, разработчики редко имеют квалификацию \ допуск для проверки данных, которыми мы манипулируем]

Обычно это сводится к выводу о казни из вторичных источников и артефактов. Тогда это сводится к ...

  • Логирование,
  • Логирование,
  • Логирование,

Подавляющее большинство программного обеспечения, написанного в наши дни, относится к лагерям Java или .Net, поэтому используйте log4j и log4net соответственно.

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

person johnny g    schedule 10.06.2010

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

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

person Dr. Snoopy    schedule 10.06.2010

Наряду с ведением журнала есть и другие методы, включая сохранение данных запроса, которые вы затем можете передать в свою «идентичную» систему. Это может быть так же просто, как сохранение каждого полученного HTTP-запроса в файл для последующего анализа. Прямо сейчас вы, вероятно, регистрируете большую часть этой информации (особенно URL-адреса для GET), вам просто нужно добавить в смесь заголовки и тела запроса.

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

person Will Hartung    schedule 10.06.2010

Некоторые советы:

  • Будьте готовы к тому, что ошибка может быть вызвана несколькими причинами, поэтому постарайтесь не ограничивать свое внимание поиском только одной причины.
  • Используйте обработчик необработанных ошибок, который будет отслеживать ошибки и объединять похожие дефекты (greylog, ELMAH).
  • Рассмотрите возможность посмертной отладки с помощью файлов мини-дампа.
  • Установите фиксированные временные рамки для быстрого и грязного подхода, а затем используйте систематический подход.
  • Попробуйте проверить код неисправного модуля вместе с одним из ваших коллег. Свежий взгляд может быть полезен.
  • Разделяй и властвуй, используя свою систему контроля версий (GIT, SVN).
  • Будьте осторожны с исправлениями, потому что около 4% всех исправлений приводят к появлению новых ошибок.
  • Не позволяйте давлению с целью быстрого исправления ошибок в производственной среде вынудить вас отказаться от стандартных процедур контроля качества (например, проверки кода).
  • После исправления убедитесь, что вы написали автоматические тесты на случай, если ошибка вернется через некоторое время.
person 0lukasz0    schedule 27.06.2013