Никита Остроумов - Математико-механический факультет СПбГУ

advertisement
Санкт-Петербургский Государственный Университет
Математико-механический факультет
Кафедра информационно-аналитических систем
Никита Остроумов
Генетический алгоритм для извлечения
закономерностей из множества
однотипных веб-страниц
Курсовая работа
Научный руководитель:
к. ф.-м. н. Кацев И.
Санкт-Петербург
2013
SAINT-PETERSBURG STATE UNIVERSITY
Mathematics & Mechanics Faculty
Chair of Analytical Information Systems
Nikita Ostroumov
Genetic algorithm for invariant extraction
from set of similar web-pages
Course Work
Scientific supervisor:
PhD Ilya Katsev
Оглавление
1. Введение
4
2. Постановка задачи
5
3. Существующее решение
6
4. Описание алгоритма
4.1. Генерация начальной популяции
4.2. Мутация . . . . . . . . . . . . . .
4.3. Cкрещивание . . . . . . . . . . . .
4.4. Отбор . . . . . . . . . . . . . . . .
4.5. Алгоритм . . . . . . . . . . . . . .
7
7
7
8
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5. Результаты и планы
9
6. Список литературы
10
1. Введение
Большой веб-сайт сегодня – это тысячи страниц, миллионы пользователей и сотни
тысяч сценариев использования. В таких больших системах неизбежно возникновение ошибок. Их обнаружение - тестирование, является важной задачей поскольку
эти ошибки могут привести не только к неудовольствию пользователей, но и к потере
прибыли.
Самым простым способом тестирования является ручное тестирование. Тестировщик
заходит на какую-нибудь страницу сайта, заполняет формы и нажимает на кнопки,
пытаясь найти некорректное поведение. Минусами данного подхода являются крайне
высокие затраты человеческих ресурсов и низкое качество.
Более продвинутым способом модульные тесты. Их использование значительно автоматизирует процесс тестирования, увеличивает количество находимых ошибок и
обеспечивает большое покрытие. Однако, при внесении изменений в сайт требуется
также обновить и тесты. Поддержка модульных тестов также требует усилий человека.
В идеале тестирующая система будет без участия человека обнаруживать ошибки и
подстраиваться под изменения. Реализацией такой системы является Magick Tester,
разработанный в компании Яндекс. В качестве входных данных MT принимает совокупность однотипных веб-страниц (например, странице товаров в Яндекс-Маркете) и
выделяет свойства, общие для почти всех страниц из этой совокупности. Отсутствие
одного из свойств для какой-либо страницы сигнализирует о наличии ошибки.
В данной работе будет предложен улучшенный алгоритм выделения свойств.
2. Постановка задачи
Пусть P = {p1 . . . pn } - набор однотипных веб-страниц. Используемый в Яндекс
алгоритм разбивает страницы на m блоков - похожих элементов, присутствующих
на большом количестве веб-страниц. Пусть Bij - текст заключенный в j-м блоке iй страницы (если блок j отсутствует в i-й странице, положим Bij = ϵ). Требуется
построить набор правил R = {r1 . . . rp }, ri : P → {true, f alse}, таких что: ri (pj ) = true
для большого числа страниц p ∈ P
3. Существующее решение
В настоящий момент в Яндексе генерируются утверждения двух типов:
1. Блок А всегда есть на странице
2. Если есть блок А, то есть блок В
Этот алгоритм выделяет простые закономерности и успешно находит простые
ошибки. Однако, он не использует текст внутри блоков, и, следовательно, не может находить сложные семантические ошибки. В данной работе была предпринята
попытка исправть этот недостаток.
4. Описание алгоритма
Алгоритм генерирует утверждения вида C1 &C2 & . . . Ck & → D. Здесь Ci и D выражения одного из двух типов:
1. Блок j присутствует на странице
2. Блок j содержит слово s
Для генерации утверждений используется генетический алгоритм. Особями в нем
являются генерируемые утверждения. Функция приспособленности Fitness определяется следующим образом: F itness(r) = score + α ∗ lef tScore где score - количество
страниц p ∈ P для которых r(p) = true, а leftScore - количество страниц для которых
выполняется левая часть утверждения r.
4.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 особей по изложенному выше алгоритму.
4.2. Мутация
Мутация особи r происходит следующим образом:
1. Случайно выбрать одно из выражений C1 . . . C2 или D, в котором произойдет
мутация
2. Заменить это выражение на новое как при генерации особи
4.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
4.4. Отбор
Отбор (селекция) в популяции P = {P1 . . . Pn } происходит следующим образом:
1. Определить целовой размер популяции m
2. Упорядочить особи pi по убывания F itness(Pi )
3. Оставить первые m особей в популяции
4.5. Алгоритм
1. Сгенерировать начальную популяцию P размера N
2. Повторять:
(a) Для каждой особи p ∈ P с вероятностью pMutation произвести ее мутацию
(b) Добавить в популяцию результаты скрещивания nCrossover случайных пар
особей популяции
(c) Отбором уменьшить размер популяции до N
5. Результаты и планы
Разработан алгоритм, генерирующий правила для тестирования веб-страниц, выделяющий как закономерности которые находит ныне используемый алгоритм, так и
более сложные. В будущем планируется подобрать оптимальные параметры алгоритма и провести тестирование на реальных данных.
6. Список литературы
• 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
Download