Баг

Отчеты о багах

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

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

Источники ожидаемого результата

Основными источниками ожидаемого результата являются:

  1. Спецификация.
  2. Спецификация.
  3. Спецификация.
  4. Спецификация.
  5. Жизненный опыт, здравый смысл, общение, устоявшиеся стандарты, статистические данные, авторитетное мнение и др.

Спецификация на первой— четвертой ролях — это не ошибка, а ударение на то, что спецификация для тестировщика — это:

  • мать родная, а также
  • друг,
  • товарищ и
  • брат.

Спецификация важна для программиста и тестировщика так же, как постановление пленума ЦК для коммуниста.

Спецификация — это инструмент, с помощью которого вы сможете выпустить качественный продукт и прикрыть свою спину (в оригинале звучит как CYA или cover your ass).

Итак, что же это за зверь?

Спецификация (или spec — читается «спек». Далее употребляется в мужском роде) — это детальное описание того, как должно работать ПО. Вот так, ни много ни мало.

В большинстве случаев баг — это отклонение от спецификации (я говорю о компаниях, в которых спеки в принципе существуют и ими пользуются).

Пример

Пункт 19.а спека #8724 «О регистрации нового пользователя» устанавливает: «Поле «Имя» должно быть обязательным. Страница с ошибкой должна быть показана, если пользователь посылает регистрационную форму без заполнения указанного поля».

В общем все просто:

  • тестировщик идет на страничку с регистрационной формой;
  • кликает линк «Регистрация»;
  • заполняет все обязательные поля, кроме поля «Имя»;
  • нажимает на кнопку «Зарегистрироваться».

Если ошибка не показана и регистрация подтверждается, то это есть момент истины и нужно рапортовать баг (file a bug).

Если ошибка показана, то относительно пункта 19.а на некоторое время можно успокоиться. Мы поймем, почему можно успокоиться лишь на некоторое время при разговоре о регрессионном тестировании…

[править] История

И здесь они тоже водятся

Версии:

  • По легенде, 9 сентября 1945 года учёные Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле, и Грейс Хоппер сгоряча сморозила сей термин. Извлечённое насекомое было вклеено в технический дневник с сопроводительной надписью: «First actual case of bug being found». Этот забавный факт положил начало использованию слова «баг» в значении «ашипка».
  • Есть и версия, по которой термин родился гораздо раньше, когда Эдисон искал таракана в фонографе. Но там его не было, баг был в самом устройстве!
  • По другой версии, виной тому случай, произошедший 9 сентября 1947, а не 1945 года. Слово «bug» в современном значении употреблялось задолго до этого. Так, в течение Второй мировой войны словом «bugs» назывались проблемы с радарной электроникой.
  • По самой приземленной версии, слово произошло от английского глагола to bug (пилить, беспокоить, стоять над душой), или бранного слова bugger (черт побери).

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

Исправление ошибок

Процесс разработки программ, в том числе и компьютерных игр, состоит не только из написания кода. Значение слова «баг» намекает на то, что данная ошибка умудрилась пробраться не через один слой защиты. Так что же позволяет отловить 99% всех багов? Ответ прост — это этап тестирования. Когда программный код написан, он отправляется на проверку специальным профессиональным тестировщикам, которые запускают его и проверяют на наличие ошибок. Роль тестировщика не менее важна, чем роль программиста, и если баг пройдет в релизную версию продукта, то вина одинаково будет лежать как на человеке, который совершил эту ошибку, так и на том, кто ее не заметил при проверке. К счастью, 99% багов фильтруются в процессе такой проверки. Но что же происходит, если какому-то из них все же удается ускользнуть?

Отчёты об ошибках

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

Например, в операционную систему Windows встроена утилита Dr. Watson, которая по умолчанию отлавливает ошибки в приложениях пользователя и отправляет отчёт на специальный Сервер компании Microsoft. Также в качестве примера можно привести аналогичные библиотеки Breakpad и CrashRpt.

Три условия жизни и процветания бага

Конкретный баг живет и процветает лишь при одновременном выполнении всех трех условий:

  1. Известен фактический результат;
  2. Известен ожидаемый результат;
  3. Известно, что результат из пункта 1 не равен результату из пункта 2.

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

