Граничні значення та класи еквівалентності
Одним із найпопулярніших питань на співбесіді на позицію QA Engineer є наступне: "Що таке граничні значення? Що таке класи еквівалентності?". Найчастіше ці два запитання ставлять разом, як одне.
Іноді, скажімо, на позицію Senior QA Engineer це питання може бути навіть завуальоване. Наприклад:
- Які практики тест-дизайну ви знаєте/застосовуєте?
- Як писатимете тест кейси для якихось певних значень?
- Які значення перевірятимете?
- Як ви виділятимете граничні значення?
- У чому різниця граничних значень та класів еквівалентності?
- І т.д.
Що ж, питання популярне, давайте розбиратися.
Класи еквівалентності
Класи еквівалентності - це поділ функціоналу або даних на певні набори, з якими додаток, що тестується, повинен працювати однаково.
Розглянемо з прикладу.
Припустимо, що у нас є додаток, який переказує рублі в євро. Є поле введення, яке набуває цифрових значень. Запровадили 500, отримали європейський еквівалент. Наше завдання – протестувати таку програму.
Само собою, неможливо ввести всі цифри, щоб переконатися, що для кожної з них програма працюватиме правильно. Але давайте подумаємо, а чи треба?
З погляду роботи програми між значенням 500 і 600 різниці немає. Обидві цифри буде помножено на відповідний коефіцієнт. Отже, програма буде працювати однаково в обох випадках. Отже, ці перевірки вважатимуться еквівалентними.
А ось ще приклад. Для цієї програми ціле число і дробове можуть вважатися еквівалентними значеннями. Але тільки якщо дробове число має не більше двох знаків після коми: копійки та центи.Як оброблятиметься дробове число з трьома знаками після коми? Не важливо, головне, що не так само, як ціле число. І ця перевірка вже не буде еквівалентною.
Суть розбиття перевірок на класи еквівалентності в тому, що в рамках одного класу достатньо лише одну перевірку. Якщо все працює правильно, ми вважаємо, що для всіх інших еквівалентних значень все працюватиме правильно.
Отже, які перевірки нам треба здійснити для цієї програми?
- Перевірити будь-яке ціле число або дробове з двома знаками після коми
- Перевірити будь-яке дробове число з більш ніж двома знаками після коми
- Перевірити від'ємне число
- Перевірити не числове значення (ввести будь-який символ)
Ось такі класи еквівалентності в нас вийшли. Чи можна сказати, що це вичерпний набір? Швидше за все, ні. Але точно можна сказати, що лише чотирма перевірками ми закрили величезну кількість кейсів. А головне – зробили це систематизовано.
Граничні значення
Граничні значення - Це значення, в яких один клас еквівалентності переходить в інший.
Техніка граничних значень є ідейним продовженням техніки еквівалентних класів. Вважається, що окрім перевірки значень із середини класу (наприклад, значення 500 у нашому випадку) ще треба перевіряти значення на межах. У нашому випадку це значення 0, тому що негативного значення валюти не може бути.
Який прибуток від цих технік?
Я досить часто проводжу співбесіди інженерів-початківців у тестуванні. На прохання протестувати якийсь вигаданий додаток багато хто починає діяти хаотично: вводити якісь дані, які спадають їм на думку, здійснювати безладні маніпуляції.Їхні дії виглядають випадковими та неорганізованими.
Коли такі хлопці видихаються і фантазія їх спливає, вони ще довго дивляться на листочок і намагаються щось додумати. Вони ніколи не впевнені, що протестували всі розумні кейси. Раптом випадково "придумається" ще якась перевірка цікавіша. Знайомо? 🙂
Вищеописані техніки дозволяють систематизувати перевірки. Коли є чіткий план дій, покладатись на випадковість не треба. Ваші дії виглядають усвідомленими, а ви самі розумієте, закінчили перевірку чи ні.
Бажаєте побачити приклад використання цих та інших ефективних та популярних технік тестування та отримати майданчик для практики? Приходьте на наш курс з основ тестування - learnqa.ru/stageone
Техніка аналізу класів еквівалентності
це техніка, при якій ми поділяємо функціонал (часто діапазон можливих значень, що вводяться) на групи еквівалентних за своїм впливом на систему значень. Такий поділ допомагає переконатися у правильному функціонуванні цілої системи – одного класу еквівалентності, перевіривши лише один елемент цієї групи. Ця техніка полягає у розбитті всього набору тестів на класи еквівалентності з подальшим скороченням кількості тестів.
Техніка рекомендує проведення тестів всім класів еквівалентності, хоча по одному тесту кожного класу. Д прагне не тільки скорочувати кількість тестів , але і зберігати прийнятне тестове покриття .
Техніка аналізу класів еквівалентності
Ознаки еквівалентності тестів :
- спрямовані на пошук однієї і тієї ж помилки;
- якщо один із тестів виявляє помилку, інші швидше за все, теж її виявлять;
- якщо один із тестів не виявляє помилку, інші, швидше за все, теж її не виявлять;
- тести використовують подібні набори вхідних даних;
- для виконання тестів ми здійснюємо одні й самі операції;
- тести генерують однакові вихідні дані або наводять додаток в один і той же стан;
- всі тести призводять до спрацьовування одного й того ж блоку обробки помилок;
- жоден із тестів не призводить до спрацювання блоку обробки помилок.
Техніка аналізу класів еквівалентності алгоритм використання:
- Визначити класи еквівалентності
- Це основний крок техніки, т.к. багато в чому від нього залежить ефективність її застосування.
- Вибрати одного представника кожного класу еквівалентності.
- На цьому етапі слід вибрати один тест із еквівалентного набору тестів.
- Виконаннятестів
- На цьому етапі слід виконати тести від кожного класу еквівалентності.
Якщо є час, можна протестувати ще кілька представників кожного класу еквівалентності. Слід мати на увазі, при правильному визначенні класів еквівалентності додаткові тести швидше за все будуть надмірними і дадуть такий самий результат.
Техніка аналізу класів еквівалентності класичний приклад
Існує поле введення з діапазоном допустимих значень від 1 до 100.
Самі розумієте, що на 95 тестів на допустимі значення та на незліченну кількість тестів на неприпустимі значення піде дуже багато часу. І тут нам допоможуть класи еквівалентності.
Виходячи з того, з одного боку, всі допустимі значення можуть впливати на поле введення однаково, отже, всі числа від 1 до 100 можна сміливо вважати еквівалентними. З іншого боку, всі неприпустимі значення мають однаково впливати на полі введення (в ідеалі не повинно бути можливості введення цих значень у поле). Таким чином, є вже кілька класів еквівалентності:
Допустимі значення (від 1 до 100);
Неприпустимі значення:
- від - ∞ до 0;
- від 101 до + ∞;
- спеціальні символи (# @ + - / _ : ; “ ' і т.д.);
- літери.
Використовуючи класи еквівалентності, можна протестувати поле введення мінімум з 5 тестів.
Насправді класи еквівалентності обов'язкові під час тестування різноманітних форм і полів введення.
Плюси та мінуси техніки аналізу еквівалентних класів
До плюсів можна віднести відсіювання величезної кількості значень введення, використання яких просто безглуздо.
Ефективність: дозволяє значно скоротити кількість тестів, необхідні перевірки функціональності, з допомогою те, що тести групуються в класи.
Простота: техніка є простою у розумінні та застосуванні, навіть для новачків у тестуванні.
Поліпшення якості тестування: дозволяє повніше покрити функціональність, оскільки тести охоплюють всі можливі сценарії використання.
До мінусів можна віднести неправильне використання техніки, через яку є ризик упустити баги.
Неможливість врахувати всі можливі вхідні дані: техніка передбачає, що це можливі вхідні дані можна розбити на класи, що може бути неможливо у разі великої кількості вхідних параметрів.
Обмеження використання: техніка найбільш ефективна для функцій з дискретним набором вхідних параметрів, а не для функцій з безперервними значеннями.
Необхідність ретельного аналізу: щоб використовувати техніку еквівалентних класів, необхідно провести ретельний аналіз усіх можливих вхідних параметрів та їх властивостей, що може бути трудомістким процесом.
Техніка аналізу класів еквівалентності приклад із реального проекту
проект - Btrack.com
протестувати поля введення — у Manage->Users Add user поля Ім'я/Прізвище
Умова:
- У поля введення можна внести російські/англійські літери;
- Великі та малі літери; т.к. імена та прізвища можуть бути складовими наявність символу “-” (дефіс)
Виходячи з умов, розбиття на класи еквівалентності відбувається так:
1) Допустимі значення (блок позитивних тестів):
2) Усі літери російської (від А до Я)/англійської (A-Z);
3) Великі та малі літери;
4) Допускається написання імені/прізвища через дефіс.
5) Неприпустимі значення (блок негативних тестів):
6) Цифри (від -∞ до +∞);
7) Спеціальні символи, відмінні від дефісу та кутових дужок (< >).
Використовуючи дані класи, можна протестувати поля введення за допомогою 5 тестів.
З блоку допустимих значень:
- Російські літери, великі і малі: «Іван», «Петро», «Михайло», «Світлана», «Катерина»
- Англійські літери, великі і малі: "John", "Alice", "Michael", "Peter", "Sophie"
- Складові імена та прізвища з дефісом, російські літери, великі та малі: «Анна-Марія», «Ілля-Олегович», «Олександрівна-Петрова», «Юрій-Михайлів», «Ольга-Миколаївна»
- Складові імена та прізвища з дефісом, англійські літери, великі та малі: "Mary-Anne", "John-Peter", "Sophie-Grace", "Michael-Scott", "Oliver-James"
- З блоку неприпустимих значень:
- Імена та прізвища, що містять інші символи, наприклад цифри, пробіли, спеціальні символи. Ці значення слід віднести до некоректних вводів та обробити відповідним чином.
- %$#/ та
- +1026;
Замість ув'язнення
Техніка аналізу класів еквівалентності є корисним та зручним інструментом для тестування програмного забезпечення. Вона дозволяє скоротити кількість тестових даних, які потрібно використовувати для перевірки правильності роботи програми. Це допомагає економити час та знижувати витрати на тестування.Крім того, аналіз класів еквівалентності дозволяє виявляти помилки та проблеми на ранніх стадіях розробки, коли їх виправлення найменш затратне.
Однак, для ефективного застосування техніки аналізу класів еквівалентності необхідно мати глибокі знання у галузі тестування та досвід роботи з цим методом. Також необхідно враховувати усі можливі варіанти вхідних даних, які можуть вплинути на роботу програми. Якщо тестування буде проведено некоректно, це може призвести до пропуску помилок або до непотрібних витрат часу на додаткове тестування.
Загалом, техніка аналізу класів еквівалентності є корисним та потужним інструментом у руках досвідчених тестувальників. При правильному застосуванні вона дозволяє забезпечити високий рівень покриття тестами та гарантувати правильність роботи програмного забезпечення.
Про інші техніки читайте тут:
Все про тестування та якість ПЗ
- Розширене тестування
- Валідація у тестуванні
- Що потрібно автоматизувати у тестуванні?
- Методи верифікації програмного забезпечення
- Альфа тестування