В предыдущей части мы рассматривали случаи, в которых должен быть заведен баг репорт. Основные заключения:
- Баг - это что либо угрожающее ценности продукта для влиятельного стейкхолдера;
- Баг репорт - это утверждение о том, что продукт может быть лучше, чем он есть;
- Идея "быть лучше" сама по себе субъективна: что лучше для одного, может быть хуже для другого;
- Баг репорт обоснован, если он описывает проблему, которая действительно уменьшает ценность продукта для влиятельного стейкхолдера.
Представим себе ситуацию, когда в одной компании возникает уйма жалоб от пользователей: продукт не работает. Начинается разбирательство и выясняется, что баги были заведены, но программисты не поняли баг репорты и не пофиксили их. Проблема заключалась в том, что тестеры были более сосредоточены на том, чтобы завести воспроизводимые баги, а не на качестве предоставляемой в баг репорте информации. Конечно, воспроизводимость бага имеет большое значение, но иногда одной воспроизводимости недостаточно.
Тут возникает компромиссы:
- чем больше времени мы уделяем исследованию каждого бага, тем меньше нам остается времени на обнаружение новых багов;
- если мы тратим много времени на сбор информации, необходимой программистам, то сколько времени мы таким образом сохраняем для них? (например, стоит ли тратить час на исследование бага, если этим мы сэкономим программисту 10 минут его времени?)
Когда мы заводим баг, мы не просто описываем слабость продукта, мы пытаемся настроить программиста так, чтобы он захотел потратить свое время на фикс этого бага. Это становится особенно важным, когда люди очень загружены, перерабатывают, вынуждены тратить свое время на исправление багов. Время, которое они могут провести со своими детьми. В таких ситуациях мы должны подходить к созданию баг репортов с особой ответственностью.
Искусство мотивировать человека к выполнению того, чего мы от него хотим называется продажей.
Защита багов - это продажа багов
Под защитой багов мы будем понимать нечто большее, чем просто заведение багов. Ранее мы говорили о том, что лучший тестировщик - тот, кто добивается фикса большинства своих багов. Но это может заставить людей высчитывать эффективность тестировщиков по количеству их багов, которые были исправлены. Это неправильно! Гораздо важнее не то, сколько багов было пофикшено, а то, какие баги были пофикшены. Давайте переформулируем наше определение:“The best tester isn’t the one who finds the most bugs or embarrasses the most programmers.The best tester is the one who getsЗащита багов состоит в:the mostTHE RIGHT bugs fixed.”
- представлении бага в наиболее сильном свете;
- представлении бага таким образом, чтобы связать описываемую проблему с интересами влиятельных стейкхолдеров; и если один из стейкхолдеров действительно должен быть заинтересован в баге, мы должны удостовериться в том, что он понял баг;
- в хорошем донесении информации, которое позволяет принимать решения на основе баг репорта.
- мотивация программиста пофиксить баг;
- преодоление возражений, направленных на то, чтобы отклонить фикс бага.
Если тестировщик заработал себе высокий уровень доверия у разработчиков, то одного его мнения бывает достаточно, чтобы мотивировать людей пофиксить баг.
Далее мы поговорим о так называемом follow-up тестировании, которое нужно проводить после обнаружения бага. Я буду переводить этот процесс как контрольное тестирование, так как этот процесс очень похож на то, что мы обычно делаем перед завершением какой-то работы для проверки того, что мы все сделали правильно.
Контрольное тестирование после обнаружения бага имеет главную цель: найти комбинацию настроек программы, платформы, последовательности шагов, при которой баг выглядит наиболее серьезным.
При выполнении контрольного тестирования можно:
- Попробовать изменить последовательности шагов, приведших к багу. Например, можно повторить шаги несколько раз. Возможно простая ошибка, повторенная несколько раз, приведет к крашу программы. Или можно тестировать эту ошибку в комбинации с другими фичами, на которые она может повлиять.
- Попробовать воспроизвести баг с другими настройками программы.
- Попробовать изменить файлы с данными, для которых наблюдается баг.
- Попробовать проверить баг на другой платформе (на другой ОСи, на другом железе).
UNCORNER YOUR CORNER CASESЕго можно объяснить так: если баг наблюдается при каких-то экстремальных значениях данных или редко используемых настройках, то нужно попробовать установить, наблюдается ли он на обычных данных и при наиболее популярных настройках.
Чем шире диапазон данных и настроек, на которых наблюдается баг, тем он серьезнее.
Очень важно при заведении бага указать, что он наблюдается не на всех ОСях, не при всех настройках. Потому что мы теряем доверие разработчиков, когда у них не получается воспроизвести баг, заведенный нами как общий баг.
Если баг наблюдается все-таки только на экстремальных значениях, все равно не лишним будет напомнить, что баг - это только симптом проблемы, которая может быть гораздо серьезнее. Иногда только разработчик может понять, насколько низлежащая проблема серьезна.
Хороший подход к тестированию платформ, на которых наблюдается баг - это иметь 2 машины с разными характеристиками: разным объемом RAM, разными процессорами. Причем баг следует сначала воспроизводить на медленной машине, а потом пытаться воспроизвести на мощной машине. Еще очень полезно заводить баг на мощной машине, параллельно проверяя шаги, приведенные в баге, на медленной машине. Так можно протестировать алгоритм воспроизведения бага.
Одна деталь, на которую обращает внимание Канер: после того, как мы нашли серьезный баг на одной машине, нужно оставить эту машину (создать снапшот) и попробовать воспроизвести баг на другой машине. Очень важно не потерять трудновоспроизводимый баг. Даже если он не воспроизведется на другой машине, мы может предоставить для исследования бага первую машину.
Summary
Наиболее ценные баг репорты концентрируются не на проблеме, а на контексте продукта. Но нужно быть очень осторожными при предоставлении информации о контексте. Люди не ждут от тестеров, что они являются экспертами в других областях. Лучше дать слово экспертам в своей области, чьему мнению доверяют.Хорошие баг репорты требуют дополнительного контрольного тестирования для представления бага в наиболее сильном свете:
- поиск наиболее серьезного проявления ошибки;
- проверка диапазона критических условий, при которых возникает ошибка;
- особенно важно для апдейтов, хотфиксов - проверка возраста бага, выяснение того, является ли он последствием недавних изменений или уже давно присутствует в продукте.
В чем смысл борьбы за исправления багов? Почему решение о важности бага принимает тестировщик и тратит на дополнительное исследование время (= деньги заказчика) без просьбы заказчика? Вопрос приоритезации и важности - это право тех, кто заказывает продукт и платит за это деньги. Иначе вы можете строить воздушные замки в погоне за мифическими багами, а при этом продукт дальше двигаться не будет. Нашли, сообщили и пусть сторона бизнеса решает, важно это или нет и когда стоит заняться более детально. Часто ответ НИКОГДА! ;)
ОтветитьУдалитьА где вы нашли утверждение, что тестировщик должен определять важность бага? Тут говорится о том, что тестировщик должен представить баг таким образом, чтобы люди, принамающие решение о важности, могли сделать правильное решение. Спасибо за начало дискуссии)
УдалитьНо ведь для того, чтобы "продавать" баги, тестировщик должен выбрать наиболее важные с его точки зрения. На "продажу" всех багов уйдет неимоверное количество усилий. :)
ОтветитьУдалитьКонечно при заведении бага нужно соблюдать баланс, ведь чем больше времени мы тратим на заведение бага, тем меньше его остается на нахождение новых багов. Некоторые баги и не требуют продажи - они говорят сами за себя)
ОтветитьУдалитьДумаю тестировщик должен знать контекст проекта (кто и как использует продукт, где он продается, какие жалобы приходят от пользователей), чтобы выделять больше времени на серьезные баги.
Да, наверное выводы о важности бага тестировщик должен делать. Хотя это и очень сложно, если проекты, в которых он участвует, часто меняются и он не успевает изучить их контекст.