Примеры багов из жизни:

  1. Бутерброд падает маслом вниз.
  2. Подхалимы и говоруны имеют намного больше шансов на повышение, чем скромные честные труженики.
  3. Несоответствие миловидной внешности и змеиной сущности.
  4. Попугай воспроизводит на людях худшее из словарного запаса хозяина.
  5. Автомобили российского производства.
  6. Кот Бегемот в фильме В. Бортко «Мастер и Маргарита».

Идем дальше.

Отчеты о багах

Во время работы программы, например, игры или приложения для создания презентаций может возникнуть ошибка, часто приводящая к завершению процесса или другим непредсказуемым результатам

Поскольку баг — это ошибка, то для разработчиков важно знать, где и когда этот сбой произошел, чтобы исправить код

Баг

После ручного закрытия приложения в диалоговом окне пользователя появляется автоматический отчет для разработчика, именуемый «bug report» (отчет об ошибке). При автоматическом завершении сеанса работы приложения появляется окно «crash report» (отчет об аварийном завершении).Баг

Только программисты знают, что такое баг, как его локализовать, отладить и протестировать приложение.

Использование в Интернете

Интернет-сленг, состоит, в основном, из различных англицизмов. Например, понятие фича (feature) переводится как «особенность». Она ассоциируется у пользователей с дополнительными возможностями программы или игры.

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

Баг
Жители Сети жить не могут без новых слов

Чем больше создавалось компьютеров, тем чаще «bug» стало использоваться в разговорной речи Интернета. Отсюда появились новые термины и понятия, использующиеся для сокращения текста.

[править] Классификация

◄ ►

Баги в WinXP. Теперь и с музыкой.

И еще немного.

Баги классифицируются по степени их вредности:

  • showstoppers (совсем капут, программа крашится или виснет; либо же крашится или виснет ЭВМ, на котором был баг, если ЭВМ был соединен в локальную сеть, или вообще был сервером, то упасть может несколько ЭВМ сразу, вплоть до всей сети);
  • серьёзные;
  • мелкие;
  • фигня;
  • придирки тестировщиков;
  • полезный баг, который можно обозвать фичей и вообще не исправлять.

по частоте появления:

  • постоянно;
  • иногда (самый сволочной тип бага, «плавающий»);
  • только на машине у заказчика.

а также по тому, кто и где заметил симптомы. Например, если баг заметил Мегабосс Всех Заказчиков на уже запущенной системе, то баг будет исправлять все выходные весь IT-отдел, включая уборщицу.

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

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

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

Классификация багов

В отношении этапов программирования ошибки разделяют на следующие группы:

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

По своему объему баги бывают:

  • фатальными;
  • серьезными;
  • незначительными.

В зависимости от времени баги бывают:

  • постоянные, сопровождающие каждый запуск приложения;
  • периодические, возникающие по плавающему типу;
  • клиентские, т.е. проявляющиеся только у пользователя вследствие неверных настроек его компьютера.

В зависимости от места выявления ошибки бывают:

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

Каждая ошибка может проявиться в любое время. Это зависит от ее характера, загруженности системы пользователя, настроек. Возникающие баги делают компьютер более уязвимым для несанкционированного доступа или DoS-атаки.

Исправление багов

Дебажить было сложно, но Ваня не мог облажаться и в этот раз. За год его уже успели уволить из трёх компаний, после четвёртого увольнения его резюме будет испорчено окончательно.

Дебаг (англ. debug — устранение багов) — исправление ошибок в коде программы.

Три дня и три ночи Ваня корпел над кодом, но ничего не выходило. В отчаянии он обратился к коллеге, который проводил код ревью для его коммита в прошлый раз.

— Прости, но если бы я знал, что не так в твоём коде, я бы твой пул реквест не заапрувил.

— Но ты же написал lgtm в комментарии!

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

— Ладно, разберусь как-нибудь.

Апрув (англ. approve) — подтвердить что-нибудь.

Пул реквест (англ. pull request) — запрос на подтверждение коммита.

LGTM (англ. looks good to me — На мой взгляд, хорошо) — сокращение, которое часто встречается на гитхаб в комментариях к подтверждению коммитов. Обычно его используют, когда не получается сказать ничего конструктивного по поводу кода.

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

Пик Балмера — шуточная теория, что при содержании алкоголя в крови между 0,129 и 0,138% (примерно 2 бутылки пива) программист получает сверхспособности к написанию кода. Теорию выдвинул Стив Балмер, CEO Microsoft с 2000 по 2014 год.

