Тестирование или управление качеством? Часть 2. Типы тестирования

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В предыдущей статье «Часть 1. Что такое тестирование?» я поделилась с читателями мыслями о том, в чем заключается суть тестирования. Во второй части моих рассуждений о тестировании и управлении качеством я подробно рассмотрю различные типы тестирования и проанализирую модели, которые помогают разработчикам визуализировать процесс тестирования, чтобы вовлечь в него всех участников команды.

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

ТИПЫ ТЕСТИРОВАНИЯ

Существуют разные способы разделения процессов тестирования на категории. Вот один из вариантов:

Постановка вопросов

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

Кроме того, лучше задавать вопросы открытого типа вместо тех, которые требуют ответа «да» или «нет». Например, вместо вопроса «Пользователем системы будет X?» лучше спросить «Кто будет пользователем системы?» — в этом случае мы оставим задел под уточняющие вопросы.

Задание направления разработки

Разработка на основе приемочных испытаний (ATDD) или на основе поведения (BDD) — это две распространенные методологии ведения разработки на основе примеров.

Команда рассматривает какую-то пользовательскую историю (user story) — возможно, обсуждая в формате «трех амиго» на понятных примерах, чтобы донести ее суть до каждого участника дискуссии. Отталкиваясь от этих примеров, они составляют приемочные испытания и проводят дополнительные обсуждения. По мере детализации они продолжают составлять тесты для бизнес-правил в исполняемом формате под API или уровень служб.

Взяв получившиеся тесты, программист может вести разработку на основе тестирования (TDD) — писать модульные тесты, затем сам код и постепенно дорабатывать его, чтобы все тесты завершались успешно. Если организовать работу команды таким образом, тесты на уровне модулей и API будут автоматизироваться в процессе разработки кода, и в нужных местах будут предусмотрены проверки, удостоверяющие, что результаты работы системы соответствуют ожиданиям команды. Тестировщик сможет направлять в нужное русло процесс автоматизации, применяя свои навыки проектирования тестов, помогая создавать оптимальные тесты — не только для благоприятных сценариев, но и для нештатного поведения и других случаев «что, если?».

Углубленное тестирование

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

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

Проверка

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

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

КВАДРАНТЫ ГИБКОГО ТЕСТИРОВАНИЯ

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

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

Вот пример из моего личного опыта:

Во время встречи с разработчиком я сказала ему, что все автоматизированные тесты API внесены в систему и готовы к реализации. Он взял их из системы контроля версий, проглядел и сказал, что продукт не сможет пройти ни одного теста. Я посмотрела на него с удивлением, поскольку мы вместе присутствовали на всех встречах и вместе согласовывали метод тестирования.  Почему же тесты оказались непригодными? Он ведь даже еще не написал код. Выяснилось, что у нас было разное представление о том, как должна работать функция поиска. Именно после этого случая я стала оперировать более конкретными примерами во время обсуждений. Но я хотела подчеркнуть другое: если бы я не написала эти тесты и мы бы их вместе не изучили, разработчик написал бы код с серьезной ошибкой.  А поскольку нам удалось выяснить суть проблемы на раннем этапе, устранить ее было довольно легко. Код еще не был написан, и я помогла предотвратить появление бага.

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

ТЕСТИРОВАНИЕ В РАЗЛИЧНОМ КОНТЕКСТЕ

Подобно тому, как существует множество видов тестирования, есть и множество контекстов тестирования. И один человек попросту не может учесть все комбинации этих двух факторов.

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

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

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

ИТОГИ

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

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

О ней и других важных аспектах мы поговорим в следующей статье.


В преддверии старта курса QA Lead приглашаем всех желающих на бесплатный двухдневный интенсив в рамках которого изучим теоретические основы методов тестирования требований. Рассмотрим использование User Story и критериев приемки для тестирования бизнес-требований. Изучим Example Mapping как способ протестировать технические требования. А также попрактикуемся в построении Example Mapping.

  • ЗАПИСАТЬСЯ НА ИНТЕНСИВ. День 1

  • ЗАПИСАТЬСЯ НА ИНТЕНСИВ. День 2

Источник: https://habr.com/ru/company/otus/blog/568744/


Интересные статьи

Интересные статьи

Это третья часть серии заметок о реактивном программировании, в которой будет представлено введение в WebFlux - реактивной веб-фреймворк Spring. Читать далее ...
В 4 части (вы же прочли первую, вторую и третью, да?) мы возвращаемся к нашей цели – создание фильтра для лица в стиле Snapchat, используя то, что мы уже узнали об отслеж...
По прогнозам Gartner, исследовательской консалтинговой компании, специализирующейся на рынках ИТ, к концу 2024 года, 75% организаций перейдут от пилотных проектов к внедр...
Привет, Хабр!В этой статье мы обсудим генерацию псевдо-случайных чисел участниками, которые не доверяют друг другу. Как мы увидим ниже, реализовать “почти” хороший генератор достаточн...
Сегодня речь пойдет о домашней автоматизации, приятно ведь отдыхая где нибудь в теплом и красивом месте следить за тем как поливаются твои цветы. Это вторая система в моей квартире, первая полива...