почему можно применять попарное тестирование
Мысли о тестировании вслух
пятница, 11 июня 2010 г.
Что такое Pairwise Testing, и с чем его едят
| № | пол | возраст | дети |
|---|---|---|---|
| 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 | дети есть |
| № | пол | возраст | дети |
|---|---|---|---|
| 1 | мужчина | до 25 | детей нет |
| 2 | женщина | до 25 | дети есть |
| 3 | мужчина | 25-60 | дети есть |
| 4 | женщина | 25-60 | детей нет |
| 5 | мужчина | старше 60 | детей нет |
| 6 | женщина | старше 60 | дети есть |
31 комментарий:
Несколько добавлений к статье.
1) Есть инструменты, которые умеют генерить комбинации по произвольному базисы (пары, тройки и тд).
3)Ищите инструмент, который умеет использовать предписаные сочетания. Есть комбинации параметров и их значений, которые либо наиболее вероятны, либо наиболее важны для проверки (известные конфигурации у клиентов, например). Их хочется проверять, но наврядли тул так удачно все сгенерит.
4) Перед пименением этого метода, надо обязательно воспользоваться другими методами, такими как разбиение на класы эквивалентности.
5) Есть параметры на которые перемножать не надо. У нас например, это encoding. Если все умножать на encoding, то количество комбинаций резко возрастет, а толку от них нет. Поэтому такой параметр просто добавляется к уже сгнеренным комбинациям, не увеличивая их числа.
Спасибо, очень полезная статья!
Рада, если статья оказалась полезной 🙂
Я познакомился с «pairwise» когда искал тул для «автоматической генерации тестов» на основании комбинации входных параметров.
Но увы, сама идея хоть и красивая, но на практике утопичная (LeshaL описал некоторые причины). Возможно для некоторых случаев и будет польза от таких генераторов (с применением средств автоматизации тестирования).
Но на практике тестировщику никак не уйти от ручного выбора комбинаций входніх параметров и задания очерёдности их прогона.
Почему опасен метод попарного тестирования?
Все тексты пишутся текстировщиком по определенному алгоритму, который хранится у него в голове. Такая методика не совсем удобна, да и утомительна. Было бы неплохо, если бы этот алгоритм хранился не в голове текстировщика, а в специальном коде, представленным каким-то софтом. То есть, нужно создать такую программу, которая бы автоматически использовала тест — кейсы. Вот этим, как раз, и занимается метод попарного тестирования.
В качестве примера можно взять вариант тестирования работы какого-то определенного интернет — ресурса, при использовании различных браузеров. В данном случае нам важно знать, с каким из них наш сайт будет работать лучше, с каким хуже, и при каких условиях вообще может произойти сбой. Чтобы это сделать, придется использовать массу параметров, причем, в различных их сочетаниях. На это уйдет много времени, не говоря уже об огромном количестве тестов. Но если использовать попарный метод тестирования, то количество тестов уменьшится многократно.
Смысл попарного тестирования состоит в том, что большинство документов, описывающих последовательность действий текстировщика, будет определяться специальным тестом, который в автоматическом режиме проверяет сочетание двух разных параметров. Это позволяет исключать ошибки, которые могут возникнуть в случае сочетания трех, и более параметров. При этом текстировщик сам выбирает набор кейсов, с желаемой комбинацией параметров.
Сложность данного метода заключается в том, чтобы подобрать такой алгоритм действий, который бы обеспечил минимальное количество тестов, и одновременно позволил бы комбинировать проверяемые пары в одном и том же тесте. Ну, а для этого можно использовать математические методы, к числу которых, например, относятся ортогональные матрицы.
Непосвященному человеку этот метод покажется довольно сложным. Разобраться в нем будет не просто. В этом и состоит его основная опасность. Даже если пытаться тестировать минимальное количество параметров, то от этого задача не становится проще. Сложность метода будет расти пропорционально увеличению числа тестируемых параметров. К тому же, этот метод даст положительный результат, лишь в том случае, если будет наполнен правильно подобранными функциональными тестами. То есть, если вы хотите протестировать сайт на разных браузерах, то, в первую очередь, вам нужно убедиться, что на данной операционной системе они вполне будут работоспособны с параметрами по умолчанию. При парном же тестировании будет использовано большое количество параметров, отличных от тех, которые использовались по умолчанию, поэтому и возникает вероятность сбоя системы, и одновременно трудность локализации параметра, ставшего его причиной. В этом случае метод не будет работать эффективно, и от него нужно отказаться.
Вывод прост. Метод попарного тестирования можно использовать лишь на стабильно работающей системе, и только в том случае, если прежние тесты потеряли свою актуальность.
Прежде, чем выбрать параметры для тестирования, нужно убедиться в отсутствии негативных тестов, так как при их включении в тест — кейсы будет производиться проверка всего одного параметра, а значит, некоторые пары вообще не будут учтены и не проверены. Это еще один недостаток данного метода.
Опасность заключается и в том, что тестировщик может просто не включить в кейс какой-то важный параметр или же его значение. В этом случае произойдет автоматическое увеличение количества тестов, что приведет к некорректному тестированию.
Проводить попарное тестирование без применения технических средств крайне сложно. Это можно делать лишь с помощью специальных программных продуктов, таких, например, как «Allpairs». Но это уже совершенно иная тема.
PICT и Pairwise тестирование
Pairwise тестирование (Парное тестирование), также известное как all pairs testing (тестирование «всех пар»), — это метод обнаружения дефектов с использованием комбинационного метода двух тестовых случаев. Он основан на наблюдении, что большинство дефектов вызвано взаимодействием не более двух факторов. Следовательно, выбирается пара из двух тестовых параметров, и все возможные пары этих двух параметров отправляются в качестве входных параметров для целей тестирования. Для облегчения генерации тестов для pairwise testing есть специальный инструментарий — PICT программа от Microsoft, о которой мы также поговорим в данной статье.
Pairwise testing приводит к сокращению количества тестовых случаев и, следовательно, к более быстрым и простым возможностям тестирования. Комбинационное тестирование более высокого порядка имеет большее количество тест кейсов, что делает тест более исчерпывающим, но также более дорогим и громоздким. Кроме того, большинство ошибок вызвано единственными входными параметрами или вызвано взаимодействием между двумя параметрами. Все эти ошибки могут быть устранены путем тестирования пар (test pair). Ошибки, вызванные взаимодействием трех или более параметров, обычно очень редки и дают меньше оснований для больших инвестиций в их поиск.
Давайте ниже рассмотрим суть проблематики, плюсы и минусы подхода а также посмотрим pairwise пример, который приложен в файле для скачивания.
Pairwise testing: проблематика
90% случаев команда тестирования должна работать в сжатые сроки. Таким образом, методы разработки тестов должны быть очень эффективными для максимального охвата и высокой вероятности обнаружения дефектов.
Примечание: Прежде чем переходить к примеру определимся с терминологией.
На экранах вы можете встретить следующие контролы – чек-боксы, листы, поля, радио-батоны и т.д.
Давайте будем их называть параметрами, а значения которые они принимают, например для дроп-даун листа это Option1, Option 2 и т.д. – это значения параметров.
Вполне возможно, что в литературе вы можете увидеть несколько другие термины, но такой русскоязычный вариант нам все же ближе…
Пример, где pairwise тестирование будет, как нельзя кстати
Предположим, что у нас есть тестируемое программное обеспечение, которое имеет набор контроллов (параметров), в свою очередь, каждый параметр может принимать значения (значения параметров), например:
Примечание: Давайте ради интереса посчитаем, какое кол-во комбинаций у нас получится…
Ради интереса, возьмем 2 шрифта (самых распространенных)*4 стиля * 3 размера(самых распространенных)*3 цвета*2 (учитываем эффекты) в 11 степени (11 переменных по 2 параметра) = 147 456
Таким образом мы подошли к сути проблемы, которая встает перед тестировщиком.
Суть проблемы тестирования программного обеспечения с большим количеством параметров и пути ее решения
Много параметров и много значений, которые принимают эти параметры, предполагают создание большого количества тестов, чтобы покрыть ими все возможные комбинации. Также абсолютно очевидно, что, сочетания этих переменных, могут вызывать ошибки. Баги из-за комбинации параметров, достаточно распространенное явление.
Закономерный вопрос тестировщика, что с этим делать? Ответ напрашивается сам собой, надо перебирать комбинации, но какие и в каком количестве? Таким образом, баги из-за «взаимодействия параметров» встречаются достаточно часто, но тестеры, порой, эти взаимодействия игнорируют из-за большого количества тестов (особенно этого пугаются новички). Тем не менее, не смотря на кажущуюся сложность вышеобозначенной задачи выход имеется и это pairwise тестирование, о котором подробнее поговорим дальше
Pairwise testing
Как мы отмечали в начале статьи, методика All Pairs testing очень полезна для разработки тестов для приложений с несколькими параметрами. Тесты составлены таким образом, что для каждой пары входных параметров системы существуют все возможные комбинации этих значений параметров. Тестовый набор охватывает все комбинации, поэтому он не является исчерпывающим, но очень эффективным в поиске ошибок.
Возможные варианты решения проблемы помимо pairwise тестирования
Прежде чем говорить о достоинствах, недостатках Pairwise тестирования а также инструментах, помогающих его реализовать, перечислим еще некоторые варианты решения вышеочерченной проблемы:
Monkey Testing
Полный перебор:
И если говорить непосредственно о pairwise testing, то данный метод базируется на исследовании, которое говорит, что 90% ошибок кроются в комбинациях пар и только 10 % ошибок дает сочетание троек, четверки. И если в кратце охарактеризоват данный метот, то это будет выглядеть следующим образом.
Метод «Всех пар» (all pairs testing)
Теперь давайте разберемся в чем заключается идея метода.
Идея и реализация метода pairwise testing
Вернемся к нашему примеру со страничкой из Word. В чем тут суть метода. Этот метод гарантирует, что мы каждый параметр протестируем в ПАРЕ со всеми другими параметрами.
Например, Arial со всеми стилями (обычный, курсив, жирный, маленький размер, белый цвет, и т.д. ) а именно со всеми значениями параметров других переменных. Тем самым мы обеспечим парное покрытие параметров, у каждого параметра будет своя пара с другим параметром из другой переменной. И так для всех. Для успешной реализации надо пройти через 3 шага:
Пример реализации этапов
| Этап | Реализация pairwise тестирования |
|---|---|
| Определение параметров | ![]() Итак, определяем переменные: |
| Определение значений | ![]() Каждый параметр имеет ряд значений: Примечание: обратите внимание на сокращения |
| Построение таблицы | ![]() И только на 6-ом символе у нас произошло бы переполнение и мы дописывали бы строчки. В итоге у нас количество тестов для этой таблицы сократилось с 96 до 8 (по кол-ву строк). 4-ая, 5-ая, 6-ая колонки фэйковые, чтобы ощутить размер пользы. Так как если бы мы оставили наши 3 колонки, то получилось бы 3*2*2 = 12 против 6 тестов (не очень внушающие цифры). PICT pairwise testingВозвращаясь к многострадальному примеру с Word. Как построить таблицу all pairs testing? Выход очевиден – использовать спец фриварный инструментарий, например PICT. Инструмент pairwise тестирования (PICT) может помочь вам эффективно проектировать тестовые случаи для программных систем. С помощью PICT вы можете создавать тесты более эффективно, чем тесты, созданные вручную, и создавать их за короткий промежуток времени. PICT генерирует компактный набор вариантов значений параметров, представляющих тестовые наборы, которые вы должны использовать. Это позволяет получить всесторонний комбинаторный охват ваших параметров. Если кратко охарактеризовать преимущества PICT, то можно назвать: Примечание: Плюс ко всему PICT позволяет покрывать не только пары, но и тройки (используя спец синтаксис). Теперь давайте рассмотрим, ка работать с PICT. PICT, как пользоваться?PICT работает как инструмент командной строки. Вы готовите файл модели, детализирующий параметры интерфейса (или набора конфигураций, или данных), которые вы хотите протестировать. PICT генерирует компактный набор вариантов значений параметров, которые представляют собой тестовые случаи. Процесс установки, после скачивания и разархивации: Для генерации тестовых случаев необходимо проделать несколько шагов: После чего PICT обработает txt файл и в папке появиться xls документ с набором комбинаций (пример сформированного PICT файла cases_pict.xls можно скачать ниже). Более полный набор возможностей PICT можно найти в мануале PICTHelp.htm, который находится в папке с установленным PICT. Недостатки PICT
При имеющихся недостатках, во многих ситуациях, пользу от использования PICT pairwise testing сложно переоценить. Ведь как показал пример с Word вместо 147456 комбинаций было сгенерировано 15 тестов. В итоге от применения pict и pairwise все счастливы! Так как эти тест сеты можно и заказчику показывать с обоснованием целесообразности сокращения количества тестов и сэкономить время на рутинной работе тестировщика. Скачать PICT и pairwise пример файла Почему можно применять попарное тестирование
Что пишут в блогахПродолжу хвастаться статусом книги. I’m sticking with “bug” rather than adopt another word such as “fault,” which is the current fad in publications because: Онлайн-тренингиЧто пишут в блогах (EN)Разделы порталаПро инструментыКаждый тестировщик пишет тесты по определенному принципу. Даже тот, кто слыхом не слыхал ни о каких методиках, так или иначе руководствуется рядом принципов, которые, как правило, держит в голове, или в редких случаях на бумаге. Но скажите, какой бывалый тестировщик не представлял себе фантастическую ситуацию, когда эти принципы реализованы в коде: софт создает тест-кейсы. Конечно до такой радужной перспективы еще очень далеко, но первые шаги на этом поприще уже сделаны… Описание методаПредставьте себе, что вам нужно протестировать систему с большим числом параметров, влияющих на её работу. Ярким примером такого рода может быть конфигурационное тестирование: например проверка работы системы под различными операционными системами или работа сайта в различных браузерах. Кто знает, какое сочетание параметров приведет к сбою? Каждый тестировщик знает, что все комбинации не проверить. К примеру, для проверки всех сочетаний 10 параметров с 10 значениями каждый, потребуется 10,000,000,000 тестов, в то время как метод перебора пар позволяет реализовать сравнимое по качеству тестирование (учитывая количество и критичность найденных в результате багов) используя всего 177 тестов. Итак, в чем же трюк? Метод парного тестирования основан на довольно простой, но от того не менее эффективной идее, что подавляющее большинство багов выявляется тестом, проверяющим один параметр, либо сочетание двух. Ошибки, причиной которых явились комбинации трех и более параметров как правило значительно менее критичны, чем пары параметров и тем более одного, не говоря уже о том что никто не мешает дополнить свое тестовое покрытие кейсами на желаемые комбинации параметров. Перебрать все пары немудрено, трудность в том, чтобы обеспечить при этом минимум тестов, комбинируя проверки нескольких пар в одном тесте. Тут нам на помощь приходят математические методы, уходящие корнями к английским математикам девятнадцатого века. Одним из плодов их трудов стали ортогональные матрицы. Я лишь упоминаю их вскользь, дабы любители линейной алгебры могли навести справки, благо информации в интернете предостаточно. Что важно нам, так это то, что велосипед изобретать не нужно, и методы, по которым мы можем сформировать оптимальное покрытие, давно изобретены. Рассмотрим как происходит оптимизация. Возьмем для примера таблицу параметров и значений следующего вида: Переберем значения первого параметра со вторым (строки №1-4), первого с третьим (строки №5-8) и второго с третьим (строки №9-12). Удалив повторяющиеся наборы параметров (выделены серым), получим следующую таблицу тестов: Зеленым выделены уникальные пары всех параметров в таблице. Теперь начинается самое интересное, значения выделенные белым не являются необходимыми для перебора всех пар в таблице, поэтому могут быть заменены на любое другое значение. Поэтому заменив их, мы можем оптимизировать тесты, добавив проверку пар из 5, 6 и 7 строк во вторую и третью строки, получим: Как видно из примера выше, оптимизация даже такого малого набора параметров не так проста как могло бы показаться. При этом сложность задачи возрастает пропорционально росту числа параметров. Однако эта задача решаема, в чем мы убедимся в последствии. ПрименениеКак показывает опыт, метод эффективен лишь на поздних этапах разработки, либо дополненный основными функциональными тестами. Например, если вы проводите конфигурационное тестирование, то прежде чем использовать парное тестирование следует убедиться, что основной сценарий функционирует на всех операционных системах с параметрами по умолчанию (что-то типа BVT). Это значительно облегчит локализацию будущих багов, ведь при парном тестировании в одном тесте фигурирует множество параметров со значениями не по умолчанию, каждый из которых может стать причиной сбоя и его локализация в этом случае весьма затруднительна. А в случае провала BVT следует отказаться от использования метода парного тестирования, так как многие тесты будут провальными, а исключение даже одного теста влечет за собой потерю как правило нескольких пар и смысл использования метода теряется. Поэтому метод следует использовать лишь на стабильном функционале, когда текущие тесты уже теряют свою эффективность. Для того чтобы воспользоваться методом необходимо выполнить несколько простых шагов: 1. Определиться с функциональностью, которую будем проверять Как говаривал Козьма Прутков «Нельзя объять необъятное», поэтому прежде всего необходимо разделить функциональность на части: компоненты, функции, сценарии. Функциональность небольшой программы, например по записи дисков, упрощенно можно представить в виде всего двух сценариев: запись диска, стирание диска. Выбираем запись диска и переходим к следующему шагу. 2. Исследовать выбранный сценарий и выявить его параметры и их значения На данном этапе следуют спросить себя, какие параметры сценария могут повлиять на его выполнение? В качестве параметров могут выступать как настройки самой программы, так и внешние факторы. Упрощенно, параметры и их значения при записи диска можно представить в виде: Вы наверняка обратили внимание, что параметр «Скорость записи» имеет значения, недопустимые для “DVD”, как же быть?. У этой маленькой задачки, есть несколько вариантов решения, одно из которых – это разделить таблицу на две. Стоит учитывать, что на практике параметров в этом сценарии гораздо больше, и несостыковок, было бы значительно больше. Итак, поделив таблицу по типу носителя получим:
|














В общем мы рассмотрели, как пользоваться pict, но несмотря на очевидные преимущества данного метода, все же с ним есть реальные проблемы. К ним относятся:


