
Баг – (от англ. bug – жук) программная ошибка, которая приводит к тому, что программа не всегда правильно (или же всегда не правильно) работает. Следует отличать баги от синтаксических ошибок, которые не позволяют программе скомпилироваться или выполниться и других технических ошибок. Для борьбы с багами есть множество средств, которые ускоряют этот процесс. Считается, что на отладку программу (нахождение и исправление ошибок) у программиста уходит большая часть времени работы. Новые языки, такие как C#, синтаксически решают некоторые проблемы возникновения багов в классическом C++ и других native-языках:
- сквозной проход по блоку switch
- использование неинициализированных переменных в коде
- некорректные приведения типов
Так, бытует утверждение, что использование языка C#, технологии .NET и среды VS ускоряет процесс разработки типичных программ в 5 раз, поскольку в этом наборе есть отличные инструменты для борьбы с багами.
Для того, чтобы вы могли блеснуть знаниями и компьютерной эрудицией в компании, и просто для общего развития предлагаю вам познакомиться, какая есть классификация багов.
Борбаг (Bohr bug) – баг, который проявляется постоянно, стабильно. К таким ошибкам может относиться неправильное логическое условие, ошибка в арифметическом выражении и другие ошибки, на которые не влияет случайность. Такие баги, как правило, находятся проще других.
Гейзенбаг (Heisenbug) – баг, который меняет свои свойства или исчезает при попытке его выявить. Название происходит от принципа неопределенности Гейзенберга, который упрощенно звучит как изменение наблюдаемого объекта в результате самого наблюдения. Такой баг может проявляться в релизе программы, но бездействовать в отладочной версии. Причинами, к примеру, могут быть:
- неинициализированная переменная, которая в режиме отладки занимала память заполненную нулями, а в режиме релиза – случайное значение
- многопоточность в отладочной версии программы и в релизе могут протекать по разному, так может быть невидимой проблема состязания за ресурсы потоков, которые работают медленнее в версии отладки
Мандельбаг (Mandelbug) – баг, который приводит к тому, что работа программы выглядит хаотичной. К таким ошибкам может относиться, например, динамическое выделение памяти переменным, которые не инициализируются. В результате значения переменных получаются практически случайными, и их использование в арифметических операциях приводит к неожиданным и случайным результатам.
Шрёдинбаг (Schroedinbug) – баг, найденный кем-то в исходном коде и осознание того, что с наличием этого бага программа не может правильно работать. После этого эта программа перестает работать правильно. Так, как такие случаи встречаются (и слава Богу!) крайне редко и их изучение по этой причине не представляется возможным – есть только предположения их природы. Такое может произойти при сложной структуре парных ошибок, которые приводят к тому, что одна ошибка компенсирует действие другой. Так система становиться очень чувствительной к изменениям.