Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


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

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

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

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

2. Попробовать воспроизвести ошибку каким-нибудь другим способом.

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

Например, при тестировании класса TOommandQueue запускают следующий набор тестов:

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

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

if ((Position < -1)&&(Position<=this.Items.Count)) {
         this.Items.Insert(Position, Command);
}
else {
         if (Position==-1) {
            this.Items.Add(Command);
         }
}
...

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

...
if ((Position >= -1)&&(Position<=this.Items.Count)) {
         this.Items.Insert(Position, Command);
}
else {
         if (Position==-1) {
            this.Items.Add(Command);
         }
}
...

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

 



<< ПредыдущаяОглавлениеСледующая >>