Класи еквівалентності

Попередня новина про метрологію багатьох зачепила і надихнула мене продовжити тему фундаментальних наук в тестуванні. І звісно ж, перша на черзі – цариця наук фізкультура математика.

Викладаючи в університеті тестування, ми кожного разу проходимо тему «тест дизайн» і одну з найпоширеніших технік – класи еквівалентності та граничні значення. Суть дуже проста – всі вхідні тестові дані розбиваються на групи (класи), що викликають однакову поведінку програмного забезпечення. Як і інші техніки тест дизайну, такий підхід дозволяє мінімізувати кількість тестів, зберігаючи рівень покриття. Як приклад – форма на сайті, що запитує вік користувача перед тим, як надати доступ до контенту. Якщо користувачу менше 18 – показувати помилку та блокувати контент, якщо 18 та більше – показувати контент. В цьому випадку позитивних класів еквівалентності буде лише два: від 0 до 17, та від 18 до … (тут ще окреме питання, як визначити верхню границю класу) та ще низка негативних. Техніку можна застосувати до будь-яких наборів вхідних даних:

  • Числа (цілі/дроби, додатні/від’ємні/0, малі/великі (наприклад, більші за 232))
  • Символи (латиниця/кирилиця, пуста строка/довга строка, спец символи, строки з пробілами)
  • Типи файлів (txt, jpg, png)
  • Розмір файлів
  • Розширення екрану
  • Тип браузера
  • Тип операційної системи
  • Швидкість підключення до мережі
  • Та інше

Всі знають про цю техніку та використовують по мірі можливостей, але ось підходить студент та питає: «а чому так? Як ми можемо бути впевнені, що ввівши 15, сайт покаже помилку, а ввівши – 13 – ні?»

І тут, звісно, якщо розробник не додав «пасхалку» в код, нам допомагає математика. Наприклад, у нас є функція y=x+1. Ця функція буде неперервною на всьому проміжку х (x ∈ R), тобто для кожного х гарантовано буде свій y. Як наслідок, для перевірки функції y=x+1 необхідно і достатньо всього 2 тестів, бо для побудови прямої потрібно 2 точки, а для тесту – впевнитись, що функція змінюється в залежності від x.

Тепер візьмемо складнішу функцію: y=x^2/x + 1. На перший погляд, вона нічим не має відрізнятись від попередньої, але є додаткова умова: x ≠ 0. Функція в цій точці не визначена – для нас, як для тестерів, це додатковий сценарій, що вимагає окремої перевірки.

І, власне, це вся наука – чим складніша функція, тим більше в ній визначених/невизначених проміжків та точок, локальних максимумів/мінімумів, що вимагають нашої уваги, але, як і для побудови графіку, одного значення з діапазону мінімально достатньо для перевірки всього діапазону.

7 October 2019
Автор: 
Oleksii Ostapov

Leave a comment

Leave a Reply