Опубликован: 05.03.2005 | Уровень: специалист | Доступ: платный
Лекция 3:

Критерии выбора тестов

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >

Мутационный критерий (класс 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
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;
        }
    }
    else Console.WriteLine(
       "Ошибка ! Степень числа n должна 
        быть больше 0.");
    return z;
}
3.2. Основная программа P
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.1. Основная программа P

Измененное начальное значение переменной z в мутанте Р1 ( z=2 ):

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

Измененное начальное значение переменной i и границы цикла в мутанте P2 ( i=0;n-1 ):

//  Метод вычисляет неотрицательную
//  степень n числа x
static public double PowerMutant2(
                         double x, int n)
{
double z=1; 
    if (n>0)
    {
        for (int i=0;n-1>=i;i++)
        {
            z = z*x;
        }
    }
    else Console.WriteLine(
      "Ошибка ! Степень числа n должна 
       быть больше 0");
    return z;
}
3.4. Программа-мутант P2.
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.1. Программа-мутант P2.
< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Сергей Чурбанов
Сергей Чурбанов
А И
А И
Беларусь
Sergey Shtemberg
Sergey Shtemberg
Беларусь, Minsk