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.
Контрольні питання
-
Які вимоги можна сформулювати до ідеального критерію?
-
Дайте характеристику достатності критерію.
-
Дайте характеристику повноти критерію.
-
Дайте характеристику надійності критерію.
-
Які класи критеріїв можна виділити?
-
Охарактеризуйте Структурні критерії.
-
Охарактеризуйте Функціональні критерії.
-
Охарактеризуйте Критерії стохастичного тестування.
-
Охарактеризуйте Мутаційні критерії.
-
Що таке «білий ящик» в теорії тестування?
-
Що таке структурний критерій тестування команд?
-
Що таке структурний критерій тестування гілок?
-
Що таке структурний критерій тестування шляхів?
-
Що таке «чорний ящик» в теорії тестування?
-
Охарактеризуйте функціональний критерій Тестування пунктів специфікації
-
Охарактеризуйте функціональний критерій Тестування класів вхідних даних
-
Охарактеризуйте функціональний критерій Тестування правил
-
Тестування класів вихідних даних
-
Охарактеризуйте функціональний критерій Тестування функцій
-
Охарактеризуйте функціональний критерій Комбіновані критерії для програм і специфікацій
-
Дайте визначення стохастичних критеріїв.
-
Що таке Детермінований контроль тестування?
-
Що таке Стохастичний контроль тестування?
-
Які існують критерії стохастичного тестування?
-
Опишіть метод мутаційних критеріїв.
-
Що таке мутація?
-
Що таке програма-мутант?
