Главная » 2012 » Сентябрь » 20 » Что такое Pairwise Testing?
14:25
Что такое Pairwise Testing?

Что такое Pairwise Testing, и с чем его едят

Не так давно (век живи - век учись) я наткнулась на понятие "pairwise testing" (переведу в лоб как "попарное тестирование", но лучше буду использовать английский термин), заинтересовалась и решила разобраться, что это такое. Достаточно быстро поняв, как работает данная э… техника, у меня сразу возникли вопросы по поводу причин и смысла её использования, найти ответы на которые на днях у меня наконец дошли руки. Обо всём этом я и решила написать (длинно, но короче не вышло :( ).


Сразу скажу, что к своей радости, большую часть информации по данной теме я почерпнула из статей Майкла Болтона  и Джеймса Баха в соавторстве с Патриком Шрёдером  К радости - потому что с одной стороны, это небезызвестные и значительные для меня люди по теме исследовательского тестирования. С другой же стороны - в свойственной (как мне кажется) для этих авторов манере, статьи не безусловно восхваляют, но пытаются трезво оценить данную технику, что для скептичной меня и моих вопросов было именно тем, что нужно.

1. Что же это такое

Раз уж я взялась писать о pairwise testing, то, видимо, надо попытаться объяснять, в чём состоит суть данной техники. Не уверена, что у меня получится объяснить понятно и корректно, но я всё-таки попробую  :)

Итак, pairwise testing - это техника формирования наборов тестовых данных. Сформулировать суть можно, например, вот так: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров. Выходит не слишком понятно (и не факт, что правильно), так что можно попробовать объяснять на примере :)

Допустим, какое-то значений (налог) для человека рассчитывается на основании его пола, возраста и наличия детей - получаем три входных параметра, для каждого из которых для тестов выбираем каким-то образом значения. Например: пол - мужской или женский; возраст - до 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дети есть

Такой подход примерно и составляет суть техники pairwise testing - мы не проверяем все сочетания всех значений, но проверяем все пары значений.

2. Что в этом хорошего

Когда ведут речь о pairwise testing, чаще всего сравнивают его именно с перебором всех возможных комбинаций значений, и одно из главных достоинств pairwise testing в том, что с его использованием получается гораздо меньшее количество тестовых наборов данных, чем при полном переборе, который во многих случаях просто невозможен.

Наверное, по приведённому выше примеру может показаться, что разница между этой техникой и перебором всех значений не так и велика. Но это только при таком незначительном количестве параметров и их значений, а чем их больше - тем значительнее разница. Допустим, если есть 50 параметров, каждый из которых может принимать 2 значения, то для полного перебора потребуется количество комбинаций равное 2 в степени 50, т.е. 1 125 899 906 842 624 :) А при использовании pairwise testing можно обойтись всего четырнадцатью комбинациями!

Кстати, составление нужных комбинаций данных - задачка часто не самая простая, но, к счастью, для её решения существует много инструментов, разного уровня качества и (бес)платности :)

3. Почему пары

Лично у меня при знакомстве с этой техникой сразу возник вопрос - а почему именно пары? Почему не тройки значений или не какое-либо "квартетное тестирование"? Есть ли у такого подхода, например, какое-либо математическое обоснование, либо это с потолка взято?

Мне удалось найти вот такое объяснение: когда-то, на основании кем-то выполненного анализа по каким-то реальным данным был сделан вывод о том, что причиной возникновения большинства ошибок являются либо отдельные значения, либо сочетания пар значений (источник тут). Это соображение судя по всему и легло в основу развития pairwise testing.

В принципе, обоснование более ли менее разумное, ведь какие-то исследования были проведены. Однако из такого объяснения также понятно, что правило это не однозначно верное и что справедливо оно будет далеко не для всех случаев. К тому же стоит задуматься и о понятии "большинство ошибок" :)

4. Как же и когда это (не) применять

Разумеется, технику эту надо применять именно в тех случаях, в которых это целесообразно.
Вот если, например, у нас просто есть формочка с каким-то количеством разных полей, данные из которых просто сохраняются в базу данных, то применение этой техники практически не имеет смысла, ведь данные не взаимодействуют друг с другом (хотя и могут быть нюансы, как эти данные сохраняются в базу)! А pairwise testing - это та техника, применять которую стоит именно в случае взаимодействующих значений (для невзаимодействующих - чаще всего достаточно просто отдельной проверки каждого из параметров).

Под взаимодействующими параметрами я понимаю в первую очередь те, которые влияют на результат не просто своими собственными отдельными значениями, но именно комбинациями друг с другом . Кстати, вот хороший пример взаимодействия - определение вариантов тестовой среды, например, из нескольких операционных систем, браузеров и разрешений монитора.

Итак, если параметры задачи взаимодействуют, то, казалось бы, тут pairwise testing и станет тем чудесным решением, которое и силы сэкономит, и полное тестирование обеспечит. Но конечно, эта техника обеспечивает достаточно высокое покрытие, но далеко не полное - если вдруг ошибка возникает при сочетании трёх, четырёх или более параметров, то pairwise testing может и не помочь (это уж как повезёт). По-хорошему, применению pairwise testing должен предшествовать анализ тестируемого приложения на предмет того, насколько тестирование именно сочетаний пар параметров является для него целесообразным.

В любом случае, если не сравнивать pairwise testing с исчерпывающим тестированием (exhaustive testing), то понятно, что даже применение этой техники достаточно трудоёмко. И в иных случаях, возможно, лучше протестировать несколько наборов наиболее часто используемых реальными пользователями данных, чем затратить массу усилий и протестировать множество сгенерированных наборов, в которые действительно популярные комбинации могут и не попасть.

5. Так что же я хотела сказать

Конечно, я назвала только пару-тройку, но есть большое количество соображений, которые стоит принять во внимание, принимая решение о применении техники pairwise testing - стоит хотя бы обратиться к упомянутым выше статьям (их вообще стоит почитать при наличии интереса к данной теме). А pairwise testing - это просто инструмент, который, как и прочие инструменты, требует использования с умом.


Просмотров: 2624 | Добавил: Сусанин | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: