Ответ
В своей работе я активно применяю классические техники тест-дизайна для создания эффективных и полных тестовых наборов. Вот основные из них с примерами из моего опыта:
-
Эквивалентное разделение (Equivalence Partitioning): Разделение входных данных на группы (классы), где поведение системы ожидается одинаковым. Тестируем по одному значению из каждого класса.
- Пример (поле "Возраст участника"):
- Валидный класс:
[18, 99](например, значение25). - Невалидные классы:
<18(например,17),>99(например,100),не число(например,"abc").
- Валидный класс:
- Пример (поле "Возраст участника"):
-
Анализ граничных значений (Boundary Value Analysis): Тестирование на границах классов эквивалентности и за их пределами. Большинство ошибок возникает именно на границах.
- Пример для того же поля
[18, 99]:- Граничные и вне границ:
17,18,19,98,99,100.
- Граничные и вне границ:
- Пример для того же поля
-
Таблица принятия решений (Decision Table): Отличный инструмент для тестирования бизнес-логики, зависящей от комбинации условий.
-
Пример: Правило предоставления скидки. VIP-клиент? Сумма заказа > 5000? Ожидаемая скидка Да Да 20% Да Нет 10% Нет Да 10% Нет Нет 0% На основе этой таблицы пишутся 4 тестовых случая.
-
-
Попарное тестирование (Pairwise Testing): Метод для сокращения количества тестовых комбинаций. Гарантирует, что каждая пара значений всех параметров будет покрыта хотя бы одним тестом.
- Пример: Тестирование формы с параметрами: Браузер (Chrome, Firefox, Safari), ОС (Windows, macOS), Язык (EN, RU). Полный перебор даст 322=12 комбинаций. Алгоритм попарного тестирования (например, с помощью инструмента
pict) может сократить это до 6-8 тестов, покрывающих все пары.
- Пример: Тестирование формы с параметрами: Браузер (Chrome, Firefox, Safari), ОС (Windows, macOS), Язык (EN, RU). Полный перебор даст 322=12 комбинаций. Алгоритм попарного тестирования (например, с помощью инструмента
-
Предугадывание ошибок (Error Guessing): Основано на опыте тестировщика и знании типичных "узких мест" в приложениях.
- Примеры сценариев:
- Отправка формы без обязательных полей.
- Ввод SQL-инъекции (
' OR '1'='1) в текстовые поля. - Передача
nullили пустой строки в обязательные параметры API. - Одновременная отправка двух одинаковых запросов (проверка на идемпотентность).
- Примеры сценариев:
-
Диаграмма состояний и переходов (State Transition Testing): Используется для систем, поведение которых зависит от состояния.
- Пример: Жизненный цикл заказа в интернет-магазине. Тестируются валидные переходы ("Создан" → "Оплачен" → "Отправлен") и невалидные (попытка перевести заказ из "Отменен" обратно в "Оплачен").
Я комбинирую эти техники в зависимости от тестируемого объекта, чтобы достичь оптимального баланса между покрытием и усилиями на тестирование.
Ответ 18+ 🔞
Да ты послушай, как я эти техники тест-дизайна на практике применяю! Это ж не просто теория какая-то, а реально рабочие инструменты, чтобы не тратить время впустую. Сидишь, бывало, и думаешь: «Э, сабака сука, а как бы так проверить, чтобы и быстро, и всё ломанулось, если что». Вот тут они и выручают.
-
Эквивалентное разделение (Equivalence Partitioning) Ну, тут всё просто, как три копейки. Не будешь же ты вводить все числа от минус бесконечности до плюс бесконечности, чтобы проверить поле «Возраст». Берёшь и делишь всё на логичные куски. Смотри: есть поле, допустим, «Возраст участника от 18 до 99».
- Нормальный, валидный класс:
[18, 99]. Берёшь одно значение оттуда, хоть25, и проверяешь — должно работать. - Невалидные классы: Всё, что за бортом. Меньше 18 (например,
17), больше 99 (например,100), и совсем уж ёбта — не число какое-нибудь,"abc". На каждый такой класс — один тест. И доверия ебать ноль системе, если она пропустит семнадцатилетнего.
- Нормальный, валидный класс:
-
Анализ граничных значений (Boundary Value Analysis) А вот это уже хитрая жопа! Потому что все баги обычно сидят как раз на этих самых границах. Система вроде как работает, а на стыке — пиздец. Тот же пример с возрастом
[18, 99].- Что проверяем? Границы и прямо за ними:
17(прямо перед),18(сама нижняя граница),19(сразу после). Потом98,99,100. Вот эти шесть значений дадут овердохуища информации. Если на99всё ок, а на100— нет, значит, логика на границе работает. А если и на100ок — ну, пидарас шерстяной, пошёл багрепорт писать.
- Что проверяем? Границы и прямо за ними:
-
Таблица принятия решений (Decision Table) Это вообще песня, когда логика запутанная, из нескольких условий. Чтоб не запутаться самому, рисуешь табличку. Допустим, правило скидки: зависит от статуса VIP и суммы заказа.
- Рисуешь все возможные комбинации: VIP да/нет, сумма больше 5000 да/нет. Получается четыре строчки. И для каждой пишешь, какая скидка должна быть. Потом просто идёшь по строчкам и проверяешь. Красота, а не метод! Ничего не упустишь, и в случае бага сразу видно, на какой именно комбинации система ебнулась.
-
Попарное тестирование (Pairwise Testing) А это для ленивых гениев, в хорошем смысле. Представь, тебе надо проверить кроссплатформенность: Браузер (Chrome, Firefox, Safari), ОС (Windows, macOS), Язык (EN, RU). Полный перебор — это 12 комбинаций, ебать колотить! А времени — в обрез.
- Фишка в чём? Самые частые косяки возникают из-за взаимодействия двух параметров. Не трёх сразу, а именно пар. Алгоритм попарного тестирования (есть куча тулзов, тот же
pict) находит такой минимальный набор комбинаций (часто 6-8 штук), где каждая возможная пара значений встретится хотя бы раз. И вуаля — покрытие отличное, а тестов в полтора-два раза меньше. Экономия времени — просто пиздец!
- Фишка в чём? Самые частые косяки возникают из-за взаимодействия двух параметров. Не трёх сразу, а именно пар. Алгоритм попарного тестирования (есть куча тулзов, тот же
-
Предугадывание ошибок (Error Guessing) А вот это уже чистое шаманство, которое приходит с опытом. Ты уже настолько пропитался багами, что начинаешь чувствовать их, как собака — дичь. Подозрение ебать чувствую к некоторым местам.
- Какие типичные сценарии? Отправить форму, не заполнив обязательные поля. Впихнуть в поле ввода какую-нибудь гадость вроде
' OR '1'='1(мало ли, SQL-инъекция сработает). В API-запрос передатьnullвместо строки. Или нажать кнопку «Отправить» десять раз подряд — выдержит ли система, не создаст ли десять одинаковых заказов? Это когда уже не по методичкам, а по наитию работаешь, и часто находишь самые сочные баги.
- Какие типичные сценарии? Отправить форму, не заполнив обязательные поля. Впихнуть в поле ввода какую-нибудь гадость вроде
-
Диаграмма состояний и переходов (State Transition Testing) Идеально для всего, что имеет «жизненный цикл». Ну, типа заказ в магазине: создан, оплачен, отправлен, получен, отменён.
- Суть: Рисуешь эти состояния кружочками и стрелочки — возможные переходы между ними. Потом проверяешь, что по валидным стрелочкам всё работает («Создан» → «Оплачен»). А главное — пытаешься пройти по невалидным, которых на диаграмме нет. Ну, например, попробовать отменить уже отправленный заказ или оплатить уже отменённый. Вот тут-то и вылазят самые интересные косяки, когда система позволяет делать то, чего не должна.
Короче, я не использую что-то одно. Всё зависит от задачи. Где-то хватит граничных значений, а где-то без таблицы решений — просто хуй с горы. Комбинируешь это всё, как шеф-повар специи, чтобы и покрыть всё важное, и не провести на работе всю оставшуюся жизнь.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