Тестирование программного обеспечения
Раздел 1. Основные понятия тестирования Раздел 2. Критерии выбора тестов Раздел 3. Разновидности тестирования Раздел 4. Особенности индустриального
тестирования
Раздел 5. Регрессионное тестирование
Раздел 5. Регрессионное тестирование
Регрессионное тестирование - выборочное тестирование, позволяющее убедиться, что изменения не вызвали нежелательных побочных эффектов, или что измененная система по-прежнему соответствует требованиям.
Основной задачей этапа сопровождения ПО является реализация систематического процесса обработки изменений в коде. После каждой модификации программы необходимо удостовериться, что на функциональность программы не оказал влияния модифицированный код. Если такое влияние обнаружено, говорят о регрессионном дефекте.
Цели регрессионного тестирования:
-в соответствии с используемым критерием покрытия кода (например, критерием покрытия потока операторов или потока данных), гарантировать тот же уровень покрытия, что и при полном повторном тестировании программы. Для этого необходимо запускать тесты, относящиеся к измененным областям кода или функциональным возможностям.
-удостовериться, что программа функционирует в соответствии со своей спецификацией, и что изменения не привели к внесению новых ошибок в ранее протестированный код. Данная цель всегда может быть достигнута повторным выполнением всех тестов регрессионного набора, но более перспективно отсеивать тесты, на которых выходные данные модифицированной и старой программы не могут различаться.
Регрессионное тестирование
Важными задачами регрессионного тестирования являются:
-уменьшение стоимости выполнения тестов
-сокращение времени выполнения тестов.
Отсутствие общего решения проблемы останова, заключающейся в невозможности создания в общем случае алгоритма, дающего ответ на вопрос, завершается ли когда-либо произвольная программа для заданных значений входных данных, приводит к тому, что решение задачи отбора тестов для заданной программы для достижения требуемого покрытия кода возможно только путем выполнения каждого регрессионного теста, однако именно этого следует избегать для уменьшения времени и стоимости тестирования.
Практический вариант решения задачи выборочного регрессионного тестирования состоит в получении полезной информации по результатам выполнения программы и объединения этой информации с данными статического анализа для получения некоего множества, которое включает все тесты, активирующие измененный (возможно, удаленный, возможно, новый) код, и не включающее никакие другие тесты.
Регрессионное тестирование
Регрессионное тестирование объектно-ориентированных программ
Объектно-ориентированный подход определяет новые приложения методик выборочного повторного тестирования, поскольку при изменении класса необходимо обнаружить в наборе тестов класса только тесты, требующие повторного выполнения.
При порождении нового класса из существующего необходимо определить тесты из множества тестов базового класса, требующие повторного выполнения на
классе-потомке. Хотя благодаря инкапсуляции вероятность ошибочного взаимодействия объектно-ориентированных модулей кода уменьшается, тем не менее, возможно, что тестирование прикладных программ выявит ошибки в методах, не найденные при модульном тестировании методов. В этом случае необходимо рассмотреть все прикладные программы, использующие измененный класс, чтобы продемонстрировать, что все существующие тесты, способные обнаруживать ошибки в измененных классах, были запущены повторно и было выбрано безопасное множество тестов.
В объектно-ориентированной программе для заданного вызова не всегда возможно статически определить метод, с которым он будет связан. Выборочные методы повторного тестирования, которые полагаются на статический анализ, предназначены для формирования механизма разрешения этой неопределенности.
Регрессионное тестирование
Уменьшение объема тестируемой программы
Сокращение затрат на регрессионное тестирование достигается тем, что вместо повторного тестирования всей измененной программы с использованием соответственно большого числа тестов можно обосновать, что измененная программа с достаточной полнотой тестируется с помощью выполнения некоторого меньшего числа тестов на остаточной программе.
Остаточная программа создается путем использования графа зависимости системы вместо графа потока управления, что позволяет исключить ненужные зависимости между компонентами в пределах одного пути графа потока управления. При этом, корректировка какого-либо оператора в идеале должна приводить к необходимости тестировать остаточную программу, состоящую из всех операторов исходной программы, способных повлиять на этот оператор или оказаться в сфере его влияния. Для получения остаточной программы необходимо знать место корректировки, а также информационные и управляющие связи в программе.