x
 
Василий
7 июня 2018
Советы почтой каждую неделю
Пожалуйста, получите наше письмо, чтобы подтвердить свой адрес:
Вы подписаны на «Советы за неделю»:

Как бороться с багами? Часть пятая: повторить


Любой баг сна­чала стоит повто­рить: найти после­до­ва­тель­ность дей­ствий, состо­я­ние или окру­же­ние, при кото­ром баг повто­ря­ется. Повто­ре­ние про­блемы — это тест, кото­рым изо­ли­руют баг и про­ве­ряют, что он исчез после исправ­ле­ния. Без этого шага вме­сто исправ­ле­ния полу­чится сле­пая догадка, кото­рая вряд ли испра­вит про­блему, но точно что‑то сломает.

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

В Издательстве бюро

Если в книге про­блема ста­бильно повто­ря­ется на отдель­ном раз­во­роте, стоит оста­вить в локаль­ной вер­сии книги только его. Бра­у­зеру не при­дётся загру­жать все раз­во­роты, книга ста­нет откры­ваться за 600 мил­ли­се­кунд, а не за 6 секунд.

Чем быст­рее раз­ра­бот­чик смо­жет про­ве­рять изме­не­ния, тем быст­рее пой­мёт и испра­вит проблему.

Если про­верку можно авто­ма­ти­зи­ро­вать тестами — ещё лучше: не надо про­ве­рять вруч­ную; легко про­ве­рять про­блемы с мно­го­по­точ­но­стью; тесты убе­дятся, что про­блема не повто­рится в будущем.

В Издательстве бюро

В билинге изда­тель­ства были про­блемы с про­дле­нием под­пи­сок, оформ­лен­ных в конце месяца. Чтобы повто­рить их и испра­вить, напи­сали авто­те­сты, про­ве­ря­ю­щие под­писки, оформ­лен­ные в про­блем­ных слу­чаях: 28 фев­раля, 29 фев­раля, 31 декабря, 31 января, 31 июля.

Если про­блема «пла­вает», повто­ря­ется слу­чай­ным обра­зом, можно уве­ли­чить частоту проверок:

В тестах

Если инте­гра­ци­он­ный тест время от вре­мени не рабо­тает, чтобы повто­рить про­блему, я запус­каю его несколько сотен раз:

while true; do bin/rspec spec/acceptance/flaky_spec.rb; done

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

  • При­ло­же­ние. Сов­па­дает ли вер­сия при­ло­же­ния у меня и кли­ента? Может, мы это уже исправили?

  • Бра­у­зер. Какой бра­у­зер у кли­ента? Может, это ста­рый Сафари? Или Сафари в при­ват­ном режиме?

  • Пла­гины. Какие пла­гины уста­нов­лены в бра­у­зере кли­ента? Может, это Эдб­лок или стили пла­гина вли­яют на страницу?

  • Интер­нет. Какой интер­нет у кли­ента? Может, про­блема с загруз­кой на мед­лен­ных соединениях?

  • Мони­то­ринг. Что в этот момент про­ис­хо­дило в системе? Не было ли дру­гих оши­бок, напри­мер, с БД или сетью?

  • Дан­ные. Может, про­блема в дан­ных? Какие дан­ные кли­ента исполь­зу­ются? Что поль­зо­ва­тель вво­дил в инпуты? Повто­рится ли про­блема с ними? Нет ли чего‑то опас­ного в LocalStorage?

  • Логи. Что, судя по логам, на самом деле делал пользователь?

  • После­до­ва­тель­ность дей­ствий. В пра­виль­ной ли я после­до­ва­тель­но­сти повто­ряю дей­ствия? Что, если имеет зна­че­ние, с какой сто­роны я начал пере­тас­ки­вать виджет?

В слу­чае с после­до­ва­тель­но­стью дей­ствий важен не только их поря­док и содер­жа­ние, но и то, что про­ис­хо­дило до бага:

Гугль‑почта и Эксплорер

Одна­жды задер­жали релиз на две недели из‑за того, что файлы не загру­жа­лись в бра­у­зере мене­джера. У тести­ров­щи­ков, раз­ра­бот­чи­ков, дизай­не­ров и осталь­ных мене­дже­ров всё было в порядке. После­до­ва­тель­ность дей­ствий — та же, окру­же­ние — иде­ально сов­па­дает: у мене­джера и тести­ров­щи­ков были иден­тич­ные кор­по­ра­тив­ные компьютеры.

Когда решили про­ве­рить, что мене­джер делал до ошибки, заме­тили, что ссылку на стра­ницу он откры­вал из лич­ного поч­то­вого ящика в Гугль‑почте, а не из корпоративного.

