Опубликован: 05.03.2005 | Доступ: свободный | Студентов: 14325 / 1960 | Оценка: 4.11 / 3.63 | Длительность: 13:20:00
ISBN: 978-5-9556-0027-7
Специальности: Тестировщик
Лекция 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 >
Олександр Савенко
Олександр Савенко

В дополнительных материалах есть руководство по подготовке класса. Там есть инструкция по инсталяции, но где взять сам инсталятор?

Анастасия Соляник
Анастасия Соляник
Константин Олейников
Константин Олейников
Россия
Екатерина Бушуева
Екатерина Бушуева
Россия, г. Екатеринбург