число необхідних тестів;
2) необхідно розбити область значень вхідних даних на кінцеве число підобластей (які будуть називатися класами еквівалентності), щоб можна було вважати кожний тест, що є представником деякого класу, еквівалентним будь-якому другому тесту цього класу (тобто що виявляє одні і ті ж помилки).
У загальному випадку використання терміну “клас еквівалентності" є тут не цілком точним, так як виділені підобласті можуть перетинатися.
Проектування тестів по методу еквівалентного роздроблення проводиться в два етапи:
виділення по зовнішній специфікації класів еквівалентності;
побудова безлічі тестів.
На першому етапі відбувається вибір з специфікації кожної вхідної умови і роздроблення його на дві або більше за групу, відповідні так званим “правильним" (ПКЕ) і “неправильним" класом еквівалентності (НКЕ), тобто областям допустимих для програми і недопустимих значень вхідних даних. Цей процес залежить від вигляду вхідної умови. Якщо вхідна умова описує область (наприклад, х <=0.5) або кількістю (наприклад, розмір масиву А рівний 50) допустимих значень вхідних даних, то визначаються один ПКЕ (х <=0.5 або розмір А рівний 50) і два НКЕ (х< -0.5; х>0.5 або розмір А менше 50; розмір А більше 50).
Якщо вхідна умова описує дискретну безліч допустимих значень вхідних даних (наприклад, В може дорівнює -1, 0 або 1), то визначаються ПКЕ для кожного значення з безлічі (в даному прикладі 3) і одного НКЕ (В<>-1 & В<>0 & В<>1).
Якщо вхідна умова описує ситуацію “помилково бути " (наприклад, N>0), то визначаються один ПКЕ (N>0) і один НКЕ (N<=0).
На другому етапі методу еквівалентного роздроблення виділені класи еквівалентності використовуються для побудови тестів:
кожному класу привласнюється свій номер;
проектуються тести для ПКЕ таким чином, що кожний тест покриває як можна більше ще не покритих ПКЕ, доти, поки все ПКЕ не будуть покриті;
проектуються тести для НКЕ таким чином, що кожний тест покриває один і тільки один НКЕ, доти, поки все НКЕ не будуть покриті.
Порушення третьої умови приводить до того, що деякі тести з недопустимими значеннями вхідних даних перевіряють тільки одну помилку і приховують реакцію програми на інші помилки.
Метод еквівалентного роздроблення значно краще випадкового підбору тестів, але має свої недоліки. Основної з них - пропуск певних типів високоефективних тестів (тобто тестів, що характеризуються великою імовірністю виявлення помилок). Від цього недоліку багато в чому вільний метод аналізу граничних умов.
Під граничними умовами розуміють ситуації, виникаючі безпосередньо на кордоні певної в специфікації вхідної або вихідної умови, вище або нижче її. Метод аналізу граничних умов відрізняється від методу еквівалентного роздроблення наступним:
вибір будь-якого представника класу еквівалентності здійснюється таким чином, щоб перевірити тестом кожний кордон цього класу;
при побудові тестів розглядаються не тільки вхідні умови, але і вихідні (тобто певні у зовнішній специфікації обмеження на значення вхідних даних).
Загальні правила методу аналізу граничних умов:
1) побудувати тести для кордонів області допустимих значень вхідних даних і тести з недопустимими значеннями, відповідними незначному виходу за межі цієї області (наприклад, для області [-1.0; 1.0] будуємо тести -1.0; 1.0; -1.001; 1.001);
2) побудувати тести для мінімального і максимального значень вхідних умов, що визначають дискретну безліч допустимих значень вхідних даних, і тести для значень, великих або менших цих величин (наприклад, якщо вхідний файл може містити від 1 до 225 записів, то вибираються тести для порожнього файла, що містить 1, 255 і 256 записів);
3) використати правило 1 для кожної вихідної умови (наприклад, програма обчислює щомісячну витрату приватної особи або невеликого підприємства, мінімум якого 0.00 $, а максимум 1165.50 $; тоді необхідне построїти тести, що викликають негативну витрату, витрати, рівну 0.00 $ і 1165.50 $, і витрату, більшу 1165.50 $);
4) використати правило 2 для кожної вихідної умови (наприклад, програма шукає і відображає на екрані дисплея найбільш відповідні, в залежності від вхідної умови, реферати статей, але не більш чотирьох; тоді необхідно побудувати тести, що приводять до відображення 0, 1, 4 рефератів і спроб помилкового відображення 5 рефератів);
5) якщо вхідні і вихідні дані програмиявляють собою впорядковану безліч (послідовний файл, лінійний список, таблицю), то при тестуванні зосередити увагу на першому і останньому елементі безлічі;
6) спробувати знайти і перевірити тестами інші граничні умови.
Важливість перевірки кордонів вихідних умов пояснюється тим, що не завжди граничним значенням вхідних даних відповідають граничні значення результатів роботи програм.
Для ілюстрації необхідності аналізу граничних умов приведемо тривіальний приклад. Нехай є програма, що здійснює введення трьох чисел що інтерпретує їх як довжину сторін трикутника і що виводить повідомлення про тип трикутника (“різносторонній", “рівнобедрений" або “рівносторонній "). Допустимо також, що в програмі міститься помилка: при перевірці умови побудови трикутника (сума довжин будь-яких двох сторін повинна бути більше третьою) використовується операція відношення >= замість >. При проектуванні тестів по методу еквівалентного роздроблення будуть побудовані тести для випадків можливості побудови трикутника (наприклад, 3, 4, 5) і неможливості його побудови (наприклад, 1, 2, 4), тобто помилка в програмі не буде виявлена (на вхідні дані 1, 2, 3 буде виведене повідомлення “різносторонній трикутник"). Але подібний тест буде отриманий при використанні методу аналізу граничних умов.
Аналіз граничних умов - один з найбільш корисних методів проектування тестів. Але він часто виявляється неефективним через те, що граничні умови іноді ледве вловимі, а їх виявлення вельми важке.
Загальним недоліком двох розглянутих вище методів функціонального тестування є те, що при їх застосування досліджуються досліджуються можливі комбінації вхідних умов. Слідує,