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

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


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

Введение


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

Можно выделить основные направления в области автоматического исправления ошибок:

  • исправляющие определенный класс ошибок;

  • использующие символьное исполнение;

  • системы генерации и валидации исправлений (generate-and-validate systems).

Многие эти системы имеют проблему масштабируемости: инстру- менты, хорошо работающие на маленьких примерах, плохо работают на реальных больших проектах (около 100 тыс. строк кода). Одним из

немногих инструментов, решающих данную проблему, является Prophet[10].

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

Постановка задачи


Целью данной выпускной квалификационной работы является до- бавление поддержки исправления новых классов ошибок в инструмент Prophet[10]. Для достижения данной цели были поставлены следующие задачи.

  • Реализовать генерацию исправлений для новых классов ошибок.

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

  • Провести экспериментальные исследования работы алгоритма.
  1. Обзор предметной области

    1. Основные подходы автоматического исправле- ния ошибок в программном коде


На данный момент область занимающаяся исправлением ошибок бурно развивается.

Основные методы исправления ошибок можно поделить поклас-

су исправляемых ошибок. Есть инструменты, которые направле- ны на исправление конкретных классов ошибок, например на утечки памяти[13], пропуск вызова библиотечной функции[23] и другие[3, 6]. В противоположность им есть системы, исправляющие широкий набор часто встречающихся ошибок. Эти системы можно поделить по вход-нымспецификациям.

Есть два основных подхода специфицирования поведения системы: декларативными спецификациями[1, 14] или тестовым набором. Недо- статком первого подхода является плохая масштабируемость: тяжело написать спецификации для реального большого проекта. Второй под- ход, хотя накладывает более слабые ограничения на проект, требует для корректности работы полноты тестового набора. Данное требова- ние необходимо для отсутствия генерации правдоподобных, но непра- вильных исправлений.

Методы, использующие тестовый набор, можно поделить помето-

дампоискаигенерацииисправлений:

  • методы использующие символьное исполнение[4, 11, 12, 15],

  • системы генерации и валидации исправлений[2, 5, 9, 10, 19, 20]. Оба метода могут работать на больших реальных проектах. Напри-

мер, в программе-анализаторе трафика сети Wireshark около 2814 тыс. строк кода. Основной задачей первого подхода является поиск проти- воречий в исходном коде с помощью символьного исполнения на те- стовом наборе и дальнейшее его решение с помощью smt-решателей[7].

Второй подход направлен на улучшение генерации исправлений и даль- нейшего обхода. Например, среди систем генерации и валидации есть инструменты, которые используют для генерации другие приложения- доноры[2, 5], генетическое программирование[20], алгоритм рандомного поиска[19] или детерминированные алгоритмы[9, 16].

Одна из важных проблем систем генерации и валидации исправле- ний – это генерация правдоподобных исправлений, которые проходят все тесты, но являются неправильными[12, 17]. Например, к таким ис- правлениям относятся исправления, удаляющие функциональность. В результате могут отключаться необходимые проверки или не выпол- няться необходимые действия в коде.

Главная причина генерации и успешного прохождения верификации неправильных исправлений – это неполнота тестового набора. Поэтому важной задачей систем генерации и валидации исправлений является приоритезация правильных исправлений среди правдоподобных. Ин- струмент Prophet[10] хорошо справляется с данной задачей в основном из-за алгоритма ранжирования исправлений, который использует ма- шинное обучение.

    1. 1   2   3   4   5   6   7   8


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