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

Разновидности тестирования: системное и регрессионное тестирование

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

Регрессионное тестирование

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

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

Пример регрессионного тестирования

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

В свою очередь тестировщик, проверяя внесенные программистом изменения, должен:

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

Например, при тестировании класса TСommandQueue запускаем тесты ( пример 7.2):

// Тест проверяет, создается ли объект
// типа TCommand и  добавляется ли он 
// в конец очереди. 
private void TCommandQueueTest1()
// Тест проверяет добавление команд
// в очередь на указанную позицию. 
// Также проверяется правильность 
// удаления команд из очереди.  
private void TCommandQueueTest2()
7.4. Набор тестов класса TСommandQueue
// Тест проверяет, создается ли объект
// типа TCommand и добавляется ли он
// в конец очереди. 
void TCommandQueueTest1()
// Тест проверяет добавление команд
// в очередь на указанную позицию. 
// Также проверяется правильность 
// удаления команд из очереди.  
void TCommandQueueTest2()
7.4.1. Набор тестов класса TСommandQueue (C++)

При этом первый тест выполняется успешно, а второй нет, т.е. команда добавляется в конец очереди команд успешно, а на указанную позицию - нет. Разработчик анализирует код, который реализует тестируемую функциональность:

...

if ((Position<-1)&&
    (Position<=this.Items.Count))
{
  this.Items.Insert(Position, Command);
}
else
{
  if (Position==-1)
  {
    this.Items.Add(Command);
  }
}
7.5. Фрагмент кода с зафиксированным при тестировании дефектом
if ((Position <-1)&&(Position<=this.Items.Count))
{
  this.Items.Insert(Position, Command);
}
else
{
  if (Position==-1)
  {
    this.Items.Add(Command);
  }
}
7.5.1. Фрагмент кода с зафиксированным при тестировании дефектом

Анализ показывает, что ошибка заключается в использовании неверного знака сравнения в первой строке фрагмента. Далее программист исправляет ошибку, например следующим образом:

...
if ((Position>=-1)&&
    (Position<=this.Items.Count))
{
  this.Items.Insert(Position, Command);
}
else
{
  if (Position==-1)
  {
    this.Items.Add(Command);
  }
}
...
7.6. Исправленный фрагмент кода
if ((Position>=-1)&&
    (Position<=this.Items.Count))
{
  this.Items.Insert(Position, Command);
}
else
{
  if (Position==-1)
  {
    this.Items.Add(Command);
  }
}
7.6.1. Исправленный фрагмент кода

Для проверки скорректированного кода хочется пропустить только тест TCommandQueueTest2. Можно убедиться, что тест TCommandQueueTest2 будет выполняться успешно. Однако одной этой проверки недостаточно. Если мы повторим пропуск двух тестов, то при запуске первого теста, TCommandQueueTest1, будет обнаружен новый дефект. Повторный анализ кода показывает, что ветка else не выполняется. Таким образом, исправление в одном месте привело к ошибке в другом, что демонстрирует необходимость проведения полного перетестирования. Однако повторное перетестирование требует значительных усилий и времени. Возникает задача – отобрать сокращенный набор тестов из исходного набора (может быть, пополнив его рядом дополнительных - вновь разработанных - тестов), которого, тем не менее, будет достаточно для исчерпывающей проверки функциональности в соответствии с выбранным критерием. Организация повторного тестирования в условиях сокращения ресурсов, необходимых для обеспечения заданного уровня качества продукта, обеспечивается регрессионным тестированием.

< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Федор Антонов
Федор Антонов

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

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

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

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

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