
Попередня новина про метрологію багатьох зачепила і надихнула мене продовжити тему фундаментальних наук в тестуванні. І звісно ж, перша на черзі – цариця наук фізкультура математика.
Викладаючи в університеті тестування, ми кожного разу проходимо тему «тест дизайн» і одну з найпоширеніших технік – класи еквівалентності та граничні значення. Суть дуже проста – всі вхідні тестові дані розбиваються на групи (класи), що викликають однакову поведінку програмного забезпечення. Як і інші техніки тест дизайну, такий підхід дозволяє мінімізувати кількість тестів, зберігаючи рівень покриття. Як приклад – форма на сайті, що запитує вік користувача перед тим, як надати доступ до контенту. Якщо користувачу менше 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. Функція в цій точці не визначена – для нас, як для тестерів, це додатковий сценарій, що вимагає окремої перевірки.
І, власне, це вся наука – чим складніша функція, тим більше в ній визначених/невизначених проміжків та точок, локальних максимумів/мінімумів, що вимагають нашої уваги, але, як і для побудови графіку, одного значення з діапазону мінімально достатньо для перевірки всього діапазону.