Главная страница

Автоматик коде. СанктПетербургский государственный


Скачать 0.58 Mb.
НазваниеСанктПетербургский государственный
АнкорАвтоматик коде
Дата07.12.2022
Размер0.58 Mb.
Формат файлаdocx
Имя файлаAvtomaticheskoe_ispravlenie_oshibok_v_programmnom_kode.docx
ТипОбзор
#833783
страница5 из 8
1   2   3   4   5   6   7   8

Расширенная модель корректного кода

  1. Новые признаки и их извлечение


Новое исправление изменяет два места в программе: добавляет утвер- ждение перед вызывающим кодом и удаляет утверждение внутри функ- ции, поэтому необходимо при обходе кандидата учитывать и извлекать признаки с двух мест в программе.

Внутри кандидата хранится набор базовых действий, которые необ- ходимы для реализации исправления. При обходе кандидата Prophet учитывал только первое действие, так как второе возможное действие было изменение выражения внутри утверждения, признаки которого извлекались отдельно. В итоге при обходе была добавлена поддержка нескольких различных действий, в результате общий набор признаков можно вычислить по формуле:
F= R+ n M (1)

F общий набор признаков, соответствующий исправлению; R вид исправления;

M все исходные признаки состояния и признаки модификаций без вида исправления;

n максимальное число действий, поддерживаемое изменением (при n = 1 получится исходная формула).

В результате признаков стало 7206 (было 3515) из-за добавления нового вида исправления (MoveStmtRepair) и задания максимального числа действий (n), равное двум.

    1. Обучение модели


Для процесса обучения была добавлена поддержка исправлений ви- да FunctionMutationв скрипт, сравнивающий исправления разработчи- ка с сгенерированным исправлением. Впоследствии с использованием данного скрипта был проведен анализ тренировочной выборки по ви-

дам исправлений, необходимых для исправления ошибки. Результаты показаны в таблице 1.




Таблица 1: Число ошибок каждого вида в тренировочном наборе, где по горизонтали – название проектов из тренировочного датасета, по вертикали вид исправления

В силу того, что примеров для обучения мало и данные в трени- ровочном и тестирующем наборе пересекаются, Prophet для каждого проекта обучает свою модель на общих данных посредством исключе- ния этого проекта из обучающего датасета.

Интересно, что ошибка, требующая инициализации переменной (php- 309516-309535), исправлятся в тестовом наборе данных, несмотря на отсутствие примеров в обучающем датасете. Это можно объяснить от- сутствием в пространстве поиска других исправлений, проходящих все тесты, и использованием ранга локации при подсчете конечной оценки.

В ходе анализа было выявлено, что исправлений вида FunctionMutationв тренировочной выборке нет (единственный пример соответствует ошиб- ке в тестовом наборе). В итоге пришлось добавить искусственные при- меры для обучения модели. Зависимость числа примеров и ранга схемы трансформации3 для правильного исправления для php-308525-308529

3Схемы трансформации включают в себя конкретные схемы изменений и схемы с абстрактным условием. Ранг схемы трансформации порядковый номер схемы трансформации, упорядоченный по вероятностной оценке, где низкий приоритет имеют ранги исправлений наиболее соответствующие успешным исправлениям с высокой оценкой.

показана в таблице 2.



Таблица 2: Зависимость числа дополнительных примеров и ранжиро- вания правильного исправления для php-308525-308529
Среди добавленных примеров первый пример соответствует зануле- нию индекса массива, который передается функции как указатель. Вто- рой пример соответствует присваиванию глобальной переменной значе- ния глобальной константы. В третьем примере происходит обнуление массива внутри объекта, переданного по ссылке в качестве входного параметра функции. В четвертом примере происходит присваивание значения по умолчанию глобальной переменной.

В результате четырех примеров было достаточно для обучения мо- дели. Следует отметить, что все три исправления вида FunctionMutationимеют достаточно высокий ранг схемы трансформации, поэтому не бы- ло необходимости в добавлении новых примеров. Данное наблюдение можно объяснить генерацией малого число исправлений такого вида и следовательно слабым влиянием на среднюю долю кандидатов, ко- торые имеют ранг выше, чем правильное исправление разработчика в тренировочной выборке.
  1. 1   2   3   4   5   6   7   8


написать администратору сайта