Читать в оригинале

<< Предыдущая Оглавление Следующая >>


3.2.4. Мутационный критерий (класс IV)

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

Подход базируется на следующих понятиях:

Мутации - мелкие ошибки в программе.

Мутанты - программы, отличающиеся друг от друга мутациями. Содержание метода мутационного тестирования состоит в следующем. В разрабатываемую программу P вносят мутации, т.е. искусственно создают программы-мутанты P1, P2... Затем программа P и ее мутанты тестируются на одном и том же наборе тестов (X,Y).

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

Если некоторые мутанты не проявили всех своих мутаций, то надо расширять набор тестов (X,Y) и продолжать тестирование.

Пример применения мутационного критерия

Рассмотрим следующую программу P.

// Метод вычисляет неотрицательную степень n числа x
static public double PowerNonNeg(double x, int n)                    // Р
{
         double z=1;
         if (n>0) {
            for (int i=1;n-1>=i;i++) {
                        z = z*x;
            } // for
         } //if
         else
   Console.WriteLine("Ошибка! Степень числа n должна быть больше 0");
return z;
}

Для нее создается две программы-мутанта P1 и P2. В P1 изменено начальное значение переменной z с 1 на 2.

// Метод вычисляет неотрицательную степень n числа x
static public double PowerMutant1(double x, int n)                    // Р1
{
         double z=2;
         if (n>0) {
            for (int i=1;n>=i;i++) {
                        z = z*x;
            }
         }
         else
            Console.WriteLine("Ошибка ! Степень числа n должна быть больше 0.");
         return z;
}

Измененное начальное значение переменной z в мутанте Р1 выделено в тексте программы светлым тоном.

В P2 изменено начальное значение переменной i с 1 на 0 и граничное значение индекса цикла с n на n-1.

// Метод вычисляет неотрицательную степень n числа x
static public double PowerMutant2(double x, int n)                    // Р2
{
         double z=1;
         if (n>0) {
            for (int i=0;n-1>=i;i++) {
                        z = z*x;
            }
         }
else Console.WriteLine("Ошибка ! Степень числа n должна быть больше 0");
return z;
}

Измененное начальное значение переменной i и границы цикла в мутанте P2 также выделены в тексте программы.

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

 



<< Предыдущая Оглавление Следующая >>