23 ноября 2010 г.

Pairwise testing. Part 2 - AllPairs Algorithm.

Для начала напомню, что мы уже разобрали 5 техник тест дизайна:



Вступление.


Прошлым постом мы разобрались что такое попарное тестирование и тестирование ортогональными массивами. Теперь пришел черед allpairs algorithm. Эта комбинаторная техника была специально создана для попарного тестирования. Суть ее состоит в выборе таких комбинаций переменных, чтобы существовали все возможные комбинации значений каждой пары переменных.
Примечание: настоятельно рекомендуется перед изучением allpairs algorithm прочитать прошлый пост - orthogonal array testing.

Подход

Будем разбирать Allpairs algorithm сразу на примерах.

Начнем фантазировать. Представим что у нас есть формочка, на которой:
 * Есть список - Может принимать значение от 0 до 9 включительно.
 * Есть поле ввода - может принимать целочисленные значения от 1 до 99 включительно.
 * Есть чекбокс1 - принимает значения on или off.
 * Есть чекбокс2 - принимает значения on или off.
Сколько всего возможных комбинаций мы имеем? 99*10*2*2 = 3,960 возможных, валидных комбинаций. Тут нам придется либо умереть собственной смертью в попытках протестировать все комбинации, либо каким то способом уменьшить количество нужных нам комбинаций. Allpairs algorithm как раз и есть такой комбинаторный способ.

Суть Allpairs algorithm заключается в том, что мы не будем тестировать на всех комбинациях значений для всех переменных, а только все комбинации значений каждой пары переменных.

Ну приступим. Как всегда, для начала, нам нужно определить какое количество входных параметров(переменных) у нас есть, и какие значения может принимать каждый входной параметр.

List TextBox Checkbox1 Checkbox2
0 1 on on
1 2 off off
2 3
3 4
4 ...
5 96
6 97
7 98
8 99
9

Если можно упростить значения переменных, то обязательно это делаем. Например, поле ввода может принимать значения от 1 до 99. Понимая бизнес логику приложения мы можем разбить значения 1 до 99 на классы эквивалентности и использовать уже их как возможные значения для комбинаторики. Либо можем использовать технику граничных значений.

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

Ну и давайте уменьшим количество возможных значений для списка до 2х - 0 и любое другое значение.

Теперь наши входные данные выглядят так:

List TextBox Checkbox1 Checkbox2
0 Valid int on on
any other Invalid int off off
Alpha chars

Магичесий момент. Поменяем порядок столбцов таблицы так, чтобы переменная с наибольшим количеством значений была первой, а с наименьшим количеством значений последней.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)

Кажется пора начинать заполнять таблицу. Каждая строка таблицы будет представлять уникальный набор входных данных для теста. Внимательно, полностью сконцентрировавшись и отбросив все задние мысли смотрим сколько значений может принимать переменная второго столбца (список). Ага, 2 значения. Значит столько раз нужно вставить все значения первого столбца.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)
Valid Integer
Valid Integer
.
Invalid Integer
Invalid Integer
.
Alpha chars
Alpha chars

Мы вставили 6 строк. 3 возможных значения поля ввода (а т.е. первого столбца) значения повторяются дважды. Так же мы пропустили по строке после каждого дубля значения - это  важно, эпический момент, окутанный загадкой - дальше это нам понадобится.

Заполняем второй столбец. Для каждого дубля значений столбца 1 мы заполняем оба значения столбца 2.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)
Valid Integer 0
Valid Integer other
.
Invalid Integer 0
Invalid Integer other
.
Alpha chars 0
Alpha chars other

Пока все хорошо, у нас вышли все возможные комбинации пар значений первой и второй переменной. Думаю стоит продолжить заполнять таблицу :). Третья переменная может принимать 2 значения - on и off. Для каждого дубля значений столбца 1 мы заполняем оба значения столбца 3.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)
Valid Integer 0 on
Valid Integer other off
.
Invalid Integer 0 on
Invalid Integer other off
.
Alpha chars 0 on
Alpha chars other off

Проверяем. Есть ли все возможные комбинации значений между 1ым и 2ым столбцом? Есть. Есть все возможные комбинации значений между вторым и третьим столбцом? Нет, у нас нет комбинации {0,off} и {other, on}.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)
Valid Integer 0 on
Valid Integer other off
.
Invalid Integer 0 off
Invalid Integer other on
.
Alpha chars 0 on
Alpha chars other off

О, вот теперь намного лучше. Теперь у нас есть и все возможные комбинации значений 1ой, 2ой и 3ей переменной. Давайте разбираться с 4ой переменной - чекбокс2. Чекбокс2 тоже может иметь 2 возможных значнеия. Нам нужно подставить в таблицу эти значения так, чтобы все возможные комбинации значений каждой пары переменных существовали. Пробуем.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2)
Valid Integer 0 on Checked
Valid Integer other off Unchecked
.
Invalid Integer 0 off Checked
Invalid Integer other on Unchecked
.
Alpha chars 0 on Unchecked
Alpha chars other off Checked

Проверяем. Есть все возможные комбинации первого и четвертого столбца? Есть. Есть все возможные комбинации второго и четвертого столбца? Есть. Неплохо. Есть все возможные комбинации третьего и четвертого столбца? Еcть. Отлично, мы справились в 6 тест кейсов, когда всего существует 24 возможных комбинации.

