Вы когда-нибудь смотрели фильм Поймай меня, если сможешь? Речь идет об опытном фальшивомонетчике, который работал врачом, юристом и пилотом. Агент ФБР становится одержимым поиском мошенника, и история продолжается. Heisenbug — это что-то вроде этого, и в этом посте мы поближе познакомимся с такими жуками.
Согласно Википедии, гейзенбаг — это программная ошибка, которая исчезает или меняет свое поведение, когда кто-то пытается ее изучить. Этот термин является каламбуром имени Вернера Гейзенберга, физика, который первым заявил об эффекте наблюдателя в квантовой механике, согласно которому акт наблюдения за системой неизбежно изменяет ее состояние.
С помощью таких методологий и концепций, как TDD и утверждение, мы можем отловить большинство ошибок и устранить их, но некоторые ошибки появляются в производственной среде и наносят нам удар в самый неподходящий момент. Чаще всего эти ошибки появляются из-за внешних элементов, которые программист практически не контролирует.
Причины
- компилятор: оптимизирующий компилятор может вызвать ошибку, а неоптимизирующий компилятор — нет.
- Время: задержка между операциями может быть больше или меньше, чем в рабочей среде.
- Память: во время отладки адреса переменных могут измениться; работающий код, скомпилированный без оптимизации, также может привести к перемещению некоторых переменных из регистров в ОЗУ, и это в некоторых языках/компиляторах может повлиять на точность, используемую для сравнений с плавающей запятой.
- Переменные. В некоторых случаях использование неинициализированных переменных может вызвать ошибку.
- Соревнования: существенное поведение системы зависит от последовательности или времени других неконтролируемых событий. Это становится ошибкой, когда одно или несколько возможных действий нежелательны.
- Побочный эффект: операция, функция или выражение могут изменять некоторые значения переменных состояния за пределами своего локального окружения, то есть иметь наблюдаемый эффект, помимо возврата значения (основной эффект) в инициатор операции.
Обнаружить и исправить
- Журналы. собирайте журналы, события и другие диагностические данные для любых программных систем, связанных с ошибкой, и объединяйте их в одном месте.
- Воспроизведите среду. На основе журналов и событий попробуйте повторить одни и те же действия в одной и той же среде много раз, чтобы увидеть ошибку один раз.
- Проверка генераторов случайных чисел. Попробуйте проверить это, смоделировав генераторы случайных чисел и отследив случайные результаты.
- Проверьте внешние условия:Проверьте другие программы, которые работали в момент возникновения ошибки, также иногда причиной может быть повреждение ОЗУ, ЦП или жесткого диска.
- Утечки памяти.Утечка памяти также может произойти, когда объект хранится в памяти, но к нему не может получить доступ работающий код.
- Тесты. Проведите несколько тестов, таких как Тестирование системы, Стресс-тестирование и Тестирование производительности, чтобы увидеть, работает ли программное обеспечение нормально или нет.
Заключительные слова…
В конце концов, лучший способ справиться с ошибками — узнать о них больше, поэтому попробуйте поискать в Интернете «странные ошибки» и узнайте, как другие люди обнаруживают их и справляются с ними.