Баг
Историки до сих пор спорят, как называть эту войну: третья космическая (или четвертая), а может, Первая межзвездная. Мы же называем ее просто войной с багами
Starship troopers
Баг (англ. bug — жук, мелкое насекомое) — распространенное среди программистов название ошибок в программах.
Следует отличать баг от глюка, который есть не что иное, как симптом бага, вызывающий у юзера нервно-истерическую реакцию.
Также имеется производное от «баг» понятие «бага». «Бага» — то же самое, что и «баг», только женского рода. Считается, что фиксить «багу» приятнее, чем «баг».
История
Версии:
- По легенде, 9 сентября 1945 года учёные Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле, и Грейс Хоппер сгоряча сморозила сей термин. Извлечённое насекомое было вклеено в технический дневник с сопроводительной надписью: «First actual case of bug being found». Этот забавный факт положил начало использованию слова «баг» в значении «ашипка».
- Есть и версия, по которой термин родился гораздо раньше, когда Эдисон искал таракана в фонографе. Но там его не было, баг был в самом устройстве!
- По другой версии, виной тому случай, произошедший 9 сентября 1947, а не 1945 года. Слово «bug» в современном значении употреблялось задолго до этого. Так, в течение Второй мировой войны словом «bugs» назывались проблемы с радарной электроникой.
- По самой приземленной версии, слово произошло от английского глагола to bug (пилить, беспокоить, стоять над душой), или бранного слова bugger (черт побери).
Впоследствии слово баг было перенято всеми хоть каким-то образом приобщенными к компьютерам людьми и его значение в каждом конкретном случае стало разным. Но понятие ашипки по-прежнему является обобщающим для всех этих значений, алсо, 9 сентября отмечается День тестировщика.
Легенды
Самый известный баг тысячелетия назывался «Ошибка 2000 года», или Y2K Error. Суть дефекта состояла в том, что государственные и военные конторы в Пендостане и Европах имели на вооружении древние софтины, написанные бородатыми студентами из НИИ. Это древнее ПО хранило только две последние цифры из номера года (например, 98 вместо 1998). При наступлении 2000 года эти софтины должны были записать текущий год как 00, что вызвало бы Апокалипсис, ядерную войну и приход Большого Волосатого Друга. Эта тема стала подниматься говножурналистами по говноящику во всяких говногазетёнках (пример), что вызвало панику у домохозяек и много красных задниц в программистских конторах. После этого началась война лихорадочных правок существующих софтин. Багу искали даже там, где её физически не могло быть. Кстати, этот самый баг стал чуть ли не центром повествования в одном из эпизодов сериала «Меня зовут Эрл».
Есть мнение, что шумиху вокруг Y2K развивали в основном откатчики (обеспечение госконтор Y2K Compliant софтом, должности типа Y2K Compliance Manager, конторы по тестированию на совместимость с Y2K…) — короче, под это дело было съедено немало средств, человеко-лет и машинного времени тоже.
Настоящей баг-легендой можно назвать операционную систему Windows версии 95-98, а также выкидыш этой серии Windows Millenium, занявшую шестое место в списке худших программных продуктов ушедшего тысячелетия. С выходом висты мелкомягкие вступили в борьбу за первое место в текущем. За преждевременный выпуск этих продуктов их создатель Билли был стопицот раз проклят и приговорён к пятнадцати годам публичного расстрела через повешение за борт на электрическом стуле, а также вошёл в историю и анекдоты мемом — «It was a beta-version!»
Классификация
Баги классифицируются по степени их вредности:
- Blocker — система или её часть не работает, невозможно использовать функционал. Пример — приложение крешит на старте.
- Critical — баг, очень заметный для юзера и затрудняющий работу с системой, но не блокирующий её полностью. Пример — приложение даёт возможность купить товар, но зависает при просмотре списка подтверждённых заказов.
- Major — система работает, но не так, как нужно. Пример — при покупке клиенту ВНЕЗАПНО начисляется скидка 3%, которая вообще-то не планировалась.
- Minor — с системой всё в порядке, но что-то режет глаз или незначительно мешает работать. Например, не работает скроллинг перетаскиванием ползунка, но страницу можно скроллить колёсиком мыши.
- Trivial — баг, который не влияет на работу программы. Например, ошибка в тексте.
Соответственно строятся и приоритеты фикса. Сначала разрабы будут чинить блокеры и криты (если они есть), потом мажоры и только потом, если/когда будет время — миноры и тривиалы.
В некоторых трекерах используется другая система приоритетов — High, Normal, Low, Lowest. По сути то же самое.
Также баги классифицируются по частоте появления:
- постоянно (воспроизводимость 100%)
- иногда (самый сволочной тип бага, «плавающий»);
- только на машине у заказчика;
- только на машине у тестировщика;
- только у конкретного юзера на проде,
а также по тому, кто и где заметил симптомы. Например, если баг заметил Мегабосс Всех Заказчиков на уже запущенной системе, то баг будет исправлять все выходные весь IT-отдел, включая уборщицу.
Особо приятные баги — showstoppers, найденные в пятницу вечером. Они могут доставить несказанное удовольствие любому программисту, который любит уходить с работы в субботу утром.
Баги в больших количествах производятся индусами и китайцами, а также различными быдлокодерами. Продукты, содержащие передоз этих багов, называются багодромом.
Имеется специальное заклинание «Это не баг, это фича», которое позволяет избавиться от бага с наименьшими потерями, то есть ничего не делая. Однако этим колдовством владеют только самые опытные программисты.
Постинг бага
Баг заносится в специальную систему, называемую трекер (англ. tracker — отслеживатель), например Jira или Redmine. Описание бага делается по следующему шаблону:
- Заголовок (англ. heading) — о чём в целом баг.
- Описание (англ. description) — более подробно в чём суть бага.
- Автор (англ. Reporter) — кто запостил баг. Проставляется автоматически по учётной записи в трекере.
- Ответственный (англ. Assignee) — либо проект-менеджер заказчика, который будет потом раскидывать баги по разрабам, либо непосредственно разраб, который будет чинить баг (если он известен и разрешено кидать баг сразу на него). Назначается вручную.
- Шаги для воспроизведения (англ. steps to reproduce, STR) — что надо сделать, чтобы воспроизвести баг. Прям по шагам с номерами.
- Фактический результат (англ. actual result) — что происходит в итоге.
- Ожидаемый результат (англ. expected result) — что должно происходить. Обычно берётся из техзадания (ТЗ), здравого смысла или согласования с заказчиком «должно быть так».
- Окружение (англ. expected result) — тип браузера/девайса, на котором баг воспроизводится. Чаще всего это all devices, но бывают баги, которые воспроизводятся только в определённом браузере или на определённых девайсах/платформах.
- Версия/ревизия клиента (англ. client version) — версия приложения, в которой найден баг.
- Аттачи (англ. attachments) — скриншоты и видео, подтверждающие проблему. В некоторых случаях также нужны логи.
Пример:
Новые баги имеют статус New/Open/To Do в зависимости от трекера. Когда разраб фиксит баг, он переводит его в статус Fixed и задача тестера — проверить, что баг исправлен в следующей версии приложения. В зависимости от результата проверки тестер закрывает баг (Closed — проблема исправлена) или переоткрывает обратно на разработчика (Re-Open — проблема не исправлена), чтобы тот фиксил снова.
Тестирование
Основная статья: Тестировщик
Для отлова багов в программах используют специально обученных охотников во все возможные дыры, называемых тестировщиками. Первой их задачей является сломать программу любыми средствами. У идеального тестировщика в вакууме на компьютере не работает ничего, потому что он всё сломал. У обычного тестера должна не работать только одна конкретная программа. Также является профитом, если тестер ломает мебель, бьёт стёкла и рвёт занавески. Пример.
Как известно, программисты очень сильно любят тестеров, поэтому тестер должен обладать разрядом по боксу для общения с особо неадекватными их представителями. А также тестер должен обладать рефлекторным умением посылать фаербол в ответ на заклинание «это фича».
Ссылки
См. также