Но зачем мы оставили пустые строки? Для того чтобы это понять нам нужно усложнить пример. Добавим еще 2 чекбокса (2 бинарных входных параметра) - чекбокс3 и чекбокс4. Продолжим строить тестовые данные на основе allpairs algorithm. Добавляем значения для 5ого столбца.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2) Checkbox3(2) Checkbox4(2)
Valid Integer 0 on Checked Yes
Valid Integer other off Unchecked No
.
Invalid Integer 0 off Checked No
Invalid Integer other on Unchecked Yes
.
Alpha chars 0 on Unchecked No
Alpha chars other off Checked Yes

Проверяем свежезаполненый 5ый столбец по отношению к остальным столбцам поочереди:
 * к первому - все ок. Все комбинации значений есть.
 * к второму - все ок. Все комбинации значений есть.
 * к третьему - все ок. Все комбинации значений есть.
 * к четвертому - все ок. Все комбинации значений есть.

Что ж, заполним последнюю колонку значениями.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2) Checkbox3(2) Checkbox4(2)
Valid Integer 0 on Checked Yes 1
Valid Integer other off Unchecked No 2
.
Invalid Integer 0 off Checked No 2
Invalid Integer other on Unchecked Yes 1
.
Alpha chars 0 on Unchecked No 1
Alpha chars other off Checked Yes 2
Проверяем свежак - 5ый столбец по отношению к остальным столбцам по очереди:
 * к первому - все ок. Все комбинации значений есть.
 * к второму - все ок. Все комбинации значений есть.
 * к третьему - есть проблемы. У нас есть комбинации значений On/1 и Off/2, но нет {On, 2} и {Off, 1}.
 * к четвертой - все ок. Все комбинации значений есть.
 * к пятой - все ок. Все комбинации значений есть.

Вот тут нам и понадобятся наши загадочные пустые строки. Добавляем не хватающие комбинации 3его и 6ого столбцов.

TextBox(3) List(2) Checkbox1(2) Checkbox2(2) Checkbox3(2) Checkbox4(2)
Valid Integer 0 on Checked Yes 1
Valid Integer other off Unchecked No 2
.
Invalid Integer 0 off Checked No 1
Invalid Integer other on Unchecked Yes 2
.
Alpha chars 0 on Unchecked No 2
Alpha chars other off Checked Yes 1

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

TextBox(3) List(2) Checkbox1(2) Checkbox2(2) Checkbox3(2) Checkbox4(2)
Valid Integer 0 on Checked Yes 1
Valid Integer other off Unchecked No 2
Invalid Integer other on checked yes 2
Invalid Integer 0 off Checked No 1
Invalid Integer other on Unchecked Yes 2
invalid integer other off unchecked No 1
Alpha chars 0 on Unchecked No 2
Alpha chars other off Checked Yes 1
Всё готово, мы закончили. Итого 8 комбинаций вместо 96.

James Bach’s All-Pairs Tool

К счастью для вас и нас Джеймс Бах разработал тулзу - all-pairs calculator. Стащить ее можно на его сайте www.satisfice.com. Эта тулза сама построит вам все пары переменных по allpairs algotithm. Использовать ее нужно следующим образом.

   1. Построить таблицу со всеми переменными и их значениями. (Сделать это легче всего в экселе и сохранить документ как txt файл). Например в таком виде:

TextBox List Checkbox1 Checkbox2
Valid int 0 on on
Invalid int any other off off
Alpha chars

  2. Запустить all-pairs calculator из командной строки "allpairs input.txt > output.txt", где input.txt - это ваша составленная таблица в экселе, а output.txt - файл в который вы хотите сохранить вывод.

7 комментариев:

  1. https://github.com/josephwilk/pairwise/wiki
    Еще одна тулза для генерации pairwise набора. Написана на Ruby, результаты очень удобно использовать с Cucumber.

    ОтветитьУдалить
  2. Спасибо, думаю для огуречных автоматизаторов будет очень даже полезно :)

    ОтветитьУдалить
  3. Сори, я новичек в тестировании...есть вопрос. я не очень поняла момент:
    "Проверяем. Есть ли все возможные комбинации значений между 1ым и 2ым столбцом? Есть. Есть все возможные комбинации значений между вторым и третьим столбцом? Нет, у нас нет комбинации {0,off} и {other, on}."
    Таблица до этого текста и после не изменилась - что же мы поменяли/добавили?...

    ОтветитьУдалить
  4. "Проверяем. Есть ли все возможные комбинации значений между 1ым и 2ым столбцом? Есть. Есть все возможные комбинации значений между вторым и третьим столбцом? Нет, у нас нет комбинации {0,off} и {other, on}."

    В таблице до этого текста мы добавили в таблицу значения checkbox1(те, которые on/off).

    В таблице после этого текста мы поменяли 2 значения checkbox1 местами, чтобы в таблице были все возможные комбинации 1 и 2 столбца, 2 и 3 столбца, и 3 и 1 столбца. (присмотритесь, в столбце checkbox1 напротив знчений Invalid Integer было on/off, а теперь стало off/on).

    P.S.: а вообще советую тактику - если что то не понятно, то попытаться перечитать/понять раз 5-7 - мне обычно помогает :)

    ОтветитьУдалить
  5. о спасибо :) моя вина - не доглядела :)

    ОтветитьУдалить
  6. Пожалуй сделаю ремарочку по поводу олпарного генератора имени г-на Баха - сохранять то что наваяно в Exel лучше всего именно в MS-DOS txt формате. Лично у меня с другими txt-шками были проблемы.

    ОтветитьУдалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить