Материал: 03

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

4 Стохастичні критерії (клас III)

Стохастичне тестування застосовується при тестуванні складних програмних комплексів - коли набір детермінованих тестів (X, Y) має величезну потужність. У випадках, коли подібний набір неможливо розробити й виконати на фазі тестування, можна застосувати наступну методику.

  • Розробити програми - імітатори випадкових послідовностей вхідних сигналів {x}.

  • Обчислити незалежним способом значення {y} для відповідних вхідних сигналів {x} й одержати тестовий набір (X,Y).

  • Протестувати додаток на тестовому наборі (X,Y), використовуючи два способи контролю результатів:

Детермінований контроль - перевірка відповідності обчисленого значення значенню y, отриманому в результаті прогону тесту на наборі {x} - випадкової послідовності вхідних сигналів, що згенеровані імітатором.

Стохастичний контроль - перевірка відповідності безлічі значень {yв}, отриманого в результаті прогону тестів на наборі вхідних значень {x}, заздалегідь відомому розподілу результатів F(Y).

У цьому випадку безліч Y невідома (її обчислення неможливе), але відомий закон розподілу даної безлічі.

Критерії стохастичного тестування

  • Cтатичні методи закінчення тестування - стохастичні методи прийняття рішень про збіг гіпотез про розподіл випадкових величин. До них належать широко відомі: метод Стьюдента ( St ), метод Хі-квадрат ( ) і т.п.

  • Метод оцінки швидкості виявлення помилок - заснований на моделі швидкості виявлення помилок, відповідно до якої тестування припиняється, якщо оцінений інтервал часу між поточною помилкою й наступної занадто великий для фази тестування додатка.

Рис. 3.1. Залежність швидкості виявлення помилок від часу виявлення

При формалізації моделі швидкості виявлення помилок (мал. 3.1) використалися наступні позначення:

N - вихідне число помилок у програмному комплексі перед тестуванням,

C - константа зниження швидкості виявлення помилок за рахунок знаходження чергової помилки,

t1, t2,... tn - кортеж зростаючих інтервалів виявлення послідовності з n помилок,

T - час виявлення n помилок.

Якщо допустити, що за час T виявлено n помилок, то справедливо співвідношення (1), яке стверджує, що добуток швидкості виявлення i помилки й часу виявлення i помилки є 1 по визначенню:

(N – i + 1) * C * ti = 1 (1)

У цьому припущенні справедливе співвідношення (2) для n помилок:

N*C*t1 + (N - 1) * C * t2 + … (N – n + 1) * c * tn = n (2)

N * C * (t1 + t2 + … + tn) – C * Σ(i-1)ti = n

NCT – C * Σ(i - 1)ti = n

Якщо з (1) визначити ti і просумувати від 1 до n, то прийдемо до співвідношення (3) для часу T виявлення n помилок

Σ1 / (N – i + 1) = TC (3)

Якщо з (2) виразити C, приходимо до співвідношення (4):

C = n / (NT - Σ(i - 1)ti) (4)

Нарешті, підставляючи C в (3), одержуємо остаточне співвідношення (5), зручне для оцінок:

Σ1 / (N – i + 1) = n / (N – 1/T * Σ(i - 1)ti)) (5)

Якщо оцінити величину N приблизно, використовуючи відомі методи оцінки числа помилок у програмі або дані про щільність помилок для проектів розглянутого класу з історичної бази даних проектів, і, крім того, використати поточні дані про інтервали між помилками t1, t2 ... tn, отримані на фазі тестування, тj, підставляючи ці дані в (5), можна одержати оцінку tn+1 – тимчасового інтервалу необхідного для знаходження й виправлення чергової помилки (майбутньої помилки).

Якщо tn+1>Td - припустимого часу тестування проекту, то тестування закінчуємо, у противному випадку продовжуємо пошук помилок.

Спостерігаючи послідовність інтервалів помилок t1, t2 … tn, і час, витрачений на виявлення n помилок T = Σ ti, можна прогнозувати інтервал часу до наступної помилки й уточнювати відповідно до (4) величину C.

5 Мутаційний критерій (клас IV).

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

Підхід базується на наступних поняттях:

