Техники тест-дизайна
Что такое техники тест-дизайна: определение, основные принципы, примеры и практические советы. Изучайте основах тестирования ПО с подробными объяснениями для начинающих специалистов.
Техники тест-дизайна.
Тест дизайн — это этап процесса тестирования ПО, на котором проектируются и создаются тестовые случаи (тест кейсы) в соответствии с определёнными ранее критериями качества и целями тестирования.
Другими словами это методы, используемые для создания эффективных тест-кейсов. Основные техники включают эквивалентное разбиение (разделение входных данных на классы, которые обрабатываются одинаково), анализ граничных значений (проверка крайних значений входных данных), и попарное тестирование (тестирование комбинаций параметров по парам).
Другие техники включают метод основанный на сценариях использования, тестирование состояний и переходов (State Transition Testing) и таблицы решений. Эти техники помогают улучшить покрытие тестов и минимизировать количество тестов, не теряя их эффективности.
Цели тест-дизайна.
- Тесты должны покрывать весь функционал.
- Тестов должно быть минимально достаточно.
- Формализация проверок.
- Приоритезация проверок.
Эквивалентное разделение.
Позволяет минимизировать число тестов, не создавая сценарий для каждого возможного значения, а выбрав только одно значение из целого класса и приняв за аксиому, что для всех значений в данной группе результат будет аналогичным.
Правила работы:
- Определение класса эквивалентности.
- Минимум 1 тест для 1 класса.
Пример 1: Есть поле ввода с диапазоном допустимых значений от 1 до 100.
Сами понимаете, что на 95 тестов на допустимые значения и на несметное количество тестов на недопустимые значения уйдет очень много времени. И здесь нам помогут классы эквивалентности.
Исходя из того, с одной стороны, все допустимые значения могут влиять на поле ввода одинаково, следовательно все числа от 1 до 100 можно смело считать эквивалентными. С другой стороны, все недопустимые значения должны одинаково влиять на поле ввода (в идеале не должно быть возможности ввода этих значений в поле). Таким образом, есть уже несколько классов эквивалентности:
Допустимые значения (от 1 до 100). Недопустимые значения.
- От — ∞ до 0.
- От 101 до + ∞.
- Специальные символы (# @ + — / _ : ; ” ’ и т.д.).
- Буквы.
Используя классы эквивалентности можно протестировать поле ввода минимум из 5 тестов.
Пример 2: Есть поле ввода, принимающее на ввод число из 3 цифр. Формируем классы эквивалентности.
Например, число 111 представляет класс «трехзначные числа». Поданное на ввод, число 111 не вызывает ошибку в поле (тест пройден). Из этого делаем вывод, что все другие члены класса
«Трехзначные» также будут нормально приняты полем.
А теперь берем число 15 из класса «двузначные числа». Ожидается, что поле выдаст ошибку в ответ и это будет значить, что оно работает правильно, и предполагается, что остальные двузначные числа также будут вызывать ошибку.
Также берем число 5 из класса «однозначные числа». Ожидается, что поле выдаст ошибку в ответ и это будет значить, что оно работает правильно, и предполагается, что остальные однозначные числа также будут вызывать ошибку.
Анализ граничных значений.
Данная техника основана на предположении, что большинство ошибок может возникнуть на границах эквивалентных классов. Тесно связана с вышеописанной техникой эквивалентного разделения, из-за чего часто используется с ней в паре.
Пример 1: Поле ввода пароля принимает значения минимум 6 до максимум 10 символов.
Это означает, что результаты для значений в разделах 0-5, 6-10, 11-14 должны быть эквивалентными.
- № сценария тестирования.
- Описание.
- Ожидаемый результат.
Введите от 0 до 5 символов.
Система не должна принимать.
Введите от 6 до 10 символов.
Система должна принять.
Введите от 11 до 14 символов.
Система не должна принимать.
Таким образом, граничные значения позволяют выявить проблемы, связанные с обработкой крайних случаев. Эти проблемы могут включать в себя ошибки округления, переполнение, неправильную проверку границ и другие подобные проблемы.
Преимущества использования граничных значений:
- Выявление критических ошибок: Граничные значения обычно наиболее чувствительны к ошибкам, и их проверка позволяет выявить проблемы, которые могут быть незаметны на других значениях.
- Повышение качества: Обнаружение и устранение ошибок на границах значений может существенно повысить надежность и качество программы.
- Повышение доверия к программе: Тщательное тестирование на граничных значениях помогает убедиться, что программа обрабатывает все возможные входные сценарии.
Пример 2: Есть форма регистрации на сайте, и одно из полей — это возраст с допустимым диапазоном от 18 до 60 лет. Граничные значения будут: 17, 18, 19, 59, 60, 61. Здесь 17 и 61 — это значения за пределами границ, которые должны вызвать ошибку или предупреждение. Почему мы выбираем именно эти значения?
18 и 60: Это минимальное и максимальное допустимые значения. Тестируя их, можно удостовериться, что система корректно принимает граничные допустимые значения.
17 и 61: Это значения, которые на единицу меньше или больше минимального и максимального допустимых значений соответственно. Тестируя их, мы проверяем, как система реагирует на значения, которые лежат вне допустимого диапазона.
19 и 59: Они представляют собой внутренние граничные значения. Тестируя их, мы убеждаемся, что система корректно обрабатывает значения, которые находятся непосредственно внутри диапазона.
Предугадывание ошибки.
Используя свои знания о системе, тестировщик может «предугадать», при каких входных условиях есть риск ошибок. Например, в спецификации указано, что поле должно принимать два символа.
В числе возможных тестов:
- Что произойдет, если не ввести возраст?
- Что произойдет, если ввести отрицательный возраст, например, - 9?
- Что произойдет, если ввести не цифры, а другие символы?
- Что произойдет, если ввести цифру и другой символ?
- Что произойдет, если попытаться ввести не две цифры, а другое количество?
Основные принципы техники предугадывания ошибки:
- Опыт тестировщика: Этот метод полагается на опыт тестировщика и его знание типичных ошибок, которые могут возникнуть в конкретной системе.
- Интуиция: Тестировщики используют свою интуицию для предсказания ситуаций, в которых вероятно появление ошибок.
- Направленное тестирование: Тест-кейсы создаются на основе предположений о возможных ошибках, и поиск фокусируется на этих областях.
Пример: Возьмем один из элементов сайта — форму регистрации.
Можно использовать вот какие варианты:
- Указать e-mail c несуществующим доменом на конце.
- Указать e-mail без знака «@».
- Заполнить поле «Пароль» без использования обязательных символов. Например, если программа требует, чтобы в пароле были заглавные и строчные буквы, то пробуем ввести пароль без использования заглавных букв.
- В поле «Пароль еще раз» ввести символы отличные от символов в поле «Пароль».
- Снять галочку «Я принимаю условия Пользовательского соглашения».
- Ввести неверные символы с картинки.
- Оставить одно поле незаполненным.
Исчерпывающее тестирование.
Используется крайне редких случаях. В пределах этой техники нужно уметь проверять все возможные комбинации входных значений, и в результате, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.
Матрица соответствия требованиям.
Двумерная таблица, содержащая соответствие функциональных требований продукта и подготовленных тестовых сценариев. В заголовках строк таблицы расположены требования, а в заголовках колонок — тестовые сценарии или наоборот. На пересечении соответствующих строки и столбца ставится отметка, обозначающая, что данное требование покрывается данным тест-кейсом.
Таблица дает визуальное отображение двух параметров:
- Наличие в системе требований, которые еще не покрыты (если у требования нет ни одного пересечения с тест-кейсами).
- Есть ли в системе избыточное тестирование — если требования имеет несколько пересечений (необходимое условие).
Причина / Следствие.
Позволяет выявлять возможные дефекты в программном обеспечении, основываясь на взаимосвязи между входными данными (причинами) и ожидаемыми результатами (следствиями). Давайте разберем эту технику простым языком с примерами.
Как это работает?
- Причина: Это фактор, который может повлиять на результат. Например, это может быть действие пользователя или конкретный ввод данных.
- Следствие: Это то, что происходит в результате действия причины — это ожидаемый результат.
Пример 1: Онлайн-магазин.
Представим себе онлайн-магазин, где пользователи могут добавлять товары в корзину.
- Причина: Пользователь хочет добавить товар в корзину.
- Следствие: Товар появляется в корзине.
Теперь рассмотрим различные ситуации:
- Ситуация 1: Пользователь нажимает кнопку «Добавить в корзину».
- Следствие: Товар отображается в корзине. (Ожидаемый результат).
- Ситуация 2: Товар недоступен для покупки (например, он распродан).
- Следствие: Появляется сообщение об ошибке: «Товар недоступен». (Ожидаемый результат).
- Ситуация 3: Пользователь не авторизован и пытается добавить товар в корзину.
- Следствие: Появляется сообщение: «Пожалуйста, войдите в систему». (Ожидаемый результат).
Попарное тестирование.
Техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить количество тест-кейсов.
Сформулировать суть попарного тестирования можно следующим образом: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров.
Главные цели попарного тестирования:
- Убрать избыточные проверки.
- Обеспечить хорошее тестовое покрытие.
- Выявить наибольшее количество багов на минимальном наборе тестов.
Принцип работы метода попарного тестирования:
- Идентификация параметров: Определение параметров, которые могут влиять на функциональность продукта. Например, это могут быть параметры ввода, настройки или опции.
- Определение значений параметров: Для каждого параметра определяются возможные значения. Например, параметр «Цвет» может иметь значения «Красный», «Синий», «Зеленый» и т.д.
- Создание комбинаций: Для всех параметров создаются все возможные комбинации значений. Однако, вместо создания всех комбинаций, используется методика для минимизации числа тестовых случаев.
- Создание тест-кейсов: Для каждой комбинации значений создаются отдельные тест-кейсы для тестирования.
Техника попарного тестирования особенно полезна, когда есть множество параметров и комбинаций, если нужно сократить количество тестовых случаев, сохраняя при этом достаточное покрытие функциональности. Это позволяет экономить время и ресурсы на тестирование.
Пример 1: у нас есть простое приложение, в которое ввод подается выбором значений из таких объектов ввода: выпадающего списка (с числами от 0 до 9), чекбокса, радиокнопки, текстового поля, и кнопки ОК. Текстовое поле принимает только числа от 0 до 100.
Получаются варианты следующие:
Список: 0,1,2,3,4,5,6,7,8,9.
Чекбокс: Отмечен / нет. Радиокнопка: Выбрана / не выбрана. Текстовое поле: числа 0…100.
Исчерпывающее тестирование такого приложения предполагает (умножаем все количества вариантов) 10*2*2*100 = 4000
тест-кейсов. Если же к этому добавить «негативные варианты» (то есть с вводом заведомо некорректных значений, а так обязательно случается в реальном мире), то количество будет
«сильно выше» 4000. Попарное тестирование:
- Варианты радиокнопки и чекбокса сокращать нельзя, они всегда будут иметь только возможных 2 значения.
- С текстовым полем можно ограничиться тремя числами: валидное целое, невалидное целое, буква или спецсимвол.
- Со списком: здесь предположим, для упрощения, что значение будет или 0, или «любое другое кроме 0», то есть получается только 2 варианта, «0» и «другое».
- Считаем количество вариантов (тест-кейсов) теперь: 2*2*2*3 = всего 24. То есть, при «обычном» подходе у нас 24 тест-кейса, что уже неплохо.
Идем дальше по пути попарного тестирования:
-
Упорядочиваем объекты ввода так, чтобы объект ввода с самым большим количеством вариантов шел первым, и т.п.
-
Делаем таблицу. Список у нас будет принимать 2 значения.
-
Следующая колонка — чекбокс, тоже 2 значения.
-
Проверяем, что у нас «покрыты» все комбинации списка и чекбокса.
-
То же делаем с радиокнопкой (2 значения).
-
Проверяем, что все пары «покрыты».
-
Текстовое поле
-
Выпадающий список
-
Чекбокс
-
Радиокнопка
-
Валидное целое
-
0
-
Отмечен
-
Включена
-
Валидное целое
-
«другое значение» (не 0)
-
Не отмечен
-
Выключена
-
Невалидное целое
-
0
-
Отмечен
-
Включена
-
Невалидное целое
-
«Другое значение»
-
Не отмечен
-
Выключена
-
Буква
-
0
-
Отмечен
-
Включена
-
Буква
-
«Другое значение»
-
Не отмечен
-
Выключена
Таким образом, пользуясь техникой попарного тестирования, сократили количество тест-кейсов сначала с 4000 до 24, затем до 6 как в таблице.
ADHOC тестирование.
Техника тест-дизайна ADHOC — это метод, при котором тестировщик производит тестирование программного продукта без жесткого плана или заранее подготовленных тест-кейсов.
Вместо этого тестировщик полагается на свой опыт и интуицию, чтобы проводить тесты, исследуя приложение и выявляя ошибки, которые могут быть упущены более формальными методами тестирования.
Основные характеристики техники ADHOC тестирования:
Неформальность.
Тестирование проводится без заранее подготовленных планов или тест-кейсов. Тестировщик исследует приложение на основе своего интуитивного понимания и опыта.
Креативность.
Тестировщик свободен в выборе тестовых сценариев и сценариев использования, что может привести к выявлению неожиданных ошибок.
Ориентированность на реальные сценарии.
Тестировщик может сосредотачиваться на тестировании сценариев, близких к реальным потребностям пользователей.
Преимущества:
- Может выявить нестандартные искажения в работе приложения.
- Позволяет тестировщику проявить свою креативность и интуицию.
- Полезно на начальных этапах разработки, когда тест-кейсы ещё не разработаны.
Недостатки:
- Не гарантирует полного покрытия функциональности продукта.
- Может быть менее систематичным и организованным, что затрудняет повторяемость тестов.
- Ошибки могут быть пропущены из-за отсутствия формальных сценариев.
Примеры ADHOC тестирования:
- Тестирование пользовательского интерфейса.
Тестировщик может случайным образом исследовать различные части пользовательского интерфейса, проверяя элементы, ввод данных и отклик приложения.
Тестирование случайных сценариев.
Тестировщик может провести тестирование, в котором он попробует использовать приложение так, как это сделал бы реальный пользователь, и при этом записывать замечания о неправильной работе или ошибках.
Тестирование сценариев использования.
Тестировщик может активно использовать приложение, следуя различным сценариям использования, чтобы выявить проблемы в процессе.
Техника ADHOC тестирования может быть полезной для быстрого выявления явных ошибок и проблем при работе приложения, однако она не заменяет более формальных методов тестирования, таких как написание тест-кейсов или автоматизированных тестов.
Пользовательский сценарий.
Техника тест-дизайна «пользовательский сценарий» (User Scenario Testing) — это метод, при котором создаются тест-кейсы, описывающие типичные сценарии использования продукта реальными пользователями. Эта методика позволяет проверить, как продукт взаимодействует с пользователями в реальных условиях и как он соответствует их потребностям.
Принцип работы метода пользовательского сценария:
Идентификация пользовательских сценариев.
Определение типичных сценариев, которые пользователи будут выполнять при использовании продукта. Это могут быть действия от начала до конца, включая различные взаимодействия и операции.
Создание тест-кейсов.
Создание тест-кейсов на основе этих сценариев. Каждый тест-кейс описывает действия пользователя, вводимые данные, ожидаемые результаты и ожидаемые реакции продукта.
Проведение тестирования.
Проведение тестов, повторяя сценарии, описанные в тест-кейсах. Тестирование включает в себя взаимодействие с продуктом так, как это делали бы реальные пользователи.
Такие тест-кейсы охватывают конкретные сценарии использования, которые могут выполнить пользователи. Техника пользовательского сценария позволяет более реалистично оценить функциональность продукта и его удобство для пользователей.
Пример: Регистрация нового пользователя.
Шаг 1: Открыть веб-приложение.
Открыть веб-браузер.
Ввести URL адрес веб-приложения. Нажать Enter.
Шаг 2: Перейти на страницу регистрации.
Найти и нажать на кнопку «Регистрация». Дождаться загрузки страницы.
Шаг 3: Ввести данные для регистрации.
Ввести уникальное имя пользователя в поле «Имя пользователя». Ввести пароль в поле «Пароль».
Повторно ввести пароль для подтверждения в поле «Повторить пароль».
Ввести адрес электронной почты в поле «Email». Нажать на кнопку «Зарегистрироваться».
Шаг 4: Проверить результат регистрации.
Дождаться загрузки страницы с подтверждением регистрации. Проверить, что на странице отображается сообщение
«Регистрация успешно завершена».
Проверить, что новый пользователь появился в списке зарегистрированных пользователей в базе данных.
Шаг 5: Выйти из приложения. Найти и нажать на кнопку «Выход».
Дождаться завершения выхода из приложения.
Состояние / переход.
Модель состояний и переходов — это некая визуализация, способ исследования продукта. Продукт состоит из объектов, а уже эти объекты могут находиться в разных состояниях, и применять к ним можно разные действия.
Позитивные и негативные данные.
Техника тест-дизайна с использованием позитивных и негативных тестовых данных предполагает создание тест-кейсов, в которых проверяются как корректные, так и некорректные данные для тестирования. Позитивные тестовые данные — это те, которые должны быть обработаны успешно и привести к правильным результатам, а негативные тестовые данные — это те, которые предположительно могут вызвать ошибки или неправильное поведение приложения.
Позитивные тестовые данные.
Позитивные тестовые данные представляют собой корректные и допустимые значения, которые ожидаются от пользователей. Эти тесты помогают убедиться, что приложение работает правильно в типичных сценариях использования.
Пример позитивных тестовых данных:
- Положительное число.
Проверить, как приложение обрабатывает корректное положительное число.
- Корректный адрес электронной почты.
Проверка, как приложение реагирует на правильно отформатированный адрес электронной почты.
- Допустимая длина строки.
Проверка, как приложение обрабатывает строку с допустимой длиной.
Негативные тестовые данные.
Негативные тестовые данные представляют собой некорректные или недопустимые значения, которые могут вызвать ошибки или
неправильное поведение приложения. Эти тесты помогают выявить уязвимости и предотвратить неправильную обработку данных.
Примеры негативных тестовых данных:
- Отрицательное число.
Проверка, как приложение обрабатывает отрицательное число, если такая обработка не предполагается.
- Некорректный адрес электронной почты.
Проверка, как приложение реагирует на адрес электронной почты с неправильным форматом.
- Слишком длинная строка.
Проверка, как приложение обрабатывает строку с длиной, превышающей максимально допустимую.
- Ввод специальных символов.
Проверка, как приложение обрабатывает специальные символы, которые могут использоваться для атак.
Таким образом, техника тест-дизайна с использованием позитивных и негативных тестовых данных позволяет проверить как правильное, так и неправильное поведение приложения, что помогает выявить ошибки, недочеты и уязвимости.
Комбинирование обоих видов тестовых данных обеспечивает более полное и надежное тестирование.
Метод шляпы / роли.
Техника тест-дизайна «Шляпы и Роли» (Hats and Roles Testing) — это метод, при котором тестировщики принимают разные «роли» или «шляпы» пользователей и, в соответствии с этими ролями, проводят тестирование, чтобы получить более разнообразные и объективные результаты. Этот метод позволяет исследовать продукт из разных точек зрения, что может помочь выявить разнообразные аспекты его работы.
Принципы работы метода «Шляпы и Роли»:
- Определение ролей и шляп.
Определение различных «ролей» или «шляп», которые пользователи могут носить во время использования продукта. Каждая роль представляет собой определенный набор обязанностей, интересов и задач.
- Создание тест-кейсов.
Для каждой роли создаются соответствующие тест-кейсы, которые акцентируются на тех аспектах продукта, которые наиболее важны для данной роли.
- Проведение тестирования.
Тестировщики принимают «роли» или «шляпы» и проводят тестирование, следуя тест-кейсам для каждой роли. Это позволяет оценить продукт с разных точек зрения.
Пример техники «Шляпы и Роли»:
Предположим, что есть приложение для социальной сети. Нужно применить метод «Шляпы и Роли» для тестирования:
- Роль: Обычный пользователь.
Тест-кейсы:
Проверка функционала добавления друзей.
Проверка возможности создания и публикации постов. Проверка функции лайков и комментариев к постам.
- Роль: Администратор группы.
Тест-кейсы:
Проверка возможности создания группы.
Проверка функционала управления участниками группы. Проверка правил модерации контента.
- Роль: Рекламодатель.
Тест-кейсы:
Проверка функции создания рекламных объявлений. Проверка опций таргетированной рекламы.
Проверка отчетности о показах и кликах.
- Роль: Технический специалист.
Тест-кейсы:
Проверка безопасности приложения: SQL-инъекции, XSS и т.д.
Проверка производительности: время загрузки страниц, отклик интерфейса.
- Роль: Мобильный пользователь.
Тест-кейсы:
Проверка адаптации интерфейса и удобства использования на мобильных устройствах.
Проверка функционала мобильных уведомлений.
Путем применения разных ролей и шляп тестировщики оценивают продукт с разных точек зрения и могут выявить потенциальные проблемы или несоответствия, которые могли бы быть упущены при тестировании только из одной перспективы.
В данной технике тест дизайна описываются подходы к составлению тест кейсов на некоторых «ролях» как пользователь, администратор, система и т. п. Описываются тестовые сценарии с точки зрения этих «ролей» и проводятся тестовые мероприятия.
Разговорчики-driven.
Данный метод представляет собой тесную коммуникацию команды тестировщиков с командой разработчиков. Команда разработчиков предоставляет детальную информацию о разрабатываемом продукте, такие как используемые движки, языки программирования, фреймворки, системы контроля версии, системы управления базами данных и т. п.
Analytics management.
Техника тест-дизайна «управление аналитикой» (Analytics management) — это метод, при котором создаются тест-кейсы, основанные на аналитических данных, как:
- Наибольшее количество посещении той или иной страницы, если тестируется web-сайт.
- Частое использование определенного функционала приложения.
- Основные элементы взаимодействия пользователей.
- Используются такие сервисы, как Google Analytics, Яндекс Метрика и т. п.
Bug-driven.
Bug-Driven Testing (тестирование, основанное на багах) — это методика тестирования, при которой тесты разрабатываются исходя из уже обнаруженных багов или проблем в программном продукте. Этот подход позволяет более эффективно выявлять и исправлять дефекты, так как фокусируется на реальных проблемах, которые могут возникнуть в процессе использования продукта.
Принципы техники Bug-Driven Testing:
- Идентификация багов.
Нужно начать с анализа уже обнаруженных багов. Рассмотреть их типы, причины и условия, которые привели к возникновению. Это позволит определить наиболее критические аспекты продукта.
- Создание тестовых сценариев.
Основываясь на обнаруженных багах, нужно разработать тестовые сценарии, которые проверяют именно те условия, при которых были обнаружены проблемы. Это может включать в себя разнообразные входные данные, действия пользователя и состояния системы.
- Разнообразие сценариев.
Создание разнообразных тестовых сценариев, чтобы охватить различные аспекты продукта. Разные баги могут проявляться в разных условиях, поэтому важно покрыть как можно больше возможных сценариев.
- Тестирование граничных условий.
Важно обращать внимание на граничные условия, которые могут вызвать баги. Тестирование предельных значений параметров, вводы с некорректными данными и другие аномалии.
- Итеративность.
По мере нахождения и исправления багов, нужно обновлять тестовые сценарии. Новые баги могут обнаружиться в процессе исправления старых, и нужно будет включить эти сценарии в процесс тестирования.
- Примеры:
Работа над мессенджером, и обнаружены следующие баги:
Баг.
При отправке сообщения с определенными специальными символами, приложение вылетает.
Тестовый сценарий.
Создать сообщение с этими символами и отправить. Проверить, не вылетает ли приложение.
Баг.
Сообщения иногда отправляются дважды, если отправить их в быстром режиме.
Тестовый сценарий.
Отправить несколько сообщений подряд с минимальным временным интервалом. Проверить, не отправляются ли они дважды.
Баг.
При долгом чате приложение начинает тормозить и медленно реагировать на ввод.
Тестовый сценарий.
Заполнить чат большим количеством сообщений. Взаимодействовать с интерфейсом и проверить, насколько медленно реагирует приложение.
Баг.
Не уведомляет о входящих сообщениях, если приложение было свернуто.
Тестовый сценарий.
Отправить сообщение, свернуть приложение, подождать входящее сообщение и проверить, есть ли уведомление.
Баг.
Иногда неверно отображается статус «онлайн» у контактов.
Тестовый сценарий.
Отследить различные случаи, когда статус «онлайн» должен измениться (появление, исчезновение активности) и проверить, корректно ли отображается.