Бессонные ночи и пиво сделали своё дело, поэтому Ваня заснул прямо за компьютером.

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

Ненавидя себя, он поплёлся на работу. Сев за рабочий стол и посмотрев в код, внезапно понял, в чём была ошибка (известно, что многие проблемы в разработке приложений решаются, когда программист спит). Исправив всё за пару минут, он пошёл к тимлиду.

— Я разобрался с багом.

— Отлично, но странно, что у тебя ушло так много времени. Давай протестируем твой код и выгрузим на прод.

Прод или продакшн (англ. production environment — рабочее окружение) — компьютер (чаще всего сервер), на котором запускается готовое к работе приложение.

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

Ваня начал думать.

К счастью, недавно он начал изучать JavaScript, поэтому мог просто скопировать код валидации с фронта и переделать его для бэкенда.

JavaScript — язык фронтенд-разработки.

Помучившись день, он всё-таки закончил. Тимлид оценил усилия:

— Ну вот, можешь же, когда захочешь. Тебе повезло, что мы не деплоим на прод по пятницам, поэтому у тебя ещё есть время до середины понедельника, чтобы ещё раз всё проверить и поправить.

Деплой (англ. to deploy) — процесс перевода кода в рабочее приложение, чтобы запустить его на каком-нибудь компьютере.

Воодушевлённый успехом, Ваня ещё раз всё протестировал, поэтому к следующему митингу он был спокоен — больше исправлять старые баги ему не придётся.

По крайней мере на этот спринт.

Значение и классификация ошибок программного обеспечения

В зависимости от этапа разработки ПО, на котором выявляется ошибка, выделяют:

  • синтаксические ошибки (распознаваемые в качестве таковых транслятором и делающие компиляцию невозможной) — например отсутствие или несоответствие открывающей и закрывающей скобок;
  • предупреждения (warnings) компилятора — например, использование неинициализированной переменной. В этом случае компилятор может заметить, что программист делает что-то необычное (вероятно неверное), и сообщает об этом, однако программист сам принимает решение, игнорировать сообщение или нет;
  • ошибки времени исполнения, смысловые ошибки (семантические) — например вычитание переменных вместо сложения или ошибка сегментации.

По важности:

  • Критические (иногда showstoppers) — лишающие программу всей полезности;
  • Серьёзные;
  • Незначительные;
  • Косметические.

По времени появления:

  • Постоянно, при каждом запуске;
  • Иногда («плавающий» тип);
  • Только на машине у клиента (зависит от локальных настроек у клиента).

По месту и направлению:

  • Ошибки пользовательского интерфейса;
  • Системы обработки ошибок;
  • Ошибки, связанные с граничными условиями (например, некорректная обработка пустой строки или максимального числового значения);
  • Ошибки вычислений;
  • Ошибки управления потоками;
  • Ошибки обработки или интерпретации данных;
  • При состоянии гонки;
  • Повышение нагрузки;
  • Ошибки контроля версии и идентификаторов;
  • Ошибки тестирования.

В зависимости от характера ошибки, программы и среды исполнения, ошибка может проявляться сразу или наоборот — долгое время оставаться незамеченной (например Проблема 2038 года).

Также ошибка может проявляться в виде уязвимости, делающей возможным несанкционированный доступ к системе или DoS-атаку.

Разновидности

[источник не указан 1004 дня]

  • Борбаг — легко обнаруживаемая стабильная ошибка
  • Гейзенбаг — сложно обнаруживаемая, периодически исчезающая и меняющая свойства, при попытке обнаружения, ошибка
  • Мандельбаг — ошибка с очень сложным, хаотичным, поведением
  • Шрёдинбаг — критическая ошибка, которая не проявляется, пока кто-нибудь на неё не наткнётся в исходном коде, после чего программа совершенно перестаёт работать

Классификация

Баг