Мутації - дрібні помилки в програмі.

Мутанти - програми, що відрізняються друг від друга мутаціями .

Метод мутаційного тестування - у розроблювальну програму P вносять мутації, тобто штучно створюють програми-мутанти P1, P2... Потім програма P і її мутанти тестуються на тому самому наборі тестів (X, Y).

Якщо на наборі (X, Y) підтверджується правильність програми P й, крім того, виявляються всі внесені в програми-мутанти помилки, то набір тестів (X, Y) відповідає мутаційному критерію, а тестована програма оголошується правильною.

Якщо деякі мутанти не виявили всіх мутацій, то треба розширювати набір тестів (X, Y) і продовжувати тестування.

Приклад застосування мутаційного критерію

Тестована програма P наведена вприкладі 3.2. Для неї створюється дві програми-мутанта P1 й P2.

В P1 змінене початкове значення змінної z з 1 на 2 ( приклад 3.3).

В P2 змінене початкове значення змінної i з 1 на 0 і граничне значення індексу циклу з n на n-1 (приклад 3.4).

При запуску тестів (X, Y) = {(x=2, n=3, y=8),(x=999, n=1, y=999), (x=0, n=100, y=0)} виявляються всі помилки в програмах-мутантах і помилка в основній програмі, де в умові циклу замість n стоїьб n-1:

// Метод обчислює ненегативну ступінь n числа x

double PowerNonNeg(double x, int n)

{

double z=1;

int i;

if (n>0)

{

for (i=1;n-1>=i;i++)

{

z = z*x;

}

}

else printf("Помилка ! Ступінь числа n має бути більше 0.\n");

return z;

}

3.2. Основна програма P

Змінене початкове значення змінної z у мутанті Р1 ( z = 2 ):

// Метод обчислює ненегативну ступінь n числа x

double PowerMutant1(double x, int n)

{

double z=2;

int i;

if (n>0)

{

for (i=1;n>=i;i++)

{

z = z*x;

}

}

else printf("Помилка ! Ступінь числа n має бути більше 0.\n");

return z;

}

3.3. Програма мутант P1.

Змінене початкове значення змінної i і границі циклу в мутанті P2 ( i = 0; n - 1 ):

// Метод обчислює ненегативну ступінь n числа x

double PowerMutant2(double x, int n)

{

double z=1;

int i;

if (n>0)

{

for (i=0;n-1>=i;i++)

{

z = z*x;

}

}

else printf("Помилка ! Ступінь числа n має бути більше 0.\n");

return z;

}

3.4. Програма-мутант P2.

Контрольні питання

  1. Які вимоги можна сформулювати до ідеального критерію?

  2. Дайте характеристику достатності критерію.

  3. Дайте характеристику повноти критерію.

  4. Дайте характеристику надійності критерію.

  5. Які класи критеріїв можна виділити?

  6. Охарактеризуйте Структурні критерії.

  7. Охарактеризуйте Функціональні критерії.

  8. Охарактеризуйте Критерії стохастичного тестування.

  9. Охарактеризуйте Мутаційні критерії.

  10. Що таке «білий ящик» в теорії тестування?

  11. Що таке структурний критерій тестування команд?

  12. Що таке структурний критерій тестування гілок?

  13. Що таке структурний критерій тестування шляхів?

  14. Що таке «чорний ящик» в теорії тестування?

  15. Охарактеризуйте функціональний критерій Тестування пунктів специфікації

  16. Охарактеризуйте функціональний критерій Тестування класів вхідних даних

  17. Охарактеризуйте функціональний критерій Тестування правил

  18. Тестування класів вихідних даних

  19. Охарактеризуйте функціональний критерій Тестування функцій

  20. Охарактеризуйте функціональний критерій Комбіновані критерії для програм і специфікацій

  21. Дайте визначення стохастичних критеріїв.

  22. Що таке Детермінований контроль тестування?

  23. Що таке Стохастичний контроль тестування?

  24. Які існують критерії стохастичного тестування?

  25. Опишіть метод мутаційних критеріїв.

  26. Що таке мутація?

  27. Що таке програма-мутант?

10

Источник: https://studfile.net/preview/14533242/