РЕФЕРАТ 3
ВВЕДЕНИЕ 5
1 Тестирование программного обеспечения 8
1.1 Дефекты программного кода 9
1.2 Уязвимости 12
2 Методы построения тестов 15
2.1 Нагрузочное и стресс- тестирование 16
2.2 Модульное тестирование 17
2.3 Методы построения тестов на основе конечного автомата 17
2.3.1 W - метод 18
2.3.2 HSI - метод 19
2.4 Мутационное тестирование 20
3 Автоматизированное тестирование программного обеспечения 21
3.1 Инструменты для автоматизации тестирования программного обеспечения 23
3.2 Unit тестирование 24
3.3 Тестирование ПО с использованием FSMTest 2.0 25
3.4 Инструменты для мутационного тестирования 26
3.4.1 pJava 26
3.4.2 Pitest 29
3.5 Эксперименты по оценке качества инструментов для мутационного тестирования
pJava и Pitest 30
4 Проверка качества инструмента для автоматизирования тестирования FSMTest 2.0 ..34
4.1 XML - ошибки 34
4.2 Использование Pitest для тестирования программного интерфейса 35
ЗАКЛЮЧЕНИЕ 34
СПИСОК ЛИТЕРАТУРЫ 39
ПРИЛОЖЕНИЕ А 41
ПРИЛОЖЕНИЕ Б 42
ПРИЛОЖЕНИЕ В 48
В современном мире цифровых технологий тестирование стало неотъемлемой частью жизненного цикла любого программного продукта, будь то пользовательский интерфейс или критическая система. Тестирование направлено на выявление неисправностей в коде, а также на проверку соответствия заданной спецификации. Поскольку программирование, как и любая человеческая деятельность невозможна без ошибок, важно правильно выставлять требования, как к продукту, так и к планированию и целям тестирования. Примерами последствий таких ошибок являются: авария ракеты-носителя «Ариан - 5» 4 июня 1996 года; потеря личных данных, хранящихся в «облаке» в результате отключения серверов Amazon в 2013 году; отключение электроэнергии на северо-востоке США в 2003 году из-за ошибки программного обеспечения для мониторинга работы оборудования General Electric Energy.
В этапы разработки программного обеспечения входят:
• Сбор и анализ требований
• Системный анализ
• Разработка системы
• Кодирование
• Тестирование
• Реализация
Спецификация требований к программному продукту (SRS) - это документ или комплект документации, описывающий функции и поведение системы или программного приложения [1].
На основании первых спецификаций пишутся тест-планы, разрабатываются тестовые наборы, а также оценивается необходимость использования автоматизации тестирования.
Как и любой другой сложный процесс, тестирование программного обеспечения состоит из разных этапов, и каждый из них представлен конкретной направленностью действий.
Из этапов тестирования можно выделить следующие:
1. Проектирование тестов — разработка стратегии тестирования, разработка планов тестирования, разработка и документирование тестовых кейсов
2. Выполнение тестового цикла — анализ спецификаций и кода. Кодирование и проведение тестовых кейсов
3. Улучшение тестирования ПО — проведение исследований по результатам выполненного тестирования с получением информации по покрытию тестовыми кейсами исходного кода или функциональности программы. Разработка рекомендаций по улучшению тестирования
4. Улучшение качества программного продукта — выдача рекомендаций по улучшению программного обеспечения в целом или с целью соответствия поставленным требованиям и задачам
5. Оптимизация тестирования ПО — разработка программ, позволяющих в автоматическом режиме обрабатывать исходные коды и делать необходимые заключения по его качеству
Основной целью тестирования является поиск несоответствий в спецификациях, а также поиск фактических ошибок программиста. Также один из важных этапов проверки качества программного продукта, это верификация — процесс оценки промежуточных рабочих продуктов жизненного цикла разработки, для проверки правильно ли создан конечный продукт.
С развитием цифровых технологий также происходит развитие методов тестирования, увеличивается сложность применяемых алгоритмов, что непременно введет к развитию инструментов для автоматизации тестирования.
Одним из таких инструментов является FSMTest 2.0, который разработан в рамках проекта на кафедре информационных технологий в исследовании дискретных структур Томского государственного университета. Данный инструмент предназначен для автоматизации синтеза тестовых последовательностей на основе конечно-автоматных моделей. Однако при распространении данного программного продукта, как и любого другого, со стороны разработчика, также важно давать оценку полученному инструменту, тщательно тестировать его, и в итоге гарантировать качество и надежность. Поэтому в рамках нашего исследования за экспериментальную основу были поставлены задачи: исследовать существующие методы тестирования, провести сравнительные эксперименты для некоторых популярных инструментов для автоматизации тестирования, и обнаружить все неисправности и уязвимости продукта FSMTest 2.0.
Структура и объем работы. Дипломная работа включает введение, 4 главы, заключение, список используемой литературы и приложение. Отчет содержит 4 рисунка и 6 таблицы. Объем работы составляет 40 страницы, в том числе: титульный лист - одна страница, оглавление - 1 страница, основной текст - 35 страниц, список использованных литературных источников из 17 наименований - 2 страницы.
В первом разделе данной работы вводятся основные понятия и определения. Обознаются основные типы ошибок, такие как дефекты и уязвимости. Во второй части данного исследования составлен обзор существующих методов и подходов к тестированию, составлена классификация, а также раскрыты методы, используемые в следующих разделах. В третьей части работы исследована область инструментов для автоматизации тестирования разных типов программного обеспечения и проведены эксперименты по сравнению двух инструментов для автоматизации мутационного тестирования: pJava и Pitest. В завершающей главе приведены результаты исследования качества программного продукта FSMTest 2.0, приведена статистика обнаруженных неисправностей.
В ходе научно-исследовательской работы были рассмотрены различные виды тестирования и изучены методы построения тестов. По результатам исследования был составлен обзор основных методов и типов тестирования, был проведен обзор наиболее известных инструментов для автоматизации тестирования.
Основным результатом работы является покрытие тестами инструмента для автоматизации тестирования систем с использованием методов на основе конечно-автоматных моделей FSMTest 2.0, который был разработан на кафедре информационных технологий в исследовании дискретных структур Томского государственного университета. Для тестирования использовались современные подходы, в том числе с применением инструментов для автоматизации тестирования. Все найденные неисправности переданы отделу разработки, тем самым внесен весомый вклад в получение патента на вторую версию FSMTest и соблюдение стандартов качества программного продукта. Актуальность исследования обоснована в первых двух главах работы, в которых приводится краткий обзор методов и средств тестирования, в том числе мутационного тестирования и методов на основе моделей с конечным числом состояний.
Среди выявленных неисправностей было обнаружено использование неинициализированных переменных в одном из XML - файлов, полученных в результате опечатки при написании кода.
В работе также проведены компьютерные эксперименты с двумя различными инструментами для мутационного тестирования, что также позволит в дальнейшем проводить более тщательное покрытие тестовыми наборами, в частности, различных сервисных систем, протокольных реализаций и сложных алгоритмических вычислений. Для этого были изучены основные понятия и определения мутационного тестирования. Для проведения экспериментов был изучен объектно-ориентированный язык программирования Java и самостоятельно реализованы несколько программ. Для написания и подачи тестов, были изучены принципы Junit-тестирования. В отчете в четвертой главе представлены результаты по сравнению инструментов pJava и Pitest, с которыми были проведены компьютерные эксперименты, которые показали преимущества использования каждого из них для генерации мутантов и автоматического запуска тестов; также были выявлены недостатки, в том числе, на этапе запуска программ. Количество мутаций, которые можно внести в программу, используя pJava, в несколько раз превышает возможности Pitest, однако стоит отметить, что количество эквивалентных мутантов в этом случае составило: 97. Основная проблема pJava состоит в сложности запуска, и специфичным, устаревшим требованиям к среде запуска и разработки. В свою очередь, последняя версия Pitest была выпущена 31 марта 2017 года и регулярно совершенствуется. Кроме того, последний инструмент имеет интуитивно понятный интерфейс, который не требует глубоких знаний языка Java и сборок программных продуктов.