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

Регрессионное тестирование: методики, не связанные с отбором тестов и методики порождения тестов

< Лекция 12 || Лекция 13: 12345 || Лекция 14 >
Аннотация: Рассматривается метод уменьшения объема тестируемой программы, методы упорядочения тестов, а также круг вопросов, связанных с целесообразностью регрессионного тестирования, а также методика порождения новых тестов на основе анализа подозрительных состояний и сценарий ее применения.
Ключевые слова: регрессионное тестирование, ПО, значение, ресурс, операторы, брандмауэр, подмножество, граф вызовов, отбор тестов, интеграционное тестирование, объектно-ориентированный подход, множества, вероятность, модульное тестирование, класс, тест способностей, вызов метода, время выполнения, анализ, механизмы, путь, программа, место, управляющие, стоимость, нумерация, вычисление, запуск, время компиляции, метод уменьшения объема тестируемой программы, метод упорядочения тестов, функция, вес, выборочное регрессионное тестирование, вывод, компромисс, правильная программа, затраты, мощность, минимизация, детерминированный метод, мощность множества, отношение, компиляция, загрузка, программное обеспечение, прогон тестов, расходы, информация, минимум, тип сущности, модуль, переменная, макроопределения, безопасный метод, целесообразность регрессионного тестирования, точность, сценарий, выход, цикла, завершение работы, список, суперпозиция, методика порождения тестов, анализ подозрительных состояний, система контроля версий

Интеграционное регрессионное тестирование

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

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

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

Регрессионное тестирование объектно-ориентированных программ

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

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

Уменьшение объема тестируемой программы

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

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

Для теста 1 рис. 12.1 для функции Equation остаточная программа выглядит так, как показано в Табл. 13.1. Нумерация строк оставлена такой же, как в исходной программе. Таким образом, можно заметить, что были удалены строки 6 и 7, которые не затрагиваются тестом 1 в ходе его выполнения, а также строки 3 и 8, содержащие вычисление предикатов, которые в ходе выполнения теста всегда истинны. Запуск теста на полной измененной программе и на остаточной программе приводит к активизации одних и тех же операторов, поэтому выигрыша во времени получить не удается, однако за счет сокращения объема программы уменьшается время компиляции. Для нашего примера этот выигрыш незначителен и не оправдывает затрат на анализ, необходимый для уменьшения объема. Таким образом, рассмотренная технология рекомендуется к применению, прежде всего, в случаях, когда стоимость компиляции относительно высока.

Таблица 13.1. Остаточная программа
Строка кода
1 double Equation(int Print, float A, float B, float C, float& X1, float& X2) {
2 float D = B * B - 4.0 * A * C;
4 X1 = (-B + sqrt(D)) / 2.0 / A;
5 X2 = (-B - sqrt(D)) / 2.0 / A;
9 printf("Solution: %f, %f\n", X1, X2);
10 return D;
11 }

Сведения о методике уменьшения объема тестируемой программы приведены в Табл. 13.2.

Таблица 13.2. Результаты применения методики уменьшения объема
Характеристика Изменение в результате применения методики
Время компиляции тестируемой программы Уменьшается
Время выполнения тестируемой программы Не изменяется
Время работы метода отбора Увеличивается
Риск пропуска ошибок Увеличивается
Результаты применения методики на практике Отрицательные
< Лекция 12 || Лекция 13: 12345 || Лекция 14 >
Федор Антонов
Федор Антонов

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

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

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

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

Сергей Чурбанов
Сергей Чурбанов
Юрий Коробков
Юрий Коробков
Россия, Москва, МЭИ, 1998