Загальні правила методу аналізу граничних умов:
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 буде виведене повідомлення “різносторонній трикутник"). Але подібний тест буде отриманий при використанні методу аналізу граничних умов.
Аналіз граничних умов - один з найбільш корисних методів проектування тестів. Але він часто виявляється неефективним через те, що граничні умови іноді ледве вловимі, а їх виявлення вельми важке.
Загальним недоліком двох розглянутих вище методів функціонального тестування є те, що при їх застосування досліджуються досліджуються можливі комбінації вхідних умов. Слідує, правда, помітити, що через вельми велике число таких комбінацій, їх аналіз викликає істотні ускладнення. Але існує метод (метод функціональних діаграм), що дозволяє в цьому випадку систематичним образом вибрати високо ефективні тести. Корисним побічним ефектом цього методу є виявлення неповноти і суперечності у зовнішніх специфікаціях.
Функціональна діаграма - це текст на деякій формальній мові, на яку транслюється специфікація, складена на природному або напівформальному мовах. Далі буде називатися причиною окрема вхідна умова і слідством - вихідна умова або перетворення системи (тобто залишкова дія програми, викликана певною вхідною умовою або їх комбінацією). Наприклад, для програми оновлення файла зміна в ньому є перетворенням системи, а підтверджуюча ця зміна повідомлення - вихідною умовою.
Метод функціональних діаграм складається з шести основних етапів. На першому з них (необов'язковому) зовнішня специфікація великого розміру розбивається на окремі дільниці (наприклад, специфікація компілятора мови програмування розбивається на дільниці, що визначають синтаксичний контроль окремих операторів мови).
На другому етапі в специфікації виділяються причини і слідства, а на третьому - аналізується семантичний зміст специфікації і вона перетворюється в булевський граф, зв'язуючий причини і слідства і що називається функціональною діаграмою. На мал. 3 приведені базові символи для запису функціональних діаграм (кожний вузол функціональної діаграми може знаходитися в стані 1 - “існує" - або 0 - “не існує").
а) Тотожність: (а(1(>b(1) & (а(0(>b(0))))))
а b
би) Заперечення: (а(1(>b(0) & (a(0(>b(1))))))
~
а b
в) Диз'юнкція: (a(1(b(1(>з(1) & (a(0&b(>0 >з(0))))))))
а
( з
b
г) Кон'юнкція: (a(1&b(1(>з(1) & (a(0(b(0(>з(0)))))))))
а
& з
b
мал. 3
На четвертому етапі функціональна діаграма забезпечується коментарями, які задають обмеження на комбінації причин і слідств. На мал. 4 приведені знаки коментарів, задаючих ці обмеження.
а) Виключення однієї з причин:
а
Е (a(1(b(1)^~(a(1&b(1)) ( (a(0&b(0))))))))
b
б) Включення хоч би однієї причини:
а
I (a(1(b(1)&~(a(0&b(0) )))))
b
в) Існує одна і тільки одна причина:
а
ПРО (a(1(b(1)&~(a(1&b(1)&~(a(0&b(0) )))))))
b
г) Одна причина спричиняє за собою іншу:
а
R ~(a(1&b(0) ))
b
д) Одне слідство приховує в собі інше:
а
M (a(1&b(0)&(a(1&b(1) ))))
b
мал. 4
П'ятий етап - функціональна діаграма перетворюється в таблицю рішень:
вибирається слідство, яке встановлюється в 1;
знаходяться всі комбінації причин (з урахуванням обмежень),
які встановлюють вибране слідство в 1