Тестируем обычную табуретку: руководство для нетерпеливых менеджеров, или Как работает тестирование |
13.11.2024 00:00 |
Автор: Елизавета Лященко, ГК Самолет Когда фича «протестировать табуретку» вызывает нервный смех у тестировщиков и недоумение у менеджеров, пора разобраться, как на самом деле работает тестирование. Меня зовут Елизавета Лященко, я работаю тестировщиком уже 5 лет, из которых 1.5 года в Самолете, и сегодня разложу по полочкам весь цикл проверки — от странных требований до стресс-тестов и финального релиза. Мы узнаем, почему тестировщик задает миллион вопросов, чем его работа отличается от «я все проверил, все ок» и как тестирование спасает команду от хаоса. Готовьтесь увидеть табуретку так, как вы ещё никогда её не видели! Мне в своей работе порой приходится сталкиваться с ситуациями, когда коллеги из других отделов не до конца понимают и принимают процессы тестирования. Это может проявляться по-разному: где-то забудут оценить сложность задачи с учётом тестирования, где-то разработчик отдаст в тест фичу с комментарием «я там уже всё протестировал, так что можешь сразу закрывать», где-то аналитик обидится, что к его требованиям задают слишком много вопросов, а где-то проджект-менеджер прибежит с вопросами, почему так долго фича находится в тестировании. Обычно все эти вопросы решаются методичным и нудным объяснением «чтобы что», переоценкой задач и заведением пачки тикетов на «уже протестированную» фичу. Но так как штат растёт, а старые коллеги имеют свойство «обнуляться», время от времени приходится повторять упражнение и закреплять материал. С целью экономии придумалось, как объяснить все процессы тестирования на примере популярного задания при приёме на работу: «протестируй табуретку». На этом наглядном примере я объясню, из чего состоит цикл тестирования фичи, и почему ни один из этапов нельзя выкидывать с какой бы то ни было целью. Кому подойдёт это руководство?
Итак, предположим, что к нам пришёл разработчик и сказал: «Вот тут задачка прилетела — сделать табуретку. Я всё сделал, посидел на ней — всё ок. Можешь, в общем-то, закрывать». Мы открываем задачу, а всё техническое задание состоит из единственной фразы «Сделать табурет». С чего мы начнём? Тестирование требованийДля начала давайте разберёмся, что же хотел бизнес-заказчик, когда изъявлял желание сделать табурет. Чтобы выяснить это, сходим к автору задачи и зададим ему наводящие вопросы:
Получение ответов на все эти вопросы — это не просто блажь или занудство, а тестирование требований. Уточняя все мелочи (если у табурета есть тканевая обивка, то чем она закреплена — мебельными гвоздями или скобами?), мы дополняем техническое задание и приходим к максимальному фиксированию договорённостей между командой разработки и бизнесом. Таким образом мы, в первую очередь, спасаем команду от бесконечного цикла доработок, если вдруг выяснится, что заказчик хотел не пластмассовую табуретку, а резной деревянный табурет с бархатной подушечкой. Разумеется, бывают ситуации, когда на многие вопросы мы не сможем получить ответы, потому что заказчик сам не знает точно, что он хочет, а команда дружно пилит MVP (minimum viable product, минимально жизнеспособный продукт). В таком случае задавать вопросы всё равно можно и нужно — даже если у нас не будет ответов на старте разработки, они могут появиться позднее, а сами по себе вопросы помогут команде предусмотреть возможное расширение функциональности и подготовиться к возможным доработкам. Кроме того, все эти вопросы помогут и самому тестировщику на дальнейших этапах тестирования. Тебе не нужно переживать, всё ли ты учёл при проверках, если ты уже набросал себе план проверок! Тестирование продуктаМы получили ответы на все (или почти на все) ключевые вопросы, и теперь переходим непосредственно к самому тестированию табурета (помните, разработчик нам принёс уже готовую задачу!). С чего начнём? Для начала, проверим соответствие базовым требованиям и обмерим табурет линеечкой — соответствуют ли реальные габариты тому, что было в задании? Зафиксируем отклонения, если они есть (в последствии бизнес-аналитик или владелец продукта ознакомятся с этими отклонениями и дадут свой вердикт — допустимо это или нет). Рассмотрим и сверим с требованиями материалы, из которых изготовлен табурет. Проверим, нужных ли он цветов (в некоторых случаях допустимо на этом этапе снова пригласить дизайнера и попросить его ревью). Так же зафиксируем все возможные отклонения в свой отчёт о тестировании. Таким образом мы провели функциональное тестирование. Иными словами, проверили соответствие стула заявленным требованиям. В некоторых продуктовых задачах это может быть более длительным и нудным этапом, где-то, напротив, достаточно одного взгляда на разработанный объект, чтобы протестировать его. Далее переходим к более практическому этапу — юзабилити-тестированию. Здесь нам предстоит проверить, насколько хорошо табурет справляется со своими прямыми обязанностями. Начнём с позитивных тестов:
Когда в самом начале наш разработчик говорил нам, что уже всё протестировал, скорее всего, он провёл именно позитивное тестирование и проверил, что основные функции табурета работают так, как надо. Но мы же не собираемся на этом останавливаться, верно? Проведём также серию негативных тестов:
Прохождение/провал этих тестов не говорят о том, что наш табурет функционирует/неисправен, потому что во всех случаях мы использовали табурет не по прямому назначению. Положительные результаты этих тестов мы можем отнести к дополнительной функциональности, отрицательные — вынести в предупреждение или инструкцию, чтобы защититься от возможной негативной реакции со стороны заказчика (не сушить домашних животных в микроволновке, не балансировать на табурете на лестнице). Строго говоря, такие проверки не являются обязательными, но если мы пытаемся добиться близости к исчерпывающему тестированию (не существует в природе) и быть максимально уверенными в своём продукте, то пренебрегать ими не стоит. На следующем этапе проведём интеграционное тестирование:
При помощи таких проверок мы выясним, насколько хорош табурет при взаимодействии с остальными окружающими его объектами. Параллельно с интеграционным, мы можем провести также UI-тестирование и оценить, насколько же в целом красив и хорош наш табурет, как он вписывается в интерьер. Ранее, при функциональном тестировании, мы убедились, что изделие соответствует заданным в ТЗ характеристикам, но вряд ли кто-то будет рад ярко-красной модерновой табуретке в классическом интерьере в сдержанных тонах, даже если изначально он сам так и попросил. Однако, как правило, провал UI-тестов на таком позднем этапе приведёт не к тому, что мы не отдадим табурет заказчику, а скорее к тому, что мы сдадим работу и сядем ждать обратной связи. Теперь, когда большая часть безопасных тестов проведена, мы заручаемся разрешением тимлида и переходим к более опасной (в контексте табурета) части. Проведём нагрузочное тестирование. Сколько веса выдержит табурет? Он выдержит одного взрослого человека, сидящего на нём? А взрослого человека и мелкое домашнее животное? Взрослого человека и ребёнка? Позовём друзей и предложим им поупражняться в акробатике — как много человек одновременно сможет сидеть на одном табурете? Если в какой-то момент табурет всё-таки развалится, спрячемся от друзей в шкафу и зафиксируем результаты. Если не развалится, тем лучше — это тоже зафиксируем. Очевидно, что в реальных условиях табурет вряд ли будет использоваться таким нетривиальным способом, но нагрузочное тестирование помогает определить порог отказоустойчивости системы, что полезно хотя бы для составления документации и предупреждения негативной реакции пользователей. И под конец проведём серию стресс-тестов (при условии, что мы имеем несколько абсолютно одинаковых копий табурета, которыми можем свободно распоряжаться):
Зафиксируем результаты. Теперь мы знаем не только какую нагрузку способен выдержать табурет, но и каков его запас прочности при использовании в экстремальных условиях. ДокументацияЕсли быть предельно откровенными, отсутствие документации не блокирует релиз и не мешает нам выдать табурет заказчику сразу же, как только будут устранены все дефекты. Однако хорошим тоном считается всё же составить все сопроводительные документы. И если все найденные баги мы сразу относили разработчикам, то сейчас предстоит задача несколько иного рода. Нам нужно собрать итоги тестирования в кучку и разобрать их по артефактам:
Всё это позволит нам на выходе получить не только хороший табурет, но и документально подтвердить, насколько тщательно табурет был проверен. Помимо всего прочего, в будущем, если по каким-то причинам у табурета станет меньше ног или отвалится сидение, мы сможем доказать, что на предыдущих этапах всё было в порядке и мы следили за качеством изделия. РегрессВ момент, когда мы решаем, что протестировали наш табурет со всех сторон, и он вполне удовлетворяет всем требованиям, начинается этап предрелизной проверки. Нам нужно убедиться, что в процессе сборки табурета мы не сломали остальную мебель в квартире. Проверяем всё, что окружает табурет — пол, стены, потолок, двери. Убрали ли мусор после сборки? Не поцарапали ли напольное покрытие? Не запачкали диван краской? Проверим кота — не играет ли он с блоком строительных скоб? Если в процессе этих проверок мы находим какие-то дефекты, вызванные новой разработкой, требуется, как минимум, их фиксирование в виде бага. В идеальной картине — ещё и незамедлительное устранение, но здесь приходится исходить из ресурсов команды: можем ли мы себе позволить прямо сейчас перекрашивать стену, или достаточно просто поставить возле неё кадку с фикусом? РелизИ вот, наступает момент релиза — мы торжественно презентуем табурет заказчику, ожидая бурных оваций (но на всякий случай, держа за спиной огнетушитель — мало ли). Мы пляшем вокруг табурета, присаживаемся на него, демонстрируя восхитительные сидушечные способности нашей поделки. Заказчик осматривает табурет, садится на него… О нет, он всё-таки хотел от нас компьютерное кресло! ЗаключениеИтак, на простом примере табурета мы разобрались:
Почему это важно? Продуктовая разработка сейчас — это очень динамичный и насыщенный процесс. Время каждого участника команды дорого, а репутационные риски при релизе некоторых продуктов весьма высоки. В таких условиях работа тестировщика — въедливая, нудная и дотошная — это почти последний рубеж обороны, средство защиты команды и от потери репутации, и от выполнения бессмысленной и ненужной работы. Поэтому всякий раз, когда создаётся ощущение, что тестировщик слишком долго разбирается с одной фичей или задаёт слишком много вопросов перед началом тестирования, стоит подумать, зачем он это делает — просто ли от вредности, или всё-таки процесс тестирования — это что-то более сложное, чем «нажал на кнопку, получил результат, закрыл задачу»? За основу для статьи я брала устоявшиеся процессы в своей команде, поэтому допускаю, что в других командах всё может быть ещё сложнее. Но если вы только начинаете выстраивать тестирование у себя, то при помощи этого руководства вы сможете заложить хотя бы фундамент для всего процесса. Удачи! |