Вы когда-нибудь смотрели фильм Поймай меня, если сможешь? Речь идет об опытном фальшивомонетчике, который работал врачом, юристом и пилотом. Агент ФБР становится одержимым поиском мошенника, и история продолжается. Heisenbug — это что-то вроде этого, и в этом посте мы поближе познакомимся с такими жуками.

Согласно Википедии, гейзенбаг — это программная ошибка, которая исчезает или меняет свое поведение, когда кто-то пытается ее изучить. Этот термин является каламбуром имени Вернера Гейзенберга, физика, который первым заявил об эффекте наблюдателя в квантовой механике, согласно которому акт наблюдения за системой неизбежно изменяет ее состояние.

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

Причины

  • компилятор: оптимизирующий компилятор может вызвать ошибку, а неоптимизирующий компилятор — нет.
  • Время: задержка между операциями может быть больше или меньше, чем в рабочей среде.
  • Память: во время отладки адреса переменных могут измениться; работающий код, скомпилированный без оптимизации, также может привести к перемещению некоторых переменных из регистров в ОЗУ, и это в некоторых языках/компиляторах может повлиять на точность, используемую для сравнений с плавающей запятой.
  • Переменные. В некоторых случаях использование неинициализированных переменных может вызвать ошибку.
  • Соревнования: существенное поведение системы зависит от последовательности или времени других неконтролируемых событий. Это становится ошибкой, когда одно или несколько возможных действий нежелательны.
  • Побочный эффект: операция, функция или выражение могут изменять некоторые значения переменных состояния за пределами своего локального окружения, то есть иметь наблюдаемый эффект, помимо возврата значения (основной эффект) в инициатор операции.

Обнаружить и исправить

  • Журналы. собирайте журналы, события и другие диагностические данные для любых программных систем, связанных с ошибкой, и объединяйте их в одном месте.
  • Воспроизведите среду. На основе журналов и событий попробуйте повторить одни и те же действия в одной и той же среде много раз, чтобы увидеть ошибку один раз.
  • Проверка генераторов случайных чисел. Попробуйте проверить это, смоделировав генераторы случайных чисел и отследив случайные результаты.
  • Проверьте внешние условия:Проверьте другие программы, которые работали в момент возникновения ошибки, также иногда причиной может быть повреждение ОЗУ, ЦП или жесткого диска.
  • Утечки памяти.Утечка памяти также может произойти, когда объект хранится в памяти, но к нему не может получить доступ работающий код.
  • Тесты. Проведите несколько тестов, таких как Тестирование системы, Стресс-тестирование и Тестирование производительности, чтобы увидеть, работает ли программное обеспечение нормально или нет.

Заключительные слова…

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