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 |
Припустимо, сайт на двох мовах: українська (UA) та англійська (EN). Для повного експерименту, помножимо ці 4 конфігурації на 2, тобто кожну з попередніх конфігурацій перевірити з обома мовами. Але навіщо? Замість цього скористаємося попарним підходом і замість 8 конфігурацій отримаємо знову 4:
№ | Browser | OS | Language |
1 | Opera | Windows | UA |
2 | Firefox | Linux | UA |
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 | UA | MySQL |
2 | Firefox | Linux | EN | MySQL |
3 | Opera | Linux | EN | MSSQL |
4 | Firefox | Windows | UA | MSSQL |
5 | Opera | Linux | UA | 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 – не перевірити всі поєднання всіх значень, але перевірити всі пари значень.