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

Основные понятия тестирования

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

Пример обратного выполнения для программы вычисления степени числа x

В программе на Пример 2.4 фиксируются значения всех переменных после выполнения каждого оператора.

//  Метод вычисляет неотрицательную
//  степень n числа x
static public double PowerNonNeg(double x,
                                 int n)
{
double z=1; 
Console.WriteLine("x={0} z={1} n={2}",
                  x,z,n);
  if (n>0)
  {
  Console.WriteLine("x={0} z={1} n={2}",
                    x,z,n);
    for (int i=1;n>=i;i++)
    {
      z = z*x;
      Console.WriteLine(
           "x={0} z={1} n={2}" +
           " i={3}",x,z,n,i);
    }
  }
  else Console.WriteLine(
         "Ошибка ! Степень" +
         " числа n должна быть больше 0.");
  return z;
}
2.4. Исходный код с фиксацией результатов выполнения операторов
double PowerNonNeg(double x, int n)
{
  double z=1;
  int i;
  printf("x=%f z=%f n=%d\n",x,z,n);
  if (n>0)
  {
    printf("x=%f z=%f n=%d\n",x,z,n);
    for (i=1;n>=i;i++)
    {
      z = z*x;
      printf("x=%f z=%f n=%d i=%d\n",
             x,z,n,i);
    }
  }
  else printf(
     "Ошибка ! Степень "
     "числа n должна быть больше 0.\n");
  return z;
}
2.4.1. Исходный код с фиксацией результатов выполнения операторов

Зная структуру управляющего графа программы и имея значения всех переменных после выполнения каждого оператора, можно осуществить обратное выполнение (например, в уме), подставляя значения переменных в операторы и двигаясь снизу вверх, начиная с последнего.

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

Тестирование заканчивается, когда выполнилось или "прошло" (pass) успешно достаточное количество тестов в соответствии с выбранным критерием тестирования.

Тестирование – это:

  • Процесс выполнения ПО системы или компонента в условиях анализа или записи получаемых результатов с целью проверки (оценки) некоторых свойств тестируемого объекта.

    The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component [ 9 ] .

  • Процесс анализа пункта требований к ПО с целью фиксации различий между существующим состоянием ПО и требуемым (что свидетельствует о проявлении ошибки) при экспериментальной проверке соответствующего пункта требований.

    The process of analyzing a software item to detect the differences between existing and required conditions (that is, bugs) and to evaluate features of software items [[IEEE Std.610-12.1990], [ 9 ] .

  • Контролируемое выполнение программы на конечном множестве тестовых данных и анализ результатов этого выполнения для поиска ошибок [IEEE Std 829-1983].

Сквозной пример тестирования

Возьмем несколько отличающуюся от Пример 2.4 программу:

//  Метод вычисляет степень n числа x
static public double Power(int x, int n)
{
  int z=1; 
  for (int i=1;n>=i;i++)
  {
    z = z*x;
  }
  return z;
}

[STAThread]
static void Main(string[] args)
{
  int x;
  int n;
  try
  {
    Console.WriteLine("Enter x:");
    x=Convert.ToInt32(Console.ReadLine());
    if ((x>=0) & (x<=999))
    {
      Console.WriteLine("Enter n:");
      n=Convert.ToInt32(Console.ReadLine());
      if ((n>=1) & (n<=100))
      {
        Console.WriteLine("The power n" + " of x is {0}", Power(x,n));
        Console.ReadLine();
      }
      else
      {
        Console.WriteLine("Error : n " + "must be in [1..100]");
        Console.ReadLine();
      }
    }
    else
    {
      Console.WriteLine("Error : x " + "must be in [0..999]");
      Console.ReadLine();
    }
  }
  catch (Exception e)
  {
    Console.WriteLine("Error : Please enter " + "a numeric argument.");
    Console.ReadLine();
  }
}
Пример 2.5. Другой пример вычисления степени числа
#include <stdio.h>

double Power(int x, int n)
{
  int z=1;
  int i; 
  for (i=1;n>=i;i++)
  {
    z = z*x;
  }
  return z;
}

void main(void)
{
  int x;
  int n;
  
  printf("Enter x:");
  if(scanf("%d",&x))
  {
    if ((x>=0) & (x<=999))
    {
      printf("Enter n:");
      if(scanf("%d",&n)) {
        if ((n>=1) & (n<=100))
        {
          printf("The power n of x is %f\n", Power(x,n));
        }
        else
        {
          printf("Error : n must be in [1..100]\n");
        }
      }
      else
      {
        printf("Error : Please enter a numeric argument\n");
      }
    }
    else
    {
      printf("Error : x must be in [0..999]\n");
    }
  }
  else
  {
    printf("Error : Please enter a numeric argument\n");
  }
}
2.5.1. Другой пример вычисления степени числа

Для приведенной программы, вычисляющей степень числа (Пример 2.5), воспроизведем последовательность действий, необходимых для тестирования.

Спецификация программы

На вход программа принимает два параметра: x - число, n – степень. Результат вычисления выводится на консоль.

Значения числа и степени должны быть целыми.

Значения числа, возводимого в степень, должны лежать в диапазоне – [0..999].

Значения степени должны лежать в диапазоне – [1..100].

Если числа, подаваемые на вход, лежат за пределами указанных диапазонов, то должно выдаваться сообщение об ошибке.

Разработка тестов

Определим области эквивалентности входных параметров.

Для x – числа, возводимого в степень, определим классы возможных значений:

  1. x < 0 (ошибочное)
  2. x > 999 (ошибочное)
  3. x - не число (ошибочное)
  4. 0 <= x <= 999 (корректное)

    Для n – степени числа:

  5. n < 1 (ошибочное)
  6. n > 100 (ошибочное)
  7. n - не число (ошибочное)
  8. 1 <= n <= 100 (корректное)

Анализ тестовых случаев

  1. Входные значения: (x = 2, n = 3) (покрывают классы 4, 8).

    Ожидаемый результат: The power n of x is 8.

  2. Входные значения: {(x = -1, n = 2),(x = 1000, n = 5)} (покрывают классы 1, 2).

    Ожидаемый результат: Error : x must be in [0..999].

  3. Входные значения: {(x = 100, n = 0),(x = 100, n = 200)} (покрывают классы 5,6).

    Ожидаемый результат: Error : n must be in [1..100].

  4. Входные значения: (x = ADS n = ASD) (покрывают классы эквивалентности 3, 7).

    Ожидаемый результат: Error : Please enter a numeric argument.

  5. Проверка на граничные значения:
    1. Входные значения: (x = 999, n = 1).

      Ожидаемый результат: The power n of x is 999.

    2. Входные значения: (x = 0, n = 100).

      Ожидаемый результат: The power n of x is 0.

Выполнение тестовых случаев

Запустим программу с заданными значениями аргументов.

Оценка результатов выполнения программы на тестах

В процессе тестирования Оракул последовательно получает элементы множества (X,Y) и соответствующие им результаты вычислений . В процессе тестирования производится оценка результатов выполнения путем сравнения получаемого результата с ожидаемым.

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >
Федор Антонов
Федор Антонов

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

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

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

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

Сергей Чурбанов
Сергей Чурбанов
Валерий Слиж
Валерий Слиж
Беларусь
Андрей Морозов
Андрей Морозов
Россия, Минск