Создание тест-кейсов — неотъемлемая часть процесса тестирования. От того, насколько качественно они будут составлены, зависит эффективность всего тестирования. Разработать действенные тест-кейсы помогают техники тест-дизайна.
Прежде чем перейти к техникам тест-дизайна, рассмотрим жизненный цикл тестирования и определим в нём место этапа создания тест-кейсов.
Жизненный цикл тестирования начинается с общего планирования и анализа требований. При необходимости определяются критерии завершения тестирования и приёмки продукта, а также стратегия тестирования. После проверки, анализа и приоритизации требований наступает этап создания тест-кейсов — это и есть тест-дизайн.
Тест-дизайн — это важный этап в процессе тестирования программного обеспечения, на котором разрабатываются и создаются тестовые сценарии (тест-кейсы). Эти сценарии должны соответствовать заранее определённым критериям качества и целям тестирования.
Цели тест-дизайна:
- Максимально покрыть функциональность тестами.
- Обнаружить самые серьёзные ошибки.
- Сократить количество тестов за счёт исключения непродуктивных тест-кейсов.
- Не пропустить важные тесты.
Необходимо охватить тестами как можно больше функционала, при этом не сосредотачиваясь только на отдельных модулях или функциях. Тесты должны быть распределены по всему приложению, чтобы исключить попадание к пользователю неоттестированных функций.
Также важно составлять тесты таким образом, чтобы они помогали выявлять критические дефекты. Полностью избавиться от ошибок невозможно, но тестировщики должны сосредоточиться на поиске наиболее серьёзных проблем.
Техники тест-дизайна:
- Классы эквивалентности (эквивалентное разделение).
- Граничные значения (анализ граничных значений, метод граничных значений).
- Попарное тестирование (тестовая комбинаторика, Pairwise).
- Тестирование состояний и переходов.
- Таблицы принятия решений.
- Исследовательское тестирование.
Эти техники позволяют тестировать приложение наиболее полно и эффективно, минимизируя при этом количество необходимых тестов.
✅Классы эквивалентности
🟢Классы эквивалентности — это метод тестирования, который позволяет сократить количество тестовых случаев без потери качества тестирования. Он основан на предположении, что некоторые входные данные или условия могут быть эквивалентны друг другу с точки зрения влияния на поведение системы.
Например, если вы тестируете форму регистрации на сайте, то можно выделить следующие классы эквивалентности:
- корректные данные (имя, фамилия, адрес электронной почты, пароль);
- некорректные данные (пустые поля, несоответствие паролей);
- недопустимые символы (специальные символы, пробелы в начале пароля).
Каждый из этих классов представляет собой группу входных данных, которые обрабатываются системой одинаковым образом. Тестирование одного представителя из каждого класса позволяет сделать вывод о работе системы для всех данных этого класса.
🟢 Существует два основных признака того, что данные в тесте принадлежат одному классу эквивалентности:
- Если один тест обнаруживает ошибку, то, скорее всего, и другие тесты из этого класса её обнаружат. Например, если пользователь в возрасте 10 лет может зарегистрироваться на сайте онлайн-кинотеатра, то, вероятно, и пользователи в возрасте 5, 1 и 8 лет смогут зарегистрироваться. А это противоречит требованиям.
- Если один из тестов не выявляет ошибку, то, скорее всего, и остальные тесты из этого класса ошибки не найдут. Если пользователю в возрасте 15 лет отказали в регистрации, то, скорее всего, и пользователям младше 15 лет откажут.
Важно помнить, что в тестировании нельзя быть абсолютно уверенным в отсутствии или наличии ошибок. Поэтому в описаниях часто встречаются такие формулировки, как «скорее всего» и «с большой долей вероятности».
🟢 Как использовать классы эквивалентности?
Чтобы использовать классы эквивалентности, необходимо выполнить следующие шаги:
- Определить классы эквивалентности. Это можно сделать на основе требований к системе или анализа её поведения.
- Выбрать представителя из каждого класса. Это должен быть типичный представитель, который отражает особенности класса.
- Протестировать выбранных представителей. Если система работает правильно для выбранного представителя, то она будет работать правильно и для всех данных этого класса.
🟢 Преимущества использования классов эквивалентности
Использование классов эквивалентности имеет ряд преимуществ:
- Сокращение количества тестовых случаев. Вместо того чтобы тестировать каждый возможный вариант входных данных, можно ограничиться тестированием представителей из каждого класса.
- Повышение эффективности тестирования. Тестирование представителей позволяет быстро выявить ошибки, связанные с обработкой данных определённых классов.
- Снижение вероятности пропуска ошибок. Тестирование представителей обеспечивает покрытие основных сценариев использования системы.
Однако следует помнить, что использование классов эквивалентности не всегда возможно. В некоторых случаях необходимо тестировать каждый возможный вариант входных данных, чтобы обеспечить полное покрытие кода.
🟢 Пример
Допустим, у нас есть сайт онлайн-кинотеатра, и одно из требований к его посещению — возраст пользователя должен быть 12 лет и старше. В таком случае, если пользователь укажет возраст меньше 12 лет, неважно, 5 ему лет или 10, результат будет один — появится сообщение: «Извините, но ваш возраст не соответствует требованиям».
И обратная ситуация: если пользователь укажет возраст от 12 лет и выше, не имеет значения, сколько ему лет — 16, 23, 75 или 99, результат будет одинаковым - вы сможете смотреть фильмы!
Если тестировать абсолютно всё, потребуется провести минимум 100 тестов. А если учесть ещё отрицательные значения, значения больше 99, символы, пустой ввод и прочее, то задача становится невыполнимой. Поэтому нужно:
Из этих данных можем легко разбить на тесты:
- Указать возраст 10 - 1 класс эквивалентности
- Указать возраст 12 - 2 класс эквивалентности
- Указать возраст 15 - 3 класс эквивалентности
- Также хорошо бы знать максимальный возраст и обрабатывать случаи, когда пользователь укажет возраст 150 (да, да такие случаи также нужно обрабатывать, ведь разработчик мог указать всё по тз и не рассмотреть вариант, того, что пользователь решит сломать систему)- 4 класс эквивалентности
- Добавим проверку на отрицательные значения -5 - 5 класс эквивалентности
- Указать возраст 0 - 6 класс эквивалентности
- Также нужно указывать граничные значения, но об этом в другой статье! - 7 класс эквивалентности
Мы отобрали значения из каждого класса эквивалентности, чтобы уменьшить количество тестов (теперь их четыре вместо 100). Предполагается, что все остальные значения из класса эквивалентности дадут такие же результаты, как и отобранные.
Как такая обработка может выглядеть в коде разработчика:
Как видите, разработчик вроде всё сделал по ТЗ, но он не учёл
- Максимально возможный возраст
- Отрицательный возраст
- Возраст 0
Как поведёт себя код - неизвестно, но лучше это узнать на стадии тестирования, а не когда, данный баг будет уже у пользователя!
Сейчас рассматривались данные, которые можно представить в виде числовой прямой — такие классы эквивалентности называются линейными. Их можно разделить на диапазоны с чёткими границами начала и конца (например, от 0 до 15, от 16 до 18 и так далее).
Также существуют нелинейные классы эквивалентности — это неупорядоченные данные, которые не имеют границ и являются частью множества данных. Примерами могут служить расширения файлов, операционные системы, группы пользователей с разными правами (пользователь, модератор, администратор) и т. д.
В таком случае можно выделить только два класса эквивалентности:
- валидный — соответствует требованиям;
- невалидный — не соответствует требованиям или обрабатывается системой иначе, чем валидный класс.
Допустим, приложение работает только с файлами в форматах MP3, APE и WAV. Файлы других форматов система не поддерживает. В такой ситуации нельзя выделить диапазоны и определить их границы, можно обозначить только валидный класс эквивалентности — допустимые форматы файлов, и невалидный — все остальные форматы файлов, которые система не воспринимает.
Поскольку в валидном классе всего три значения, можно протестировать их все. А из невалидного класса достаточно выбрать несколько примеров.
🟢 Кроме чисел, на классы эквивалентности можно разделить:
- символы — они могут быть валидными, например, использование @ в адресе электронной почты, и невалидными — ?, %, *;
- длину строки — например, валидный класс от 1 до 50 знаков, невалидный — всё остальное, то есть меньше 1 и больше 50;
- объём памяти, необходимый приложению для стабильной работы;
- разрешение экрана — всё, что меньше или больше заявленных требований к разрешению экрана, будет относиться к невалидным классам;
- версии операционных систем и библиотек — также определяются согласно требованиям. Например, приложение должно работать на ОС Windows 7, но поддержка Windows NT уже не требуется;
- объём передаваемых данных — по требованиям. Например, если мощности сервера не позволяют обработать объём данных больше определённого значения.
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!