|
|||||||||
Ерёмичев Вадим Викторович Факультет компьютерных наук и технологий. Кафедра автоматизированных систем управления. Специальность: Тема выпускной работы: Научный руководитель: к.т.н., доц. Савкова Елена Осиповна. |
|||||||||
|
|||||||||
Введение В тестировании программного обеспечения существует ряд задач, которые являются трудоемкими и громоздкими, а следовательно они требуют автоматизации. Одной из таких задач является генерация тестовых наборов. Тестовые наборы создаются на основе критерия тестирования согласно заданным спецификациям программы. Цели и задачи, которые должны решаться. Суть проблемы состоит в том, чтобы автоматически получать набор значений переменных, которые бы позволили протестировать программу в соответствии с определенным критерием тестирования. В этой задаче был выбран критерий C1 - критерий тестирования ветвей программы. Следовательно, задача заключается в том, чтобы автоматически получать набор значений, которые бы позволили протестировать программную ветку. Полнота покрытия тестирования достигается степенью оттестированности всех ветвей. Статья содержит краткий обзор метода, который может быть использован для создания тестового набора для прохождения ветви программы. Целью магистерской работы является предложить эффективный способ автоматизированной разработки тестовых наборов по критерию С1 – критерию тестирования ветвей программного обеспечения. Для того, чтобы достигнуть цели следует решить ряд задач, приведенных в списке ниже: Задача синтаксического анализа исходного кода программы с целью выделения в ней ветвей, а так же определения возможных значений параметров условий. Построение управляющего графа программы на основе данных, полученных в предыдущем пункте, для удобства отслеживания степени протестированности найденных ветвей. Разработка тестовых наборов для тестирования ветвей УГП. Данные задачи не относятся к разряду тривиальных и требуют к себе тщательного внимания и досконального изучения, из за отсутствия подобных систем, разрабатываемый проект можно отнести к проекту с высокой степенью новизны Актуальность темы работы Автоматизированное создание тестовых наборов является одним из самых трудоемких процессов в работе тестировщика программного обеспечения. Так же это очень ответственная и скурпулезная работа. Потому что именно от качества тестов будет зависеть качество программного продукта. Высокая степень оттестированности программы напрямую зависит от степени покрытия тестами ветвей или путей, в зависимости от того каким критерием пользуется тестировщик в своей работе. Создание тестов - очень трудоемкий процесс, который занимает большую часть времени самого тестирования. С целью повышения эффективности работы тестировщиков и облегчения их труда, нужно автоматизировать данный процесс на сколько это возможно. Процесс создания тестовых наборов состоит из подэтапов которые представлены ниже:
Ниже представлены не все задачи, связанные с тестированием ПО, а только те, которые могут быть интересны с точки зрения научных исследований, а также требуют специальных подходов к решению:
Задачи тестирования основаны на следующих постулатах тестирования ПО:
Исследования по генерации тестовых данных ведутся повсеместно, а большое число публикаций приводит к тому, что разрабатываемые подходы достаточно сложно классифицировать. Текущие результаты исследований. Для решения поставленной задачи предлагается использовать возможности расширенных конечных автоматов для создания модели тестируемой программы на основе управляющего графа, и генетические алгоритмы для автоматизации создания тестов. К примеру, имеется код программы, которая по значению целого числа должна печатать его простую характеристику – ноль это, четное или нечетное число, положительное или отрицательное. Предлагаемый подход подразумевает максимальную формализацию спецификаций. В свою очередь управляющий граф программы можно представить в виде конечного расширенного автомата, содержащего переменные и охранные условия на переходах.Все требования спецификации должны быть выполнены во время корректной работы программы. Автомат реагирует на события и выполняет переходы в зависимости от значений переменных автоматной модели, которые используются в охранных условиях на переходах. Вид автомата представлен на рисунке 2. Представление теста в виде последовательности событий и набора значений внешних переменных удобно с точки зрения автоматического создания кода теста, однако неудобно и неясно для разработчика, который основывается на спецификации, написанной на естественном языке. Поэтому разработчик записывает тест как последовательность переходов в модели. В этом случае возникает задача поиска последовательности событий и набора значений внешних переменных, соответствующих заданной последовательности переходов в модели. Ниже изложен принцип решения этой задачи, основанный на использовании генетических алгоритмов. Последовательность событий однозначно определяется по последовательности переходов. Сложнее подобрать значения переменных – они должны удовлетворять ряду требований. Во-первых, охранные условия на всех переходах в описанном пути должны быть выполнены. Во-вторых, все требования спецификации объектов управления должны выполняться, так как при реальном использовании значений этих переменных будут приходить из объектов управления с данными спецификациями. В предложенном подходе генетические алгоритмы применяются для решения задачи поиска набора значений, при котором будет выполнен заданный путь в расширенном конечном автомате. Такую задачу можно свести к задаче оптимизации. Построение оптимизационной задачи Мы имеем набор внешних переменных, задействованных на выбранной последовательности переходов. Этот набор можно рассматривать как вектор значений внешних переменных < x1, x2, …, x n >, где xi – значение внешней переменной, а n – число внешних переменных для этого пути.Для использования оптимизационных алгоритмов необходимо определить функцию приспособленности – функцию, которая оценивает, насколько хромосома решает проблему, и позволяет выбирать лучшие решения из всего поколения. В данной задаче функция приспособленности на вход принимает вектор значений и выдает число, характеризующее приспособленность этого вектора для выполнения заданного пути. Чем меньше это число, тем больше подходит данный вектор значений. Таким образом, задача поиска подходящего набора значений внешних переменных сводится к задаче оптимизации, где требуется найти вектор, которому соответствует минимальное значение функции приспособленности. Для данной задачи хромосома будет представлять собой вектор значений внешних переменных, состоящий из одного элемента – переменной n. Для общего случая один ген является значением одной переменной для заданного пути. Скрещивание происходит классическим одноточечным способом. Мутация представляет собой замену произвольного гена случайным значением из области допустимого диапазона значений. Однозначного способа определения функции приспособленности не существует. Тем не менее, существует критерий, который называется расстоянием до условия (Branchdistance), для определения приспособленности хромосом. Расстояние до условия позволяет оценить, насколько близка была данная хромосома к выполнению конкретного условия, которое на практике не было выполнено. Например, для условия A > B, расстояние до условия будет вычисляться по формуле |A - B|. Чем меньше значение |A - B|, тем ближе значение A к B и тем ближе хромосома к тому, чтобы это условие было выполнено. Если условие выполнено, то расстояние до условия ноль. При этом расстояние до условия можно представить как (1) Функция приспособленности, основанная на использовании критерия расстояние до условия, успешно применяется для поиска значений для выполнения пути в расширенном конечном автомате, причем эти значения являются граничными для условия, что увеличивает уверенность в правильности тестируемой программы. Для последовательности переходов может быть задано большое число условий, поэтому расстояние до условия всего пути необходимо вычислять по отдельности, рассматривая условия на каждом переходе этого пути. Каждый переход описывается набором параметров:
После этого исходная последовательность переходов рассматривается как последовательность шагов. Оценка приспособленности всей последовательности шагов вычисляется как сумма оценок для каждого шага по-отдельности. Каждый шаг оценивается по формуле вычисления расстояния для условия. Отметим, что шаги выполняются последовательно и что выполненность шагов в начале пути важнее, чем в его конце. Например, если выполнены условия всех шагов, кроме первого, то сумма расстояний до условия будет небольшой, так как для всех, кроме первого шага, это значение будет равно нолю. На практике эта хромосома не позволяет пройти ни одного шага, так как для того, чтобы успешно пройти второй шаг, необходимо выполнить все условия на первом шаге. Поэтому в предложенном подходе расстояния до условия шагов суммируются с учетом местоположения этих шагов в пути – используется взвешенная сумма (2) приспособленности пути где m– число шагов в пути, m=n*3, здесь n– число переходов в пути; fi– расстояние до условия для i-го шага. di– вес i-го с шага, di=(m-i)2 Если для одного шага задано несколько условий, то расстояние до условия этого шага вычисляется как сумма расстояний до условия каждого из этих условий. Выводы В ходе проделанного исследования были рассмотрены много методов тестирования программы. В итоге выбор пал на критерий С1 т.к. он позволяет производить достаточно качественное тестирование. Так же мы можем выполнять тестирование отдельно взятой ветви, не затрагивая при этом всю программу. Эволюционный метод в качестве генерации тестов позволит с легкостью подобрать нужные значения для внешних переменных программы, чтобы пройти по ветви. Литература
|