Комбинаторные техники и опыт
Посчитал на четырёх конфигурациях. Пять параметров по четыре значения: полный перебор 1024 сочетания, попарное покрытие - 16 тестов, в 64 раза меньше. Десять параметров типа «да-нет»: полный перебор те же 1024, попарно - 9 тестов, в 113 раз меньше. А вот на трёх параметрах по три значения: полный перебор 27, попарно 10 - выигрыш всего вдвое.
Стержень: попарное покрытие тем выгоднее, чем больше параметров, и почти бесполезно на маленьких наборах, где проще перебрать всё.
// Формулировки: «что такое pairwise?», «когда его недостаточно?», «что такое error guessing?», «чем исследовательское тестирование отличается от бессистемного?».
Попарное покрытие и его допущение
Метод строится на наблюдении: большинство дефектов вызывается одним параметром или сочетанием ДВУХ, а не пятью сразу. Значит, можно составить небольшой набор тестов так, чтобы каждая пара значений разных параметров встретилась хотя бы в одном тесте.
Мои числа показывают и выгоду, и её границы. При пяти параметрах по четыре значения нужно покрыть 160 пар, и хватает 16 тестов вместо 1024. При десяти двоичных параметрах - 180 пар и 9 тестов вместо 1024. А на трёх параметрах по три значения пар всего 27, и попарный набор из 10 тестов почти не отличается от полного перебора в 27: проще прогнать всё.
// Отсюда допущение, которое нужно проговаривать вслух: метод НЕ ловит дефекты, требующие совпадения трёх и более условий. Если из опыта известно, что такая тройка существует - скажем, «мобильный клиент плюс старая версия плюс иностранная валюта», - её добавляют в набор отдельным тестом руками.
3 параметра по 3 значения: перебор 27 -> попарно 10 (в 2 раза меньше)
4 параметра по 3 значения: перебор 81 -> попарно 9 (в 9 раз)
5 параметров по 4 значения: перебор 1024 -> попарно 16 (в 64 раза)
10 параметров по 2 значения:перебор 1024 -> попарно 9 (в 113 раз)- попарное покрытие
- каждая пара значений разных параметров встречается хотя бы раз
Предугадывание ошибок и исследование
Предугадывание ошибок - техника, основанная на опыте: ты знаешь типовые слабые места и бьёшь по ним сразу. Пустое значение, ноль, отрицательное число, очень длинная строка, кавычки и угловые скобки, двойное нажатие кнопки, обрыв сети посередине операции, кнопка «назад» в браузере после оплаты.
Исследовательское тестирование - это не «потыкать наугад». Это одновременное изучение продукта, придумывание тестов и их выполнение, ограниченное по времени и с записанной целью: «полчаса на сценарий возврата денег, ищу расхождения с требованиями». Есть цель, есть срок, есть заметки о найденном - и по ним потом пишут постоянные тесты.
// Разница с бессистемным тыканьем именно в этом: у исследования есть цель, ограничение по времени и след в виде записей. Без этих трёх вещей результат нельзя ни повторить, ни оценить.
- предугадывание ошибок
- проверка типовых слабых мест по опыту
- исследовательское тестирование
- изучение, придумывание и выполнение сразу, с целью и сроком
Как комбинировать техники
Техники не конкурируют, у каждой своя работа. Классы эквивалентности говорят, сколько групп проверять. Границы - какие значения из групп брать. Таблица решений - что делать с сочетаниями условий. Переходы состояний - как проверять сущность с жизненным циклом. Попарное покрытие - как сократить перебор конфигураций. Опытные техники - чем добить то, что формальные методы не описывают.
Обычный порядок такой: сначала формальные техники дают костяк набора, потом опытные добавляют проверки на слабые места, потом исследовательская сессия ищет то, о чём никто не подумал.
// Отдельный навык, который проверяют на собесе, - умение объяснить свой выбор. Не «я взял pairwise», а «параметров пять по четыре значения, полный перебор это 1024 конфигурации, попарное покрытие даёт 16 при допущении, что дефекты от троек нам не встречались; две известные проблемные тройки я добавил отдельно». Такая формулировка показывает, что ты понимаешь и метод, и его цену.
- комбинация техник
- формальные дают костяк, опытные добивают, исследование ищет неизвестное
Как отвечать: «Что такое попарное покрытие и когда его недостаточно?»
Это способ сократить перебор конфигураций: набор тестов строится так, чтобы каждая пара значений разных параметров встретилась хотя бы в одном тесте. Опирается он на наблюдение, что большинство дефектов вызывается одним параметром или сочетанием двух. Выгода зависит от размера: я считал, при пяти параметрах по четыре значения полный перебор это 1024 конфигурации, а попарное покрытие - 16 тестов; при десяти двоичных параметрах - 9 тестов вместо 1024. Но на трёх параметрах по три значения попарно выходит 10 тестов против 27 полного перебора, и тут проще прогнать всё. Недостаточно его там, где дефект требует совпадения трёх и более условий: такие случаи метод по построению не ловит, и известные проблемные тройки я добавляю в набор отдельно. И ещё он ничего не говорит о значениях внутри параметров - их я всё равно выбираю классами эквивалентности и границами.
Почему это сильный ответ: метод объяснён через своё допущение, выгода и её отсутствие показаны числами на разных размерах, и названы два разных ограничения.
На чём валят
- −Применять попарное покрытие к трём небольшим параметрам. У меня вышло 10 тестов против 27 полного перебора - проще перебрать всё.
- −Молчать про допущение метода. Дефекты, требующие совпадения трёх условий, он не ловит по построению.
- −Считать, что попарное покрытие заменяет выбор значений. Какие значения брать, решают классы и границы.
- −Называть бессистемное тыканье исследовательским тестированием. У исследования есть цель, срок и записи.
- −Предугадывать ошибки вместо формальных техник, а не после них. Опытные приёмы добивают набор, а не заменяют его.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.
- Что такое попарное тестирование (pairwise)?A)Проверить все пары значений параметров, а не все их комбинацииB)Проверка каждого параметра по отдельности, по одному тесту на значение каждогоC)Полный перебор всех возможных комбинаций значений всех параметров сразуD)Запуск каждого теста дважды, парами, для проверки воспроизводимости результата
показать ответ и разбор
+A)Проверить все пары значений параметров, а не все их комбинации// разбор: Pairwise (попарное) — комбинаторная техника: вместо перебора всех сочетаний значений нескольких параметров она подбирает набор тестов, в котором каждая пара значений любых двух параметров встречается хотя бы раз. Это опирается на наблюдение, что большинство дефектов взаимодействия вызывается сочетанием всего двух факторов, а не трёх и более. При 4 параметрах по 3 значения полный перебор — 81 тест, pairwise покрывает все пары примерно за 9. Инструменты (генераторы pairwise) строят такой набор автоматически. Экономия огромна при небольшом росте риска пропустить редкий многофакторный баг.
- Зачем нужен pairwise, если можно перебрать все комбинации параметров?A)Полный перебор запрещён стандартами тестирования, поэтому на практике применяют pairwiseB)Полный перебор растёт мультипликативно и быстро становится нереальнымC)Pairwise точнее полного перебора и находит больше дефектов на тех же данныхD)Полный перебор нужен лишь для числовых параметров, а pairwise — для строковых
показать ответ и разбор
+B)Полный перебор растёт мультипликативно и быстро становится нереальным// разбор: Число полных комбинаций — произведение числа значений всех параметров, оно растёт лавинообразно: 6 параметров по 5 значений — 15625 тестов, что невыполнимо. Прогнать все нельзя, а тестировать надо. Pairwise даёт компромисс: он гарантирует, что каждая пара значений встретится, покрывая тот класс дефектов, который вызывается взаимодействием двух факторов — а это, по эмпирике, большинство комбинаторных багов. Набор при этом сокращается на порядки (те же 15625 → десятки тестов). Осознанная плата — риск пропустить дефект, требующий совпадения трёх и более конкретных значений сразу.
- Что такое угадывание ошибок (error guessing) как техника?A)Случайная генерация входных данных без опоры на опыт или знание системыB)Формальный вывод тест-кейсов строго из требований без участия интуиции тестировщикаC)Догадки о типовых ошибках по опыту: пустой ввод, ноль, отрицательное, спецсимволыD)Предсказание, в какой строке кода находится дефект, по тексту сообщения об ошибке
показать ответ и разбор
+C)Догадки о типовых ошибках по опыту: пустой ввод, ноль, отрицательное, спецсимволы// разбор: Error guessing опирается на опыт и интуицию тестировщика: зная, где программы обычно ломаются, он целенаправленно подсовывает такие входы — пустое поле, ноль, отрицательное число, очень длинную строку, спецсимволы, дату 29 февраля, деление на ноль, двойной клик. Это не заменяет формальные техники (классы, границы, таблицы), а дополняет их, покрывая случаи, которые систематический анализ по спецификации может не выделить. Сила техники прямо зависит от опыта тестировщика; её слабость — неполнота и невоспроизводимость без фиксации. Часто оформляют как чек-лист типовых «ломающих» входов.
- В чём суть исследовательского тестирования (exploratory testing)?A)Прогон заранее написанного полного набора детальных тест-кейсов строго по шагамB)Автоматический перебор входных данных фаззером без участия человекаC)Тестирование, заменяющее собой необходимость в тест-документации и предварительном планированииD)Одновременно проектируешь и выполняешь тесты, учась у системы по ходу
показать ответ и разбор
+D)Одновременно проектируешь и выполняешь тесты, учась у системы по ходу// разбор: Exploratory testing — подход, где проектирование, выполнение и анализ тестов идут одновременно: тестировщик исследует продукт, и результат каждого действия подсказывает следующее. Это не «тыкать наугад»: работу структурируют хартиями (что исследуем и зачем), тайм-боксами и заметками. Сила — в способности быстро находить неожиданные дефекты и области, не покрытые заранее написанными кейсами, особенно когда спецификация неполна или продукт новый. Подход хорошо дополняет сценарное тестирование: скрипты дают воспроизводимое покрытие, exploratory — глубину и находки за их пределами.
- Чем исследовательское тестирование отличается от ad-hoc?A)Exploratory управляем (хартии, тайм-боксы, заметки), ad-hoc — бессистемный потыкB)Exploratory выполняется автоматизированными средствами, а ad-hoc — вручную тестировщикомC)Это два названия одного и того же бессистемного подхода без документированияD)Ad-hoc проверяет требования, а exploratory — производительность под нагрузкой
показать ответ и разбор
+A)Exploratory управляем (хартии, тайм-боксы, заметки), ad-hoc — бессистемный потык// разбор: Оба выполняются без заранее написанных детальных кейсов, но различаются дисциплиной. Exploratory — управляемый процесс: есть хартия (цель и область сессии), тайм-бокс, ведутся заметки о том, что проверено и найдено, ход осмыслен и воспроизводим по записям. Ad-hoc — импровизированный разовый «потык» без цели, структуры и фиксации: что-то проверили, но что именно и с каким результатом — не задокументировано. Ad-hoc быстр и иногда полезен для беглой проверки, но его находки трудно воспроизвести и оценить покрытие. Exploratory сохраняет гибкость, добавляя управляемость и отслеживаемость.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.