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

Регрессионное тестирование: цели и задачи, условия применения, классификация тестов и методов отбора

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >

Возможности повторного использования тестов

К изменению существующих тестов могут привести три следующих вида деятельности программистов:

  • Создание новых тестов.
  • Выполнение тестов.
  • Изменение кода.

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

В соответствии с приведенными выше рассуждениями можно выделить четыре уровня повторного использования теста:

  • Уровень 1. Тест не допускает повторного использования. Требуется создание нового набора тестов (например, путем удаления или изменения этого теста).
  • Уровень 2. Повторное использование возможно только входных данных теста. Во многих случаях цель тестирования состоит в активизации некоторых покрываемых элементов программы. Если из траектории существующего теста видно, что элементы программы, подлежащие покрытию, задействуются до измененных команд, входные данные теста могут быть использованы повторно для покрытия этих элементов. В результате изменений в программе и/или техническом задании новая траектория и выходные данные теста могут отличаться от результатов предыдущего выполнения. Таким образом, тесты первого уровня должны быть запущены повторно для получения новых выходных данных и траекторий.
  • Уровень 3. Возможно повторное использование как входных, так и выходных данных теста. Очевидно, что на этом уровне обычно располагаются функциональные тесты. Если модуль подвергся только изменению кода с сохранением функциональности, возможно повторное использование существующих функциональных тестов для проверки правильности реализации. Поскольку траектория может измениться, а выходные данные - подвергнуться воздействию со стороны изменений кода, такие тесты должны быть запущены повторно, но ожидается получение идентичных результатов.
  • Уровень 4. Наивысший уровень повторного использования теста, предусматривающий повторное использование входных данных, выходных данных и траектории теста. В этом случае на траектории теста не изменяется ни один оператор. Следовательно, в повторном запуске этих тестов необходимости нет, так как выходные данные и траектория останутся неизменными.

Пример регрессионного тестирования функции решения квадратного уравнения.

Код этой функции приведен на пример 11.1. Входными параметрами являются коэффициенты квадратного уравнения A, B и C, а также флаг Print, ненулевое значение которого указывает, что полученное решение необходимо вывести на экран. К выходным параметрам относятся X1 и X2, предназначенные для хранения корней уравнения, и возвращаемое значение функции - дискриминант уравнения. В исходном виде функция содержит дефект, в результате чего уравнения с отрицательным дискриминантом порождают ошибку времени выполнения. В новой версии функции дефект должен быть исправлен; кроме того, необходимо реализовать запрос пользователя на изменение формата вывода решения. Код новой версии функции Equation приводится на пример 11.2.

Существующие тесты для функции Equation приведены в таблица 11.2. Входные данные тестов представляют собой совокупность значений Print, A, B и C, подаваемых на вход функции. Выходными данными для теста являются значения X1 и X2, возвращаемое значение функции, а также строка, выводимая на экран; в таблица 11.2 приведены ожидаемые значения выходных данных. Кроме того, для каждого теста вычисляется траектория его прохождения по коду.

Таблица 11.2. Входные и выходные данные тестов
Тест Входные данные Ожидаемые выходные данные
A B C Print X1 X2 Возвращаемое значение Выводимая строка
1 1 1 -6 1 2 -3 25 Solution: X1 = 2, X2 = -3
2 2 -3 5 1 0.75 5.567764 -31 Solution: X1 = 0.75+5.567764i, X2 = 0.75-5.567764I
3 1 2 0 0 0 -2 4
4 1 2 1 0 -1 -1 0
5 1 2 2 0 -1 2 -4
double Equation(int Print, float A, float B, float C,
                float& X1, float& X2)
{
 float D = B * B - 4.0 * A * C;
 if (D >= 0)
 {
  X1 = (-B + sqrt(D)) / 2.0 / A;
  X2 = (-B - sqrt(D)) / 2.0 / A;
 }
 else
 {
  X1 = -B / 2.0 / A;
  X2 = sqrt(D) / 2.0 / A;
 }
 if (Print)
  printf("Solution: %f, %f\n", X1, X2);
 return D;
}
11.1. Функция Equation - исходная версия.
double Equation(int Print, float A, float B, float C,
                float& X1, float& X2)
{
 float D = B * B - 4.0 * A * C;
 if (D >= 0)
 {
  X1 = (-B + sqrt(D)) / 2.0 / A;
  X2 = (-B - sqrt(D)) / 2.0 / A;
 }
 else
 {
  X1 = -B / 2.0 / A;
  X2 = sqrt(D);
 }
 if (Print)
  printf("Solution: %f, %f\n", X1, X2);
 return D;
}
11.1.1. Функция Equation - исходная версия.
double Equation(int Print, float A, float B, 
       float C, float& X1, float& X2)
{
 float D = B * B - 4.0 * A * C;

 if (D >= 0)
 {
  X1 = (-B + sqrt(D)) / 2.0 / A;
  X2 = (-B - sqrt(D)) / 2.0 / A;
 }
 else
 {
  X1 = -B / 2.0 / A;
  X2 = sqrt(-D);
 }
 if (Print)
 {
  if (D >= 0)
   printf("Solution: X1 = %f, X2 = %f\n", X1, X2);
  else
   printf("Solution: X1 = %f+%fi, X2 = %f-%fi\n", 
           X1, X2, X1, X2);
 }

 return D;
}
11.2. Функция Equation - измененная версия.
double Equation(int Print, float A, float B,
       float C, float& X1, float& X2)
{
 float D = B * B - 4.0 * A * C;

 if (D >= 0)
 {
  X1 = (-B + sqrt(D)) / 2.0 / A;
  X2 = (-B - sqrt(D)) / 2.0 / A;
 }
 else
 {
  X1 = -B / 2.0 / A;
  X2 = sqrt(-D);
 }
 if (Print)
 {
  if (D >= 0)
   printf("Solution: X1 = %f, X2 = %f\n", X1, X2);
  else
   printf("Solution: X1 = %f+%fi, X2 = %f-%fi\n", 
           X1, X2, X1, X2);
 }

 return D;
}
11.2.1. Функция Equation - измененная версия.

При изменении функции Equation от пример 11.1 к пример 11.2 меняется формат выводимых на экран данных, так что тесты 1 и 2, проверяющие вывод на экран, могут быть повторно использованы только на уровне 2. Тесты 3, 4 и 5 могут быть использованы на уровне 3 или 4 в зависимости от результатов анализа их траектории.

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >
Федор Антонов
Федор Антонов

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

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

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

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

Сергей Чурбанов
Сергей Чурбанов
Тимофей Миргород
Тимофей Миргород
Беларусь, Минск
Иван Сердюковtwo
Иван Сердюковtwo
Россия, Город Урюпинск