Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра информационно-аналитических систем Никита Остроумов Реализация генетического алгоритма для извлечения закономерностей из множества однотипных веб-страниц Курсовая работа Научный руководитель: к. ф.-м. н. Кацев И. Санкт-Петербург 2014 SAINT-PETERSBURG STATE UNIVERSITY Mathematics & Mechanics Faculty Chair of Analytical Information Systems Nikita Ostroumov Implementation of genetic algorithm for invariant extraction from set of similar web-pages Course Work Scientific supervisor: PhD Ilya Katsev Saint-Petersburg 2014 Оглавление 1. Введение 4 2. Описание алгоритма 2.1. Генерация начальной популяции 2.2. Мутация . . . . . . . . . . . . . . 2.3. Cкрещивание . . . . . . . . . . . . 2.4. Отбор . . . . . . . . . . . . . . . . 2.5. Алгоритм . . . . . . . . . . . . . . 5 5 5 6 6 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Результаты 7 4. Список литературы 8 3 1. Введение Большой веб-сайт сегодня – это тысячи страниц, миллионы пользователей и сотни тысяч сценариев использования. В таких больших системах неизбежно возникновение ошибок. Их обнаружение - тестирование, является важной задачей поскольку эти ошибки могут привести не только к неудовольствию пользователей, но и к потере прибыли. Самым простым способом тестирования является ручное тестирование. Тестировщик заходит на какую-нибудь страницу сайта, заполняет формы и нажимает на кнопки, пытаясь найти некорректное поведение. Минусами данного подхода являются крайне высокие затраты человеческих ресурсов и низкое качество. Более продвинутым способом тестирования являются модульные тесты. Их использование значительно автоматизирует процесс тестирования, увеличивает количество находимых ошибок и обеспечивает большое покрытие. Однако, при внесении изменений в сайт требуется также обновить и тесты. Поддержка модульных тестов также требует усилий человека. В идеале тестирующая система будет без участия человека обнаруживать ошибки и подстраиваться под изменения. Реализацией такой системы является Magick Tester, разработанный в компании Яндекс. В качестве входных данных MT принимает совокупность однотипных веб-страниц (например, странице товаров в Яндекс-Маркете) и выделяет свойства, общие для почти всех страниц из этой совокупности. Отсутствие одного из свойств для какой-либо страницы сигнализирует о наличии ошибки. В данной работе будет предложен улучшенный алгоритм выделения свойств. 4 2. Описание алгоритма Алгоритм генерирует утверждения вида C1 &C2 & . . . Ck & → D. Здесь Ci и D выражения одного из двух типов: 1. Блок j присутствует на странице 2. Блок j содержит слово s Для генерации утверждений используется генетический алгоритм. Особями в нем являются генерируемые утверждения. Функция приспособленности Fitness определя score ется следующим образом: F itness(r) = maxScore − errorRate где score - количество страниц p ∈ P для которых r(p) = true, leftScore - количество страниц для которых выполняется левая часть утверждения r, а errorRate - предполагаемая доля страниц, в которых содержится одна ошибка. 2.1. Генерация начальной популяции Случайная особь генерируется следующим образом: 1. Выбрать распределенную по Пуассону с λ = 2 величину length, принимаемую за длину левой части 2. Для i = 1 . . . length (a) Случайным образом выбрать тип Ci (b) Если Ci - выражение типа 1, то случайно выбрать блок j из множества {1 . . . m} (c) Если Ci - выражение типа 2, то случайно выбрать блок j из множества {1 . . . m} и строку s из множества слов, встречающихся в блоке j 3. Выбрать D аналогично Ci Генерация начальной популяции заключается в генерации N особей по изложенному выше алгоритму. 2.2. Мутация Мутация особи r происходит следующим образом: 1. Случайно выбрать одно из выражений C1 . . . C2 или D, в котором произойдет мутация 2. Заменить это выражение на новое как при генерации особи 5 2.3. Cкрещивание Пусть P1 = C1 &C2 & . . . Ck & → D и P2 = E1 &E2 & . . . Es & → F - две родительские особи, F1 = F itness(P1 ), F2 = F itness(P2 ). Построение потомка P = G1 &G2 & . . . Gn & → H происходит следующим образом: 1. Длину левой части n положить равной min(k, s). 2. Для i = 1 . . . length (a) Выбрать r ∼ U [0, 1] (b) Если r < F1 , F1 +F 2 Gi := Ci . Иначе Gi := Ei 3. Выбрать r ∼ U [0, 1] 4. Если r < F1 , F1 +F 2 H := D. Иначе H := F 2.4. Отбор Отбор (селекция) в популяции P = {P1 . . . Pn } происходит следующим образом: 1. Определить целовой размер популяции m 2. Упорядочить особи pi по убывания F itness(Pi ) 3. Оставить первые m особей в популяции 2.5. Алгоритм 1. Сгенерировать начальную популяцию P размера N 2. Повторять: (a) Для каждой особи p ∈ P с вероятностью pMutation произвести ее мутацию (b) Добавить в популяцию результаты скрещивания nCrossover случайных пар особей популяции (c) Отбором уменьшить размер популяции до N 6 3. Результаты Реализован алгоритм, генерирующий набор правил, описывающих группу схожих веб-страниц. Порядка 10% правил может быть использованно для диагностики ошибок, что не является удовлетворительным результатом. Таким образом, установлено, что текущая реализация алгоритма не применима к поставленной задаче. 7 4. Список литературы • Mark Harman, Phil McMinn, Muzammil Shahbaz, and Shin Yoo. A comprehensive survey of trends in oracles for software testing. Technical Report Research Memoranda CS-13-01, Department of Computer Science, University of Sheffield, 2013. • A. M. Memon, M. E. Pollack, and M. L. Soffa. Automated test oracles for GUIs. In Proceedings of the ACM SIGSOFT 8th International Symposium on the Foundations of Software Engineering (FSE-8), pages 30-39, NY, Nov. 8 10 2000 • Jeff H. Perkins and Michael D. Ernst. “Efficient incremental algorithms for dynamic detection of likely invariants”. Proceedings of the ACM SIGSOFT 12th Symposium on the Foundations of Software Engineering (FSE 2004), (Newport Beach, CA, USA), November 2-4, 2004, pp. 23-32 8