Естественно, после того как люди узнают, что такое баг, им хочется понять, какими могут быть такие ошибки. Существует полноценная классификация, которая включает в себя самые разнообразные варианты. Баги могут различаться по месту и времени появления, по размеру, по характеру ошибки и так далее. Чаще всего их различают по серьезности и размерам — самым важным характеристикам, позволяющим понять, как долго займет исправление ошибки и какой урон она может нанести или уже нанесла. К сожалению, баги могут быть не только в компьютерных играх, где они попросту портят людям впечатление. Они могут встречаться и в очень серьезном программном обеспечении — ошибка, закравшаяся в код автопилота самолета, может привести даже к его крушению. Поэтому не стоит думать о том, как сделать баг — лучше задуматься о том, как его исправить.

Происхождение слова

Пожалуй, теперь стоит поговорить об этимологии данного слова. Баг — это профессионализм, который чаще всего применяется в среде программистов. Есть несколько вариантов происхождения данного слова.

Баг

Если верить легенде, то данный профессионализм появился еще в далеком 1945 году. Произошло это, когда ученые из Гарвардского университета проводили тестирование новой вычислительной машины под названием Mark II Aiken Relay Calculator. Устройство отказывалось работать, и причиной этому стал крохотный мотылек, который застрял между контактами. Насекомое извлекли из вычислительной машины и влепили в специальный технический дневник. Около мотылька находилась сопроводительная надпись «First actual case of bug being found», что переводится как «Первый случай в практике, когда был обнаружен жучок (баг)». После этой забавной истории слово «баг» и стало использоваться в значении «ошибка».

Также существует версия, что этот профессионализм появился задолго до испытаний вычислительного устройства. Некоторые считают, что термин «баг» обязан своим происхождением известному изобретателю Томасу Эдисону. По легенде, Эдисон искал в своем фонографе таракана, но его там не оказалось. Баг был в самом аппарате.

Очередная версия гласит, что слово «баг» появилось во времена Второй мировой войны. Тогда под данным термином подразумевали неполадки с радарной техникой.

Слово «баг» начало быстро распространяться. В 80–90-х годах данный профессионализм употребляли лишь программисты. С появлением интернета слово начало активно муссироваться. Сейчас же «баг» в своем лексиконе употребляют все, кто имеет хотя бы малейшее отношение к компьютерным технологиям (геймеры, обычные интернет-юзеры и т. д.). Поэтому сейчас его можно смело назвать частью интернет-сленга.

Термин «баг»

Баг

Естественно, начать следует с рассмотрения самого термина, его этимологии и значения. Что такое баг? Почему он называется именно так? История эта довольно интересна, потому что данный термин произошел от английского слова bug, которое переводится как «жук». Но означает-то он ошибку — каким же образом сочетаются между собой насекомое и проблемы в компьютерном коде? Прямой связи, естественно, нет — просто это жаргонизм, который появился в среде программистов уже довольно давно и прочно закрепился за ошибками, которым удавалось пробраться в код даже с учетом полной проверки. Таким образом, баги проползают в финальную версию кода и выявляются только после запуска самой программы. Касательно этого термина есть еще достаточно много полезной информации, но теперь вы по крайней мере знаете, что такое баг. Идем дальше!

Как уберечь себя от багов?

Баг

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

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

Что такое тестирование

Любое тестирование — это поиск багов. Испытываем ли мы новую соковыжималку, наблюдаем ли за поведением подруги или занимаемся самокопанием — мы ищем баги. Баги находятся следующим образом:

  1. Мы узнаем (или уже знаем) ожидаемый результат;
  2. Мы узнаем (или уже знаем) фактический результат;
  3. Мы сравниваем пункт 1 и пункт 2.

Как видно, каждый из нас уже является тестировщиком, так как разного рода осознанные и неосознанные проверки, осуществляемые нами и в отношении нас, являются неотъемлемой частью жизни, просто раньше мы непрофессионально качали головой и выдавали тирады о несправедливости мира, но зато теперь в случае несовпадения фактического и ожидаемого мы будем с улыбкой мудреца смотреть на дилетантов, хлюпающих носами на московском ветру, и тихо, но веско (как дон Карлеоне) говорить: «Та-а-к, еще один баг».

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

Теперь вспомним о том, что есть компьютерное ПО и что нам нужно научиться его тестировать.

С фактическим результатом здесь более или менее понятно: нужно заставить систему проявить себя и посмотреть, что произойдет.

Сложнее дело обстоит с ожидаемым результатом.

Другие определения

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

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

Баг
Баг – бармалейка из детских страшилок

Новая задача

Ваня — обычный джун в веб-студии. Его работа — поддержка бэкенда сайтов старых клиентов студии.