Ока­за­лось, что в Экс­пло­рере пере­ста­вала рабо­тать загрузка фай­лов через ифрейм, когда стра­ница откры­ва­лась из Гугль‑почты.

Если про­блема всё равно не повто­ря­ется, зна­чит, не хва­тает инфор­ма­ции. В этом слу­чае можно попро­бо­вать отсле­дить ошибку в обрат­ную сто­рону, обра­титься за помо­щью и добыть ещё информации.

Отсле­дить в обрат­ную сто­рону. Про­во­дим мыс­лен­ный экс­пе­ри­мент: мы знаем, как выгля­дит про­блема, что могло при­ве­сти к ней?

На новом сайте бюро

На новом сайте ино­гда не загру­жа­лись кар­тинки. Сер­вер при­ни­мал их, сохра­нял, но бра­у­зер отда­вал 404. Про­блему повто­рить не удавалось.

Чтобы повто­рить баг, мы начали отсле­жи­вать его в обрат­ную сторону.

— Почему сер­вер отдает 404?
— Потому что кар­тинки на самом деле нет, она не лежит в дирек­то­рии, где веб‑сер­вер ищет картинки.

— Почему её там нет?
— Потому что бэкенд не ско­пи­ро­вал её туда.

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

— Почему он её не заме­тил?
— Воз­можно, она появи­лась, когда про­ис­хо­дило копирование.

— Как про­ве­рить тео­рию?
— Запу­стить про­дол­жи­тель­ное копи­ро­ва­ние одно­вре­менно с загруз­кой картинки.

Обра­титься за помо­щью. Может ока­заться так, что вы что‑то упус­ка­ете. В этом слу­чае часто помо­гает попро­сить кого‑нибудь о помощи: дру­гого раз­ра­бот­чика, арт‑дирек­тора или менеджера.

В Издательстве бюро

Самые слож­ные баги в кни­гах мы чиним вдвоём с Рустом Кул­ма­то­вым. Мы созва­ни­ва­емся по Скайпу, рас­ша­ри­ваем экран и в режиме пар­ного про­грам­ми­ро­ва­ния раз­би­ра­емся с багом.

Чаще всего уда­ётся разо­браться ещё на этапе объ­яс­не­ния про­блемы: когда что‑то объ­яс­ня­ешь и пока­зы­ва­ешь дру­гому чело­веку, легче найти зна­чи­мые усло­вия и факты.

Добыть ещё инфор­ма­ции. Для этого подой­дут логи и авто­ма­ти­че­ское отсле­жи­ва­ние проблем.

В Издательстве бюро

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

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

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

Что запомнить

Сна­чала баг надо повто­рить. Если непо­нятно как — уточ­нить после­до­ва­тель­ность дей­ствий. Если не повто­ря­ется, зна­чит, про­блема свя­зана с окру­же­нием (бра­у­зеры, пла­гины, интер­нет), дан­ными (БД, ввод, локаль­ное хра­ни­лище) или после­до­ва­тель­но­стью действий.

Когда уда­лось повто­рить, стоит уско­рить и ста­би­ли­зи­ро­вать про­цесс про­верки: мини­ми­зи­ро­вать тесто­вый сце­на­рий или напи­сать авто­ма­ти­че­ский тест.

Если ничего не помо­гает, баг не повто­ря­ется, можно попро­бо­вать отсле­дить ошибку в обрат­ную сто­рону, попро­сить о помощи или доба­вить ещё логов.

Ещё по теме

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Вёрстка и прототипирование — дисциплина Школы дизайнеров. Набор открыт. Чем раньше поступите, тем ниже стоимость и выше шанс на бесплатное место.
 

Поделиться
Отправить

Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры. Мы ожидаем, что такие комментарии составят около 20% от общего числа.

Решение о публикации принимается один раз; мы не имеем возможности комментировать или пересматривать свое решение, хотя оно может быть ошибочно. Уже опубликованные комментарии могут быть удалены через некоторое время, если без них обсуждение не становится менее ценным или интересным.

Вот такой веб 2.0.

Как объяснить значимость фичи разработчику? 1 Как называть классы в ЦСС. Часть первая Расскажите об обязанностях технического директора в бюро. Вторая часть: встречи один на один Как быть, если твой руководитель некомпетентнее или незаинтересованнее тебя?




Недавно всплыло

Как снимали Феррари для обложки книги «Фотосъёмка автомобилей»? 2 Как улучшить запись автоответчика? 4 Как просить коллег о помощи, как оценить код программиста, навигация между книгами бюро, как научиться спрашивать 2 Какой фотоаппарат выбрать для путешествий? 2