1. Что такое Pairwise тестирование?
Pairwise testing (попарное тестирование) – это техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить количество тест-кейсов.
Сформулировать суть попарного тестирования можно следующим образом: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров.
Главные цели Pairwise Testing:
- убрать избыточные проверки;
- обеспечить хорошее тестовое покрытие;
- выявить наибольшее количество багов на минимальном наборе тестов.
Рассмотрим более детально суть попарного тестирования на примерах.
Пример 1
Представим, что у нас есть параметры A, B и C принимающие значения Yes или No. Максимальное количество комбинаций значений этих параметров – 8. Но при использовании попарного тестирования достаточно четырех комбинаций, так как учитываются все возможные пары параметров (пара A и B, пара B и C, пара A и C):
Пример 2
Допустим, какое-то значение (например, налог) для человека рассчитывается на основании его пола, возраста и наличия детей – получаем три входных параметра, для каждого из которых для тестов выбираем любое из возможных значений. Например: пол – мужской или женский; возраст – до 25, от 25 до 60, более 60; наличие детей – да или нет. Для проверки правильности расчетов можно, конечно, перебрать все комбинации значений всех параметров:
№ | Пол | Возраст | Дети |
1 | мужчина | до 25 | детей нет |
2 | женщина | до 25 | детей нет |
3 | мужчина | 25-60 | детей нет |
4 | женщина | 25-60 | детей нет |
5 | мужчина | старше 60 | детей нет |
6 | женщина | старше 60 | детей нет |
7 | мужчина | до 25 | дети есть |
8 | женщина | до 25 | дети есть |
9 | мужчина | 25-60 | дети есть |
10 | женщина | 25-60 | дети есть |
11 | мужчина | старше 60 | дети есть |
12 | женщина | старше 60 | дети есть |
А можно решить, что не нужно проверять сочетания значений всех параметров со всеми, а только убедиться, что проверятся все уникальные пары значений параметров. Например, с точки зрения параметров пола и возраста нужно убедиться, что точно проверим мужчину до 25, мужчину между 25 и 60, мужчину после 60, а также женщину до 25, женщину между 25 и 60, также женщину после 60. И точно так же для всех остальных пар параметров. И таким образом, можем получить гораздо меньше наборов значений (в них есть все пары значений, правда некоторые дважды):
№ | Пол | Возраст | Дети |
1 | мужчина | до 25 | детей нет |
2 | женщина | до 25 | дети есть |
3 | мужчина | 25-60 | дети есть |
4 | женщина | 25-60 | детей нет |
5 | мужчина | старше 60 | детей нет |
6 | женщина | старше 60 | дети есть |
Пример 3
Есть два браузера Opera и Firefox. Есть две операционные системы Windows и Linux. Тут ничего не уменьшить, так как из них можно сложить 4 конфигурации:
№ | Browser | OS |
1 | Opera | Windows |
2 | Firefox | Linux |
3 | Opera | Linux |
4 | Firefox | Windows |
Допустим, сайт на двух языках: русский (RU) и английский (EN). Для полного эксперимента, умножим те 4 конфигурации на 2, т.е. каждую из предыдущих конфигураций проверить с обоими языками. Но зачем? Вместо этого воспользуемся попарным подходом и вместо 8 конфигураций получим опять 4:
№ | Browser | OS | Language |
1 | Opera | Windows | RU |
2 | Firefox | Linux | RU |
3 | Opera | Linux | EN |
4 | Firefox | Windows | EN |
Далее, сайт может использовать MySQL, Oracle и MSSQL как базу данных. Просто используя попарное тестирование получаем 7 конфигураций (а не 12 – предыдущие 4х3, и тем более не 24=2х2х2х3). Но тут опять стоит задуматься, а важно ли проверять каждую базу в сочетании с другими параметрами. Очевидно – нет. Важно посмотреть, например, как каждая база работает с каждым языком. Таким образом, введя ограничения, вместо 7 получим 6 конфигураций (3 базы х 2 языка):
№ | Browser | OS | Language | Database |
1 | Opera | Windows | RU | MySQL |
2 | Firefox | Linux | EN | MySQL |
3 | Opera | Linux | EN | MSSQL |
4 | Firefox | Windows | RU | MSSQL |
5 | Opera | Linux | RU | Oracle |
6 | Firefox | Windows | EN | Oracle |
Пример 4
Главный принцип попарного тестирования в том, что в подавляющем большинстве случаев не надо проводить полнофакторный эксперимент (т.е. перебирать все конфигурации, где все значения всех параметров встречаются друг с другом). Да и невозможно это зачастую из-за нехватки ресурсов. Поэтому декларируется, что достаточно проверить как работает ПО, когда каждое значение каждого параметра встретилось с другим значением каждого другого параметра хотя бы раз.
Допустим, необходимо протестировать комбинации настроек параметров окна «Font» в текстовом процессоре:
Предположим, что возможны баги из-за комбинаций параметров. Как много тестов необходимо провести, чтобы покрыть все значения?
Возьмем для тестирования следующие параметры и их значения:
Parameter | Value 1 | Value 2 | Value 3 | Value 4 |
Font | TT | Arial | ||
Style | Regular | Italic | Bold | Bold Italic |
Size | min | normal | max | |
Color | black | white | red | |
Underline style | none | words only | other | |
Strikethrough | on | off | ||
Double Strikethrough | on | off | ||
Superscript | on | off | ||
Subscript | on | off | ||
Shadow | on | off | ||
Outline | on | off | ||
Emboss | on | off | ||
Engrave | on | off | ||
Small caps | on | off | ||
All caps | on | off | ||
Hidden | on | off |
Если посчитать все доступные комбинации, перемножив количество значений каждого параметра, то получим следующее количество вариантов проверок:
2 * 4 * 3 * 3 * 3 * 2^11 = 442 368.
Итоговая таблица проверок:
Таким образом, метод «Всех пар» позволяет существенно сократить количество проверок.
2. Инструменты
Составление нужных комбинаций данных – задача часто не самая простая, но, к счастью, для ее решения существует множество инструментов, разного уровня качества.
В данном материале будет рассмотрен инструмент PICT (Pairwise Independent Combinatorial Testing – инструмент для попарного тестирования от Microsoft).
PICT позволяет генерировать компактный набор значений тестовых параметров, который представляет собой все тестовые сценарии для всестороннего комбинаторного покрытия параметров.
Рассмотрим работу с программой. Запускается PICT из командной строки.
На вход программа принимает простой текстовый файл с параметрами и их значениями, называемый моделью, а на выход выдает сгенерированные тестовые сценарии.
Рассмотрим работу программы на примере 2, который был приведен выше. Имеем следующие параметры и их значения: пол – мужской или женский; возраст – до 25, от 25 до 60, более 60; наличие детей – да или нет. Если перебирать все возможные значения, то количество сценариев будет 12. Составим модель и посмотрим какой результат выдаст программа.
Модель:
Используем модель в PICT и получим 6 тестовых сценариев (вместо 12):
Разница не такая ощутимая, но она будет становиться все более и более заметной при увеличении количества параметров или их значений.
Представим, что у нас есть следующие параметры для тестирования, которые относятся к тестированию создания разделов на жестком диске (пример взят из мануала к PICT):
Несложно посчитать количество допустимых проверок, умножив количество значений каждого параметра:
7 * 7 * 2 * 3 * 8 * 2 = 4704
Будет очень сложно протестировать их за разумное время. Исследования показывают, что тестирование всех пар возможных значений обеспечивает очень хорошее покрытие и количество тест-кейсов остается в пределах разумного. К примеру, {Primary, FAT} это одна пара и {10, slow} другая; один тест-кейс может покрывать много пар. Для набора приведенных выше параметров PICT создаст всего 60 тест-кейсов:
Также, вместо обычного вывода в консоль, можно использовать прямой вывод и сохранение тест-кейсов в MS Excel:
В результате будет создан Excel файл со следующим содержанием:
Но самыми интересными являются возможности, которые предоставляет PICT для подобной генерации сценариев. Все они тщательно рассмотрены в руководстве пользователя. Вот некоторые из них:
- Можно указывать порядок группировки значений. По умолчанию используется порядок 2 и создаются комбинации пар значений (что и составляет попарное тестирование). Но можно указать к примеру 3 и тогда будут использоваться триплеты, а не пары. Максимальный порядок для простой модели равен количеству параметров, что создает набор всевозможных вариантов.
- Можно группировать параметры в подмодели и указывать им отдельный порядок для комбинаций. Это необходимо, если комбинации определенных параметров должны быть протестированы более тщательно или должны быть объединены по отдельности от других параметров.
- Можно создавать условия и ограничения. К примеру, можно указать, что один из параметров будет принимать определенное значение только тогда, когда несколько других параметров примут нужные значения. Это позволяет отсечь создание ненужных проверок.
- Можно обозначать невалидные значения параметров при создании комбинаций для негативных тест-кейсов.
- Используя весовые коэффициенты можно указать программе отдавать предпочтения определенным значениям при генерации комбинаций.
- Можно использовать опцию минимизации (запускать программу несколько раз используя каждый раз уже сокращенное число тест-кейсов), чтобы получить минимальное количество тест-кейсов.
В заключение хочется сказать, что PICT достаточно удобный инструмент для быстрого создания набора комбинаций тестовых данных, особенно при наличии большого количества не сильно связанных между собой параметров (что позволяет не проводить тестирование всех возможных вариантов). Однако нужно тщательно создать необходимую модель, чтобы тестовое покрытие было удовлетворительным.
3. Где и когда применяется Pairwise тестирование?
Метод эффективен лишь на поздних этапах разработки, либо дополненный основными функциональными тестами. Например, если проводить конфигурационное тестирование, то прежде чем использовать попарное тестирование следует убедиться, что основной сценарий функционирует на всех операционных системах с параметрами по умолчанию (провести Smoke testing (Дымовое тестирование) или Build Verification Test (Тестирование сборки)). Это значительно облегчит локализацию будущих багов, ведь при попарном тестировании в одном тесте фигурирует множество параметров со значениями не по умолчанию, каждый из которых может стать причиной сбоя и его локализация в этом случае весьма затруднительна. А в случае провала тестирования сборки следует отказаться от использования метода попарного тестирования, так как многие тесты будут провальными, а исключение даже одного теста влечет за собой потерю, как правило, нескольких пар, и смысл использования метода теряется.
Поэтому метод следует использовать лишь на стабильном функционале, когда текущие тесты уже теряют свою эффективность.
Таким образом, Pairwise Testing – специальный метод оптимизации составления тест-кейсов.
Основная суть техники Pairwise Testing – не проверить все сочетания всех значений, но проверить все пары значений.