Джуниор (англ. junior — младший) в данном случае — младший разработчик в веб-студии. Также бывают мидл- (англ. middle — средний) и сеньор-разработчики (англ. senior — старший).

Бэкенд или бэк (англ. back end — задний край) — серверная часть сайта или приложения, которая нужна для обработки и хранения данных. Его противоположность — фронтенд или фронт (англ. front end — передний край) — видимая часть приложения или сайта. Если же разработчик занимается сразу фронтендом и бэкендом, его называют фуллстек-разработчиком (англ. full stack — полная куча / полный набор).

Рабочая неделя Вани начинается с митингов, потому что спринт в его компании длится всего неделю.

Митинг — собрание, на котором обсуждается, что успели или не успели сделать сотрудники, а также чем они будут заниматься в новом спринте.

Спринт — период от одной до четырёх недель, за который сотрудники должны успеть выполнить задачу или задачи. Спринты являются частью Скрам.

Скрам (англ. scrum) — метод управления проектами. Относится к гибкой методологии разработки эджайл (англ. agile — гибкий).

Валидация — проверка данных, которые вводит пользователь.

Валидация на фронте небезопасна, потому что пользователи могут легко её обойти

До пятницы ещё целая неделя, поэтому с митинга Ваня пошёл сразу в курилку. Достав сигарету, он стал слушать разговор мидла и сеньора:

— Недавно залез в репозиторий, а там одни foobar’ы. Целый час голову ломал, а потом махнул рукой и заново переписал.

— Как наберут новых джунов, так всегда говнокод появляется. Как он вообще код ревью проходит?

— Надо проверить в гитхабе историю коммитов.

Тут Ваня поперхнулся, затушил сигарету и заторопился на рабочее место — от греха подальше.

Репозиторий — хранилище исходных файлов проекта.

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

Говнокод — очень плохой код.

Код ревью — проверка кода.

Гитхаб — сервис для хранения репозиториев IT-проектов и совместной работы над ними.

Коммит — запись изменений в репозиторий. Коммит содержит в себе данные об изменениях, комментарий и имя автора коммита.

У стола его уже ждал тимлид:

— Ваня, после того как ты добавил функцию загрузки фотографии в личном кабинете, появился баг. Теперь всё ломается, если ввести промокод.

— Вы уверены, что это из-за меня? Мой код вообще промокодов не касался.

— Уверен. Откати сайт и исправь всё до конца недели — нельзя ждать, пока клиент заметит, что одна из фич пропала.

— Но у меня уже есть задача на эту неделю, я не успею всё исправить.

— Это далеко не первый твой факап, поэтому, если не успеешь, мы поставим новый рекорд — так быстро мы джунов ещё не увольняли.

Игровые баги

Баг

Баги есть не только в программах, они довольно часто встречаются и в играх. Баг игры — это недоработка разработчиков, из-за которой игровой процесс идет не так, как задумывалось изначально. За всю историю гейм-индустрии выходило тысячи забагованных проектов. О самых известных и занимательных мы и поговорим в этом разделе.

Пожалуй, самым забагованным проектом за последние несколько лет можно назвать Assassin’s Creed: Unity. Проекты «Юбисофт» никогда не славились своей оптимизацией, но Unity — это настоящая энциклопедия багов. Порой персонажи находятся в очень странных и неестественных позах, проваливаются в текстурки, проходят через стены или же попросту зависают. Чего только стоит баг, который в считаные часы облетел весь интернет (у персонажей просто пропадали лица, из-за чего выглядели они довольно жутко). Даже сама «Юбисофт» признала свою ошибку, выпустила патч, который фиксит баги, и возместила покупателям ущерб.

Баг

Порой игроки воспринимают баги в качестве фичи, особенности игры. Так произошло с мегауспешной серией игр под названием Mortal Kombat. В первой части игры был баг, который перекрашивал Скорпиона (одного из основных персонажей игры) в красный цвет. При этом имя героя заменялось на сообщение об ошибке Error Macro. Игроки посчитали, что эта недоработка является задумкой разработчиков, а красный ниндзя — это дополнительный секретный персонаж. Эду Буну (создатель МК) понравилась данная затея, и в последующей части он добавил в игру этого героя под именем Эрмак (сокращение от той самой Error Macro).