Функции предсказания целесообразности

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

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

Пусть P – тестируемая система, S – ее спецификация, T – набор регрессионных тестов для P, а |T| означает число отдельных тестов в T. Пусть М – выборочный метод регрессионного тестирования, используемый для отбора подмножества Tпри тестировании измененной версии P ; М может зависеть от P, S, T, информации об исполнении T на P и других факторов. Через E обозначим набор рассматриваемых М сущностей тестируемой системы. Предполагается, что T и Eнепустые, и что каждый синтаксический элемент P принадлежит, по крайней мере, одной сущности из E. ОтношениеcoversM(t, E) определяется как отношение покрытия, достигаемого методом М для P. Это отношение определено над TxE и справедливо тогда и только тогда, когда выполнение теста t на P приводит к выполнению сущности e как минимум один раз.Значение термина выполнение определено для всех типов сущностей P. Например, если e – функция или модуль P, eвыполняется при вызове этой функции или модуля. Если e – простой оператор, условный оператор, пара определения-использования или другой вид элемента пути в графе выполнения P, e выполняется при выполнении этого элемента пути. Еслиe – переменная P, e выполняется при чтении или записи этой переменной. Если e – тип P, e выполняется при выполнении любой переменной типа e. Если e – макроопределение P, e выполняется при выполнении расширения этогомакроопределения. Если e – сектор P, e выполняется при выполнении всех составляющих его операторов. Соответствующие значения термина выполнение могут быть определены по аналогии для других типов сущностей P.

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

Пусть EC обозначает множество покрытых сущностей:

Обозначение |EC| используется для числа покрытых сущностей. Иногда удобно представить зависимость coversM(t, E) в виде бинарной матрицы C, строки которой представляют элементы T, а столбцы – элементы E. При этом элемент Ci,j матрицы Cопределяется следующим образом:

Ci, j = 1, если coversМ(i, j)

Ci, j = 0, иначе

Степень накопленного покрытия, обеспечиваемого T, то есть общее число единиц в матрице C, обозначается CC:

Отметим, что если ограничиться включением в C только столбцов, соответствующих покрытым сущностям EC, накопленное покрытие CC останется неизменным. В частности, для всех непокрытых сущностей u Ci,u равно нулю для всех тестов i (так какcoversM(i, u) ложно для всех таких случаев). Следовательно, ограничение на EC при вычислении суммы, определяющей CC, приводит только к исключению слагаемых, равных нулю.

Пусть TM – подмножество T, выбранное М для P, и пусть |TM| обозначает его мощность, тогда . Пусть sM – удельная стоимость отбора одного теста для TM при применении Мк P, и пусть r – удельная стоимость выполнения одного теста из T на P и проверки его результата. М целесообразно использовать в качестве метода отбора тестов тогда и только тогда, когда:

sM|TM| r(|T| — |TM|), то есть стоимость анализа, необходимого для отбора TM, должна быть меньше стоимости прогона невыбранных тестов, .

Оценка ожидаемого числа тестов, требующих повторного запуска, обозначается NM и вычисляется следующим образом:

Nm = CC/|E|

Использование этой прогнозирующей функции предполагается только в случаях, когда цель выборочной стратегии регрессионного тестирования состоит в повторном выполнении всех тестов, затронутых изменениями, то есть используется безопасный методотбора тестов. Несколько усовершенствованный вариант оценки NM, использующий в качестве пространства сущностей EC вместоE:

Ncm = CC/|Ec|

Прогнозирующая функция для доли набора тестов, требующей повторного выполнения, то есть для |TM| / |T|, обозначается :

Прогнозирующая функция полагается непосредственно на информацию о покрытии. Главные предпосылки, лежащие в основе применения прогнозирующей функции, таковы:

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

Точность прогнозирующей функции на практике может значительно меняться от версии к версии. Проблема точности может оказаться достаточно серьезной, тем не менее, поскольку прогнозирующая функция используется для долговременного предсказания поведения метода на протяжении нескольких версий, применение средних значений считается допустимым.Отношение coversM(t, e) в ходе сопровождения изменяется очень слабо. По этой причине информация, полученная в результате анализа единственной версии, может оказаться достаточной для управления отбором тестов на протяжении нескольких последовательных новых версий.

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

