Данный материал подготовлен нашим партнером — компанией «Эквио».



2+2=3 2+2=5 2+2=4

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

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

Мы хотим вам рассказать о том, как разработчики выявляют и исправляют баги, подходят к тестированию. В основе одного из подходов лежит политика Zero Bug Policy. Спойлер! Мы расскажем, на что на самом деле тратят время разработчики и почему они не исправляют все баги.



У семи нянек


семь нянек

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

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

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



С глаз долой, из бэклога вон


метла метет

В одной большой ИТ-компании как раз возникла подобная проблема. Благодаря рекомендации одного из работавших в компании специалистов, было решено применить подход Zero Bug Policy. К сожалению, на русском языке о нем написано пока немного.

Суть его состоит в следующем. Когда тестировщики или пользователи обнаруживают какой-либо баг в продукте и сообщают об этом разработчикам, последние принимают решение о том, будет ли эта ошибка исправляться, либо она не влияет на работоспособность продукта, и поэтому ее исправление может быть отложено на будущее, либо вовсе исключено из бэклога (списка задач). Такому багу присваивается статус Won’t Fix (“не исправить”), после чего он навсегда исчезает из поля зрения разработчиков. В некоторых случаях баги с этим статусом помещают в самый конец бэклога. Это означает, что у разработчиков «дойдут руки» до их исправления только тогда, когда будут решены все остальные задачи.

Но вернемся к уже упомянутой ИТ-компании. Ее сотрудники проанализировали весь список обнаруженных багов и провели сортировку найденных проблем. Почти половину ошибок было решено исправить в течение ближайшего времени, а большей половине присвоили статус Won’t Fix. Вся эта работа заняла примерно два месяца, после чего в компании решили взять на вооружение Zero Bug Policy уже на постоянной основе. На сегодняшний день у этой компании в бэклоге размещено не более 10 открытых задач. Это позволяет сосредоточиться на реализации новых функций.



Знатоки багов


аля знатоки что где когда

Как происходит сортировка багов? Кто принимает решение о том, что одна ошибка критична и ее нужно исправлять, а с другой можно и дальше спокойно жить, либо отложить ее исправление на потом?

Расскажем, как этот процесс организован при использовании концепции гибкого управления проектами (Agile). Всем известно, что Agile включает в себя несколько методик. Мы в качестве примера возьмем одну из них, а именно SCRUM, поскольку она чаще всего используется в мире разработки программного обеспечения.

Владелец продукта или Scrum Product Owner — один из ключевых участников проектной команды. Именно он представляет интересы конечных пользователей и прилагает все усилия к тому, чтобы максимизировать ценность продукта. Он также от начала и до конца несет ответственность за бэклог продукта. В сортировке багов принимает участие вся команда разработчиков, однако последнее слово всегда за Product Owner. Он определяет, какая ошибка будет исправлена, а какая помечена как Won’t Fix.

На самом деле, все решают деньги. К примеру, если исправление бага не принесло бы компании никакой финансовой отдачи, но при этом отняло бы много времени и ресурсов, такому багу лучше присвоить статус Won’t Fix и отложить его исправление до лучших времен. Фактически, «владелец продукта» отвечает за приоритизацию и за статус найденных ошибок.
Иными словами, «скелеты в шкафу» есть у всех. Но если они не оказывают никакого влияния на работоспособность продукта, не затрудняют действия пользователя, не препятствуют интеграционным процессам, их вполне можно проигнорировать.



Критерии отбора


золушка рис от гречки перебирает

Такие «незначительные» баги есть в продуктах любого разработчика.

К примеру, в администраторском интерфейсе системы управления сайтом невозможно ввести слишком длинное название раздела, статьи и т.д. Разработчики решают этот баг не исправлять. Ведь исправление требует времени, привлечения ресурсов, а можно просто взять и сократить название до определенного количества символов. Достаточно просто предупредить пользователя, что названия длиннее 30 символов не поддерживаются.

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

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



Коллективный разум


много мозгов объединяются в общее поле

Zero Bug Policy часто связывают с Соглашением об уровне обслуживания (SLA). Обычно у разработчиков есть несколько линий технической поддержки.

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

У первой и второй линии техподдержки, а также у разработчиков имеется SLA. Чем критичнее баг, тем жестче нормы SLA по его исправлению. Существует и общее SLA по устранению ошибок: от обращения клиента до попадания исправленного кода в продакшн. Решение о том, присваивать ли багу статус Won’t Fix или не присваивать, принимает вторая линия технической поддержки. Однако ее вердикт не окончательный. В первую очередь, ее сотрудники руководствуются принципами и правилами текущего спринта. Кроме того, происходит сбор ожиданий от разработчиков, от клиентов, от департамента развития бизнеса.

Если при учете всех этих факторов возникнет спорная ситуация, то последнее слово окажется именно за второй линией саппорта и, разумеется, Product Owner.



Довольный — значит продуктивный


великое счастие людское

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

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

На этом все. Подробнее о компании «Эквио» можно узнать на их официальном сайте.

А на сайте компании Otus вы можете ознакомиться с нашими курсами и посетить интересующие вас бесплатные вебинары.

Комментарии (12)


  1. DrunkBear
    18.12.2019 16:25

    Знаю как минимум 2 таких компании с Wontfix-политиками: звучит это хорошо и даже — отлично, но только до тех пор, пока ты не не получаешь этот самый wontfix-баг у себя на проде.
    Да, я понимаю, что ситуация редкая и воспроизвелась у пары клиентов из всех существующих + на тестовом стенде.
    Да, я понимаю, что фиксить дорого и фикса скорее всего не будет (если этот баг не начнёт всплывать массово у остальных пользователей).
    Но после этого смотришь на SLA, на маркетинг и громкие обещания и понимаешь, что платная поддержка — не панацея, а обычный маркетинговый буллщит может в следующий раз повезёт и баг затронет многих.
    Но горьковатый привкус наеобмана всё равно сохраняется.


    1. Satyricon
      18.12.2019 18:40

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


      1. DrunkBear
        18.12.2019 23:10

        хм. А добавить нормальную группу и нормальных пользователей с нужными правами (перед этим разобравшись, что именно нужно) — влом? Ойвсё, идите в win?


        1. Satyricon
          18.12.2019 23:30

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


          1. Whuthering
            19.12.2019 12:14

            Чтобы сделать «пинг» полностью самому, нужно работать с raw sockets, и в Linux для такого действительно нужно или запускаться из под рута, или поставить бинарнику флаги CAP_NET_RAW/CAP_NET_ADMIN через setcap.
            Поэтому многие системы мониторинга (типа Zabbix) вместо этого просто запускают стандартную утилиту типа ping или fping и парсят ее вывод.


            1. Satyricon
              19.12.2019 12:20

              Так и есть, но — "юзайте винду" :)


  1. Lex_Habr
    18.12.2019 16:36
    +1

    Хорошая статья, информативная. Здесь говорит опыт человека. Я считаю, что у любого специалиста в своем деле должны быть навыки «актуализация» и «расстановка приоритетов»


  1. johnfound
    19.12.2019 12:00

    Ну, ну! Баги, конечно бывают разными и правильное назначение приоритетов очень важно.


    Но "won't fix" это полный беспредел! Это не назначение приоритетов, а полный отказ от поддержки.


    1. JediPhilosopher
      19.12.2019 14:48

      Да. Именно так. Deal with it.

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

      Поэтому всякие мелочи — или неважные, или слишком редко воспроизводящиеся — всегда задвигаются в конец беклога. О, да, их можно назвать не won't fix а low, lowest, trivial или какие там еще есть уровни приоритета в популярных трекерах. Но суть одна — руки до них скорее всего не дойдут никогда, потому что всегда будут более приоритетные задачи. Если приоритетных задач нет — значит, проект скорее всего умер.

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

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


      1. johnfound
        19.12.2019 15:11

        Да. Именно так. Deal with it.

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


        1. Whuthering
          19.12.2019 15:29
          +1

          Я вообще использую только свободный софт, а там такое не проходит.
          Да ладно, еще как проходит — например, если софт написан на совершенно незнакомом вам языке/стеке, или чрезмерно сложен для вашего опыта, то разрабочтики точно так же могут задвинуть ваш Issue как Won'tFix и в ус не дуть.

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


          1. johnfound
            19.12.2019 16:37

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

            Я так и делал уже несколько раз (например для wine), в конце концов патчи приняли. Это заняло несколько лет. Но! Ведь все это время те баги у меня были исправлены! Сделать такое в коммерческом софте не то чтобы невозможно, но на много порядков сложнее.