Аналіз граничних значень

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Аналіз граничного значення - це техніка тестування програмного забезпечення, згідно якої тести розроблено таким чином, щоб включати представників граничних значень в діапазоні. Назва походить від слів ‘границя’, ‘межа’. Враховуючи, що є набір тестових векторів для тестування системи, топологія може бути визначена на цьому наборі. Основою стануть ті вхідні дані, які належать до одного класу еквівалентності, визначеної теорією еквівалентних класів. Оскільки, основою є сусідні значення, то між ними існує межа. Тестові вектори по обидві сторони границі називаються граничними значеннями. На практиці вимагається, щоб тестові вектори були впорядковані та окремі параметри відповідали певному порядку (частковий або загальний порядок).

Формальне визначення

Нижче наведено формальне визначення граничних значень:

Нехай є тестові вектори . Припустимо, що між ними існує упорядковане відношення <=.

Нехай - два еквівалентні класи. Припустимо, що тестовий вектор та . Якщо чи , тоді класи знаходяться по сусідству та значення є граничними значеннями. Простіше кажучи, тестують на мінімальному і максимальному значеннях в межах одного еквівалентного класу. Ці значення можуть бути вхідними чи вихідними діапазонами компоненту програмного забезпечення, також можуть бути внутрішньою реалізацією. Оскільки ці значення є розповсюдженими місцями помилок, що призводять до несправностей програмного забезпечення, тому вони часто використовуються під час тестування.

Додаток

Очікувані вхідні і вихідні значення компоненту програмного забезпечення повинні бути вилучені із специфікації компонента. Значення потім згруповані в набори з ідентифікованими межами. Кожен набір чи розділ містить значення, які очікуються бути опрацьованими компонентом таким самим чином. Розбиття тестових даних на діапазони пояснюється в техніці тестування ‘поділ на еквівалентні класи’. При розробці тестових випадків важливо розглядати як дійсні, так і недійсні розділи. Візуально це можна представити функцією, що написана на мові програмування С:

int safe_add( int a, int b )
{
     int c = a + b ;
     if ( a >= 0 && b >= 0 && c < 0 )
     {
        fprintf ( stderr, "Overflow!\n");
    } 
    if ( a < 0 && b < 0 && c >= 0 )
     {
        fprintf ( stderr, "Underflow!\n");
    } 
    return c;
}

В основі коду розділені вектори [a, b].

Блоки, що повинні бути протестовані, знаходяться над, під та між лініями. З огляду коду випливає три еквівалентні класи. Зазначимо, що є фіксована величина цілого, отже: INT_MIN ≤ x + y ≤ INT_MAX. Також зазначимо, що обидва вхідні параметри a та b є цілими, отже, для них існує впорядкована множина. Коли ми обчислимо вирази: x + y = INT_MAX та INT_MIN = x + y, то ми повертаємо значення, що знаходяться на границі, включно, тобто ці пари (a, b) є дійсними комбінаціями, і для них не відбувається нестача або переповнення. З іншого боку:

x + y = INT_MAX + 1 повертає пари (a, b), які є недійсними комбінаціями і для них відбудеться переповнення.
x + y = INT_MIN - 1 повертає пари (a, b), які є недійсними комбінаціями і для них відбудеться нестача.

Граничні значення (намальовані тільки для випадку переповнення) відображені помаранчевою лінією в правій частині малюнка. Розглянемо інший приклад. Якщо вважати вхідними значеннями місяці року, що представлені у вигляді цілих чисел, то вхідний параметр ‘місяць’ матиме наступні розділи:

-1 0 1 ... 12 13 14

Межа між двома розділами - це місце, де змінюється поведінка програми і вона не є реальним числом. Граничне значення - це мінімальне (або максимальне) значення, яке знаходиться на межі. Число 0 - це максимальне число в першому розділі, число 1 - це мінімальне значення у другому розділі, проте обидва є граничними значеннями. Тестові випадки повинні бути згенеровані таким чином, щоб потрапляти по обидві сторони від межі. Тестові випадки на кожній із сторін межі також повинні мати найменший приріст значення. Наприклад, якщо це ціле число, то це 1. Якщо це десяткове число, то приріст повинен бути 0.01.

На наведеному вище прикладі, граничними значеннями є 0,1 та 12, 13, кожне з яких повинно бути тестовано. Техніка аналізу граничних значень не вимагає тестування недійсних розділів. Розглянемо приклад: нагрівач вмикається, якщо температура становить 10 градусів чи нижче. То в даному прикладі є два розділи (температура <=10, температура >10) і два граничних значення для тестування (температура =10, температура = 11). В тих випадках, коли граничне значення потрапляє в недійсний розділ, то тестовий випадок розробляється, щоб запевнитись, що система коректно реагує на введення недійсного значення. Аналіз граничного значення може використовуватись протягом всього циклу тестування та однаково застосований на всіх етапах тестування.