Например, в рис. 12.1 прогнозирующая функция может быть подсчитана как отношение общего количества звездочек в таблице к количеству строк таблицы, т.е. числу покрываемых сущностей. Эта величина составляет 42/11=3.8, т.е. безопасный метод будет отбирать в среднем около 4 тестов. Сведения о методике предсказания суммированы в Табл. 13.3.

Таблица 13.4. Результаты применения методики предсказания
Характеристика Изменение в результате применения методики
Время работы метода отбора в случае, если выборочное тестирование целесообразно Увеличивается незначительно
Время работы метода отбора в случае, если выборочное тестирование нецелесообразно Уменьшается до пренебрежимо малой величины
Снижение точности предсказания от версии к версии Зависит от объема изменений
Результаты применения методики на практике Положительные (ошибка в 0.8%)

Порождение новых тестов

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

Основой большинства программных продуктов для управляющих применений, находящихся в промышленном использовании, является цикл обработки событий. Сценарий работы с системой, построенной по такой архитектуре, состоит из последовательности транзакций, управление после обработки каждой транзакции вновь передается циклу обработки событий. Выполнение транзакции приводит к изменению состояния программы; в результате некоторых транзакций происходит выход изцикла и завершение работы программы. Тесты для таких программ представляют собой последовательность транзакций.

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

Обозначим тестируемую программу P, а множество ее тестов T = {t1, t2, … , tn}. Будем считать, что состояние тестируемой программы s определяется совокупностью значений некоторого подмножества глобальных и локальных переменных. При создании новых тестов будем рассматривать состояния программы перед запуском теста ( s0 ) и после его окончания ( sj ). Информацию об этих состояниях необходимо собирать для каждого теста по результатам запуска на предыдущей версии продукта.Методика порождения новых тестов на основе анализа подозрительных состояний сводится к описанной ниже последовательности действий.

1. Вычисление списка глобальных и локальных переменных, определяющих состояние программы s.

2. Сбор информации (на основе анализа профиля программы, полученного на предыдущей версии продукта i-1, для каждого существующего теста tj ) о состояниях программы перед запуском теста и после его окончания (т.е. s0 и sj ). Множество таких состояний обозначается

3. Выполнение на текущей версии продукта i новых и выбранных регрессионных тестов из множества T’. По аналогии с Si–1вычисляется множество Si, которое сохраняется под управлением системы контроля версий.

4. Оценка подозрительных с точки зрения наличия ошибок множества новых по сравнению с предыдущими версиями состоянийNi в соответствии со следующей формулой: Ni = Si \ Si — 1

5. Анализ состояний множества Ni, в которых дальнейшая работа продукта невозможна в соответствии со спецификацией. Предмет анализа — определить создаются ли эти состояния в результате выполнения тестов, проверяющих нештатные режимы работы продукта, или каких-либо других тестов. В последнем случае фиксируется ошибка.

6. Исключение нештатных состояний из множества Ni.

7. Переход к шагу 10, если новых состояний, допускающих продолжение выполнения программы, не обнаружено, т.е. .

8. Для каждого состояния множества Ni вычисление вектора отличия от исходного состояния s0, т.е. множества переменных, измененных по сравнению с s0.

9. Модификация множества измененных строк исходного кода P на основе информации об измененных переменных и использование какой-либо методики отбора тестов для выборочного регрессионного тестирования.

10. Повторное выполнение шагов 3-9 до достижения состояния либо до истечения времени, отведенного нарегрессионное тестирование. Использование методов разбиения на классы эквивалентности для досрочного принятия решения о прекращении цикла тестирования, если ни один из тестов, созданных на очередном этапе, не принадлежит к новому классу эквивалентности.

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

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

Прогноз в Excel


Похожие статьи.

Понравилась статья? Поделиться с друзьями: