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

кандидата технических наук
Епифанов, Николай Анатольевич
город
Санкт-Петербург
год
2003
специальность ВАК РФ
05.13.11
цена
450 рублей
Диссертация по информатике, вычислительной технике и управлению на тему «Методы реализации регрессионного тестирования по расширенным тестовым наборам»

Оглавление автор диссертации — кандидата технических наук Епифанов, Николай Анатольевич

ВВЕДЕНИЕ.

1. ОБЗОР ПОДХОДОВ К РЕГРЕССИОННОМУ ТЕСТИРОВАНИЮ.

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

1.2. Необходимость регрессионного тестирования.

1.3. Цели и задачи регрессионного тестирования.

1.4. Классификация изменений кода и методов сопровождения.

1.4.1. Типы изменений.

1.4.2. Виды тестирования.

1.4.3. Виды регрессионного тестирования.

1.5. Методы выборочного регрессионного тестирования.

1.5.1. Выборочные методы и метод повторного прогона всех тестов.

1.5.2. Классификация тестов при отборе.

1.6. Классификация выборочных методов.

1.6.1. Полнота, точность, эффективность, универсальность.

1.6.2. Случайные методы.

1.6.3. Безопасные методы.

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

1.6.5. Методы, основанные на покрытии кода.

1.6.6. Сравнение классов методов выборочного регрессионного тестирования.

1.7. Особые виды регрессионного тестирования.

1.7.1. Регрессионное тестирование межмодульных зависимостей.

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

1.8. Технологии, не связанные с отбором тестов.

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

1.8.2. Методы упорядочения.

1.8.3. Целесообразность отбора тестов.

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

1.9. Обзо]р методов отбора регрессионных тестов.

1.10. Выводы.

2. МЕТОДИКА РАСШИРЕННОГО РЕГРЕССИОННОГО ТЕСТИРОВАНИЯ.

2.1. Стандартная методика выборочного регрессионного тестирования.

2.2. Новый метод отбора тестов.

2.3. Обоснование корректности метода отбора тестов.

2.4. Новый метод порождения дополнительных тестов.

2.5. Условия применимости предложенных методов.

2.6. Улучшенная методика регрессионного тестирования.

2.7. Оценка предложенных методов.

2.7.1. Оценка метода отбора тестов.

2.7.2. Оценка метода порождения новых тестов.

3. СИСТЕМА ПОДДЕРЖКИ РЕГРЕССИОННОГО ТЕСТИРОВАНИЯ.

3.1. Описание системы поддержки регрессионного тестирования.

3.1.1. Общая структура системы.

3.1.2. Профайлер.

3.1.3. Грамматический анализатор.

3.1.4. Оптимизация работы профайлера.

3.1.5. Решение прикладных задач с помощью профайлера.

3.1.6. Приведение множества ДР к универсальному формату.

3.1.7. Получение списка тестов, подлежащих повторному запуску.

3.1.8. Определение новых состояний и списка изменённых переменных.

3.1.9. Создание списка рекомендуемых новых тестов.

3.1.10. Автоматическое добавление операторов вывода.

3.2. Известные ограничения системы поддержки регрессионного тестирования.

3.2.1. Ограничения, связанные с используемыми методами.

3.2.2. Ограничения, связанные с программной реализацией методов.

3.2.3. Требования к аппаратной и программной конфигурации ЭВМ.

3.3. Методика использования системы поддержки регрессионного тестирования.

3.4. Оценка программной реализации системы.

4. РЕЗУЛЬТАТЫ ПРИМЕНЕНИЯ РАЗРАБОТАННЫХ МЕТОДОВ И СРЕДСТВ РЕГРЕССИОННОГО ТЕСТИРОВАНИЯ.

4.1. Методы и средства регрессионного тестирования программных проектов.

4.2. Анализ применения разработанных методов и средств.

4.3. Выводы.

Введение 2003 год, диссертация по информатике, вычислительной технике и управлению, Епифанов, Николай Анатольевич

Программы подвержены неизбежным изменениям, как бы хорошо разработаны они ни были первоначально. Их выполнение выявляет дефекты, которые должны быть исправлены. Ошибочные и изменённые требования приводят к переработке программ. Новые области применения старых программ требуют новых функциональных возможностей, не учтённых в требованиях изначально. Контроль над изменениями -критический фактор для сохранения полезности программ [28].

С развитием программного обеспечения сопровождение становится наиболее дорогим компонентом разработки программных систем. Исследования [14, 89, 118] показали, что от 1/2 до 2/3 затрат на протяжении срока службы системы программного обеспечения уходит на сопровождение. На этап сопровождения, к тому же, приходятся и наибольшие затраты в случае внесения ошибок. При анализе самых дорогих ошибок за всю историю программирования [132] было выяснено, что худшие три из них были вызваны изменением ровно одной строки кода, который не был протестирован после внесения изменения.

Стандартный процесс разработки программного обеспечения хорошо работает в случае добавления к системе новых функциональных возможностей; в других аспектах он требует определённой адаптации. Для повторной проверки корректности функциональных возможностей, например, унаследованных из предыдущей версии, в процессе разработки необходимо использовать регрессионное тестирование [58, 71], то есть повторное тестирование части программы, зависящей от внесённых изменений. Регрессионное тестирование успешно применяется как при изменении компонентов систем, так и при добавлении к системе новых компонентов (или функциональных возможностей). Регрессионное тестирование гарантирует, что внесённые в код изменения корректны и не воздействуют неблагоприятно на другие блоки программы; в противном случае считается, что в системе появились регрессионные ошибки [75, 84]. Поведение новой версии программы должно в точности совпадать с поведением старой, за исключением ситуаций, которые обусловлены изменённой функциональностью. Таким образом, регрессионные системные тесты могут рассматриваться как частичные требования к новым версиям системы. Обычно вместо регрессионного тестирования для доказательства того, что качество системы не ухудшилось, запускается множество всех тестов, используемых на системном цикле.

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

Регрессионное тестирование — дорогостоящий род деятельности: процесс регрессионного тестирования может включать исполнение достаточно большого количества тестов на скорректированной программе, даже если изменений очень мало. Несмотря на то, что усилия, требуемые для внесения небольших изменений, как правило, минимальны, они могут требовать достаточно больших усилий для проверки качества изменённой программы [38, 37]. Тем не менее, проведение регрессионного тестирования необходимо. Надёжная и эффективная разработка и сопровождение программного обеспечения невозможна без регрессионного тестирования [73].

Важным различием между регрессионным тестированием и тестированием в процессе разработки является наличие в процессе регрессионного тестирования готового набора тестов, доступного для повторного использования. Одна из стратегий регрессионного тестирования допускает повторный запуск всех этих тестов, но такой метод потребляет чрезмерно много времени и ресурсов. Альтернативный метод, выборочное повторное тестирование, выбирает из старого набора тесты, которые считает необходимыми для тестирования изменённой программы. Эти тесты дополняются, в случае необходимости, новыми, возможно для того, чтобы удовлетворить некоторый критерий покрытия кода. Однако, как отмечается в работе [85], такой выборочный подход даёт выигрыш только тогда, когда стоимость отбора и прогона подмножества тестов меньше, чем стоимость выполнения тестов, которые удаётся опустить.

Во время, когда система подвергается изменению, трудно определить, какие тесты подлежат модификации и как именно они должны быть изменены [137]. Инструментальные средства поддержки разработки программного обеспечения, успешно применяемые при тестировании, далеко не всегда применимы к регрессионному тестированию. Большинство коммерческих средств автоматизации тестирования обеспечивает не более чем возможность сохранять существующие тесты и запускать их повторно после каждого изменения [103, 44, 124, 125]. У них отсутствует возможность какого-либо автоматического отбора тестов, нет и инструментов оценки требуемых для регрессионного тестирования затрат [85]. Методики выборочного регрессионного тестирования пока ещё не нашли своего воплощения в промышленных программных средствах, доступных рядовому пользователю.

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

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

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

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

Для достижения поставленной цели в работе выполнено следующее: 1. Проведён анализ существующих методов и средств регрессионного тестирования ПО и выбор требований к системе.

2. Разработан метод выборочного регрессионного тестирования. Предложенный подход, в терминах [41, 112], является безопасным и целесообразным, то есть способен выбирать 100% тестов, обнаруживающих ошибки, и оправдывать расходы на собственное применение. Он обеспечивает линейный рост времени выполнения тестов в зависимости от объёма тестируемой программы (т.е. является эффективным) и применим для широкого круга программ, написанных на языке С (т.е. является универсальным).

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

4. Разработана методика расширенного регрессионного тестирования. Методика учитывает как разработанный метод порождения дополнительных тестов, так и другие наработки последних лет, не учтённые, в частности, в алгоритме Ротермела - Харролд, приведённом в работе [111].

5. Создан инструментарий, поддерживающий процесс автоматизации регрессионного тестирования.

6. Проанализированы результаты применения предложенных методик и инструментального пакета при регрессионном тестировании программных проектов.

Заключение диссертация на тему "Методы реализации регрессионного тестирования по расширенным тестовым наборам"

Основные результаты работы докладывались и обсуждались на следующих конференциях:

- XXX Юбилейная неделя науки СПбГТУ;

- XXXI неделя науки СПбГТУ;

- Motorola Technology Day 2000;

Motorola Technology Day 2001;

International Workshop on Program Understanding, 2003.

По материалам диссертационной работы опубликовано 6 печатных работ.

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

На защиту выносится: 1. Методы поиска ошибок с использованием регрессионных тестов.

- Метод покрытия точек использования неисполняемых определений.

Метод порождения новых тестов на основании «подозрительных» состояний. Методика расширенного регрессионного тестирования. Инструментальная поддержка методов.

- Программная система поддержки регрессионного тестирования.

ЗАКЛЮЧЕНИЕ

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

Для достижения цели в работе были решены следующие задачи:

1. Был проведён анализ существующих методов и средств регрессионного тестирования программного обеспечения и выбор требований к системе.

2. Был разработан метод выборочного регрессионного тестирования. Этот метод, в терминах [41, 112], является безопасным и целесообразным, то есть способен выбирать 100% тестов, обнаруживающих ошибки, и оправдывает расходы на собственное применение. Он также обеспечивает линейное возрастание времени выполнения в зависимости от объёма тестируемой программы, то есть является эффективным, и применим для широкого круга программ, написанных на языке С, то есть является универсальным.

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

4. Была разработана методика расширенного регрессионного тестирования. Эта методика учитывает как разработанные методы отбора и порождения тестов, так и другие наработки последних лет, не учтённые в стандартном алгоритме.

5. Был создан инструментарий, поддерживающий процесс автоматизации регрессионного тестирования.

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

Полученные в ходе работы основные результаты: 1. Проведен обзор существующих инструментальных средств регрессионного тестирования программного обеспечения. На основе их анализа сформулированы соответствующие требования к системам поддержки регрессионного тестирования программ.

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

3. Выполнено обоснование предложенных в работе методов и средств поддержки регрессионного тестирования программных изделий:

- перечислены необходимые условия для применения выборочных методов регрессионного тестирования;

- дано обоснование корректности методов анализа кода, применяемых при отборе тестов и анализе «подозрительных» состояний.

4. Разработан метод покрытия точек использования неисполняемых определений.

5. Разработан метод порождения новых тестов на основании анализа «подозрительных» состояний.

6. Разработана методика расширенного регрессионного тестирования.

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

8. Определена методика проведения регрессионного тестирования программных изделий с использованием разработанных программных средств.

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

10. Анализ результатов проведённого на практике регрессионного тестирования подтверждает работоспособность и эффективность разработанных методов и средств поддержки регрессионного тестирования программных изделий.

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

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

7 3 содержать до 10 строк исходного кода и больше, а их тестовые наборы могут состоять из 10 и более тестов.

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

Разработанные методы и средства поддержки регрессионного тестирования программных изделий внедрены в ЗАО «Моторола ЗАО» (Санкт-Петербург), ЗАО «СевероЗападная Лаборатория» и научно-производственной фирме «Юпитер».

Общий объем разработанного программного обеспечения, вошедшего в программный комплекс поддержки регрессионного тестирования, составил около 960 килобайт исходного кода на языках С и С++; объем документации на разработанное программное обеспечение -более 150 страниц.

Библиография Епифанов, Николай Анатольевич, диссертация по теме Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

1. Аджиев В. MS: корпоративная культура разработки ПО // Открытые системы, 1998, № 1.

2. Ахо, Ульман, Введение в теорию компиляции // М., Мир, 1978.

3. Васильев А. Заметки об американском программировании // Открытые системы, 1996, №5.

4. Вендров М. Практические рекомендации по освоению и внедрению CASE-средств // Открытые системы, 1997, № 1.

5. Воас Д. Сопровождение компонентных систем // Открытые системы, 1998, № 6.

6. Гинкул Г. П., Соловьёв С. Ю., Сотников А. Н., Шабанов Б. М. Проблема 2000 года и задача реконструкции дат // Автоматизация и проектирование, 1999, № 2.

7. Гласс Р., Нуазо Р. Сопровождение программного обеспечения // М., Мир, 1983.

8. Дубова Н. Знак качества программному продукту // Открытые системы, 1998, № 6.

9. Канер С., Фолк Д., Нгуен Е.К. Тестирование программного обеспечения // Киев, ДиаСофт, 2000.

10. Котляров В. П., Епифанов Н. А., Некрасов А. О., Коликова Т. В. Основы современного тестирования программного обеспечения, разработанного на С# // СПб., СПбГТУ, Нестор, 2003,86 с.

11. Котляров В. П., Пинаев Д. В. Методы и средства автоматизации тестирования программного проекта // СПб., СПбГТУ, 1998.

12. Кречетов Н. Автоматизированное тестирование приложений клиент/сервер // Сети, 1996, №33.

13. Липаев В. В. Тестирование программ // М., Радио и связь, 1986.

14. Майерс Г. Д. Искусство тестирования программ // М., ФиС, 1982.

15. Майерс Г. Д. Надёжность программного обеспечения // М., Мир, 1980.

16. Мейер Б. Построение надёжного объектно-ориентированного программного обеспечения: Введение в контрактное проектирование // Открытые системы, 1998, № 6.

17. Пучкин Р. Тестирование прикладного ПО с графическим интерфейсом // Корпоративные системы, 1999, №11.

18. Разработка программ с использованием Microsoft English Query: оснастите возможностями естественного языка запросов ваши веб-узлы и приложения // СУБД, специальный выпуск, посвящённый Microsoft SQL Server 7.0,1998

19. Суркис А. С. Y2K от проблемы к решению! //http:/AvA\A\,.diijdes.spb.su/about/advertising/current/articlcs/ComPress/v2k dd.htm.20