Основы тестирования программного обеспечения

         

Методы минимизации


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


Рис. 12.1.  Матрица покрытия тестируемого кода

Обоснование применения методов минимизации состоит в следующем:

  • Корреляция между эффективностью обнаружения ошибок и покрытием кода выше, чем между эффективностью обнаружения ошибок и размером множества тестов. Неэффективное тестирование, например многочасовое выполнение тестов, не увеличивающих покрытие кода, может привести к ошибочному заключению о корректности программы.
  • Независимо от способа порождения исходного набора тестов, его минимальные подмножества имеют преимущество в размере и эффективности, так как состоят из меньшего количества тестов, не ослабляя при этом способности к обнаружению ошибок или снижая ее незначительно.
  • Вообще говоря, сокращенный набор тестов, отобранный при минимизации, может обнаруживать ошибки, не обнаруживаемые сокращенным набором того же размера, выбранным случайным или каким-либо другим способом. Такое преимущество минимизации перед случайными методами в эффективности является закономерным. Однако из всех детерминированных методов минимизация приводит к созданию наименее эффективных наборов тестов, хотя и самых маленьких. В частности, безопасные методы эффективнее методов минимизации, хотя и намного дороже.

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

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


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

Многие критерии покрытия кода фактически не требуют выбора минимального множества тестов. В некотором смысле, о безопасных стратегиях и стратегиях минимизации можно думать как о находящихся на двух полюсах множества стратегий. На практике, использование "почти минимальных" наборов тестов может быть удовлетворительным. Стремление к сокращению объема набора тестов основано на интуитивном предположении, что неоднократное повторное выполнение кода в ходе модульного тестирования "расточительно". Однако усилия, требуемые для минимизации набора тестов, могут быть существенны, и, следовательно, могут не оправдывать затрат. Отметим, что большинство стратегий выборочного регрессионного тестирования, описанных в литературе, в общем-то, не зависит от критерия покрытия, возможно, использовавшегося при создании исходного набора тестов. Инженеры, занимающиеся регрессионным тестированием, часто не имеют информации о том, как разрабатывался исходный набор тестов.

Обнаружение ошибок важно для приложений, где стоимость выполнения тестов очень высока, в то время как стоимость пропуска ошибок считается незначительной. В этих условиях использование методов минимизации целесообразно, поскольку они связаны с отбором небольшого количества тестов. Примером применения методов минимизации служит метод, выбирающий из T не менее одного теста для каждого оператора программы, добавленного или измененного при создании P'. В таблице на Рис. 12.1 для случая регрессионного тестирования функции Equation данный метод ограничится отбором одного теста - теста 2, так как этот тест покрывает обе измененные строки.


Содержание раздела