Вестник магистратуры. 2014. №2(29).
ISSN 2223-4047
УДК 004.415.533
М.А. Голубев
ОПРЕДЕЛЕНИЕ ПОКРЫТИЯ ОПЕРАТОРОВ ПРИ ФУНКЦИОНАЛЬНОМ ТЕСТИРОВАНИИ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА ВЕБ-ПРИЛОЖЕНИЯ
В статье рассматривается один из этапов создания автоматизированной системы тестирования веб-приложения - определение покрытия операторов тестовыми сценариями. В ней приводится информация об использовании библиотеки Xdebug для сбора статистики выполнения кода и описание созданной библиотеки.
Ключевые слова: функциональное тестирование, веб-приложение, PHP, Xdebug, покрытие операторов.
Один из важнейших этапов разработки программного обеспечения - это его тестирование до передачи заказчику. Оно позволяет выявить ошибки ПО и исправить их до того, как продукт будет предоставлен конечному пользователю. Как правило, ручное тестирование является сложным и длительным процессом, при этом количество протестированной функциональности программы остается низким, а возможность пропустить дефект - высокой.
Решением данной проблемы является создание автоматизированной системы тестирования с набором тестов, покрывающих различные сценарии взаимодействия пользователя с программой. При анализе качества тестирования одной из важных метрик является покрытие программы тестами [1]. Существует несколько различных критериев покрытия, разделяемых на критерии белого ящика и критерии черного ящика [2]. Примеры критериев белого ящика: покрытие операторов, покрытие условий, покрытие путей и так далее; примеры критериев черного ящика: покрытие требований, покрытие входных данных и так далее.
Среди критериев белого ящика критерий покрытия операторов является одним из самых простых в реализации. Кроме того, он является необходимым для приемлемого тестирования по принципу белого ящика и заключается в том, что каждый оператор выполняется, по крайней мере, один раз [2]. По этим причинам данный критерий был выбран как основной для анализа качества созданного набора тестовых сценариев.
В рамках предварительного анализа было найдено большое количество библиотек и утилит для определения покрытия операторов при модульном тестировании веб-приложений, созданных на языке PHP, однако подобных утилит для определения покрытия при функциональном тестировании пользовательского интерфейса (при котором во время выполнения тестов программа имитирует поведение конечного пользователя) найдено не было.
Таким образом, в процессе внедрения автоматизированной системы тестирования с использованием PHPUnit и Selenium возникла задача создания библиотеки для определения степени покрытия операторов, как при модульном тестировании, так и при тестировании пользовательского интерфейса.
Созданная библиотека проводит анализ путем выполнения следующих шагов:
1.Определение строк кода, выполненных во время запуска теста.
2.Определение всех строк кода продукта с нахождением класса и метода, к которому строка принадлежит.
3.Обработка полученных данных.
4.Создание отчета с общим покрытием кода с возможностью анализа покрытия отдельных классов и их методов (данная возможность позволяет добавлять новые критерии покрытия без изменения библиотеки).
Для определения строк кода, выполненных во время запуска теста, была использована библиотека Xdebug. Данная библиотека является расширением PHP, предоставляющим различ-
© М.А. Голубев, 2014.
ISSN 2223-4047
Вестник магистратуры. 2014. №2(29).
ную отладочную информацию, такую как улучшенный вывод переменных, отслеживание пути ошибок, отслеживание функций и профилирование скриптов [3]. В ней присутствует функциональность для анализа покрытия кода, которая реализуется с помощью трех методов:
• xdebug_start_code_coverage() - начинает сбор информации о выполняемых строках кода
[3];
• xdebug_stop_code_coverage() - заканчивает сбор информации [3];
• xdebug_get_code_coverage() - возвращает двумерный массив, ключами которого являются название файла и номер строки исходного кода, а значением - количество выполнений строки [3].
Так как интеграция PHPUnit и Selenium с тестируемой программой производится через веб-браузер, а не прямыми вызовами исходных файлов, то подключать Xdebug для тестов пользовательского интерфейса непосредственно из фреймворка тестирования невозможно. Чтобы решить данную проблему, в коде продукта был создан отдельный класс XdebugLogger, который в своем конструкторе начинает сбор информации, а в деструкторе заканчивает его и сохраняет результат в отдельные файлы, соответствующие модулям тестируемого приложения в формате сериализации объектов PHP, который позволяет создавать строку на основе объекта с сохранением его типа и структуры [4].
Затем XdebugLogger был добавлен в список автоматически загружаемых файлов класса Autoload. Данный класс подключается во всех скриптах тестируемого приложения и используется для автоматической загрузки файлов всех используемых в скрипте классов, находящихся в других модулях.
После завершения выполнения тестов система запускает скрипт, анализирующий файл результатов: из списка, составленного с помощью Xdebug, удаляются все дубликаты, и ведется подсчет количества различных выполненных строк и их соответствие классам, которое реализуется анализом исходного кода продукта на языке PHP и поиском шаблонов с помощью регулярных выражений.
Для дальнейшего анализа используется статистика отдельного скрипта, который вызывается после каждого изменения продукта и производит подсчет общего количества значащих строк кода (то есть, строк, которые теоретически могут быть выполнены: в этот список не входят пустые строки, комментарии, HTML-вставки вне PHP кода и т.п.).
На последнем шаге производится подсчет соотношения количества операторов, полученных в ходе анализа файла, составленного на основе данных Xdebug, и общего количества операторов, вычисленного с помощью скрипта. В конце автоматически создается набор HTML файлов, соответствующих классам в продукте, которые могут быть загружены на компьютер инженера по контролю качества и проанализированы для определения качества набора тестовых сценариев.
Таким образом, была создана библиотека, решающая поставленную задачу: сбор информации о степени покрытия кода тестовыми сценариями и форматирование ее в виде HTML-документов для дальнейшего анализа с целью улучшения качества тестов. Данная библиотека была интегрирована в общую систему тестирования продукта.
Библиографический список
1.Про Тестинг - Тестирование - Тестовое Покрытие // Про Тестинг: тесты, тестирование и тести-ровщики программного обеспечения. 2008. URL: http://www.protesting.ru/testing/testcoverage.html (дата обращения: 14.01.2014).
2.Майерс, Г. Искусство тестирования программ. М.: Финансы и статистика, 1982. 55 с.
3.Xdebug: Documentation // Xdebug - Debugger and Profiler Tool for PHP. 2013. URL: http://xdebug.org/docs/ (дата обращения: 14.01.2014).
4.PHP: serialize - Manual // PHP: Hypertext Preprocessor. 2013. URL: http://ru2.php.net/manual/en/function.serialize.php (дата обращения: 15.01.2014).
ГОЛУБЕВ Михаил Алексеевич - магистрант факультета информационных технологий Новосибирского государственного университета.