Автоматическое исправление ошибок - Automatic bug fixing

Автоматическое исправление ошибок это автоматический ремонт из программные ошибки без вмешательства человека-программиста.[1][2] Его также обычно называют автоматическая генерация патчей, автоматическое исправление ошибок, или же автоматический программный ремонт.[3][4] Типичная цель таких методов - автоматически генерировать правильные патчи устранить ошибки в программное обеспечение не вызывая программная регрессия.[5]

Технические характеристики

Автоматическое исправление ошибок выполняется в соответствии со спецификацией ожидаемого поведения, которое может быть, например, формальная спецификация или тестирование.[6]

Набор тестов - пары ввода / вывода определяют функциональность программы, возможно, зафиксированную в утверждения может использоваться как тестовый оракул вести поиск. Этот оракул фактически можно разделить на ошибка оракул который выявляет неправильное поведение, а оракул регресса, который инкапсулирует функциональность, которую должен сохранить любой метод восстановления программы. Обратите внимание, что набор тестов обычно неполный и не охватывает все возможные случаи. Следовательно, проверенный патч часто может выдавать ожидаемые выходные данные для всех входных данных в наборе тестов, но неправильные выходные данные для других входных данных.[7] Существование таких проверенных, но некорректных исправлений является серьезной проблемой для методов генерации и проверки.[7] Недавние успешные методы автоматического исправления ошибок часто полагаются на дополнительную информацию, отличную от набора тестов, такую ​​как информация, полученная из предыдущих исправлений, выполненных человеком, для дальнейшего выявления правильных исправлений среди проверенных исправлений.[8]

Другой способ указать ожидаемое поведение - использовать формальные спецификации[9][10] Проверка на соответствие полным спецификациям, которые определяют поведение всей программы, включая функциональные возможности, менее распространена, поскольку такие спецификации, как правило, недоступны на практике, и затраты на их вычисление проверка непомерно. Однако для определенных классов ошибок часто доступны неявные частичные спецификации. Например, существуют целевые методы исправления ошибок, подтверждающие, что исправленная программа больше не может вызывать ошибки переполнения в том же пути выполнения.[11]

Методы

Сгенерировать и проверить

Подходы генерации и проверки компилируют и тестируют каждый патч-кандидат, чтобы собрать все проверенные патчи, которые дают ожидаемые результаты для всех входных данных в наборе тестов.[6][7] Такой метод обычно начинается с набора тестов программы, т. Е. Набора контрольные примеры, хотя бы один из которых обнаруживает ошибку.[6][8][12][13] GenProg - одна из первых систем для создания и проверки ошибок.[6] Эффективность методов генерации и-Validate остается спорной, так как они, как правило, не обеспечивают гарантии правильности исправления.[7][14] Тем не менее, опубликованные результаты новейших современных методов в целом обнадеживают. Например, для систематически собранных 69 реальных ошибок в восьми крупных программах на языке C современная система исправления ошибок Prophet генерирует правильные исправления для 18 из 69 ошибок.[8]

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

Другой способ создания исправлений-кандидатов состоит в использовании шаблонов исправлений. Шаблоны исправлений обычно представляют собой предварительно определенные изменения для исправления определенных классов ошибок.[16] Примеры шаблонов исправлений включают вставку Условный оператор чтобы проверить, является ли значение переменной нулевым, чтобы исправить исключение нулевого указателя, или измените целочисленную константу на единицу, чтобы исправить ошибки, не соответствующие размеру.[16] Также можно автоматически добывать шаблоны исправлений для подходов генерации и проверки.[17][18]

Многие методы генерации и проверки полагаются на понимание избыточности: код исправления можно найти в другом месте приложения. Эта идея была представлена ​​в системе Genprog, где два оператора, добавление и замена узлов AST, были основаны на коде, взятом из другого места (то есть добавлении существующего узла AST). Эта идея была подтверждена эмпирически с помощью двух независимых исследований, которые показали, что значительная часть коммитов (3–17%) состоит из существующего кода.[19][20] Помимо того факта, что код для повторного использования существует где-то еще, также было показано, что контекст потенциальных ингредиентов восстановления полезен: часто контекст донора аналогичен контексту получателя.[21][22]

На основе синтеза

Существуют техники ремонта, основанные на символическом исполнении. Например, Semfix[23] использует символическое выполнение для извлечения исправления ограничения. Анжеликс[24] представила концепцию ангельского леса для работы с многострочными патчами.

При определенных допущениях можно сформулировать проблему ремонта как задачу синтеза.[23] и Нопол[25] использует компонентный синтез.[26]Dynamoth[27] использует динамический синтез.[28]S3[29] основан на синтаксическом синтезе.[30]SearchRepair[31] преобразует потенциальные исправления в формулу SMT и запрашивает исправления-кандидаты, которые позволяют пропатченной программе пройти все предоставленные тестовые примеры.

На основе данных

Машинное обучение методы могут повысить эффективность систем автоматического исправления ошибок.[8] Один из примеров таких методов основан на прошлых успешных исправлениях от разработчиков-людей, собранных из Открытый исходный код репозитории в GitHub и SourceForge.[8] Затем он использует полученную информацию для распознавания и определения приоритета потенциально правильных исправлений среди всех сгенерированных исправлений-кандидатов.[8] В качестве альтернативы патчи можно добывать напрямую из существующих источников. Примеры подходов включают патчи для майнинга из приложений-доноров[11] или с веб-сайтов QA.[32]

SequenceR использует последовательное обучение в исходном коде для создания однострочных патчей.[33] Он определяет архитектуру нейронной сети, которая хорошо работает с исходным кодом, с механизмом копирования, который позволяет создавать патчи с токенами, которых нет в изученном словаре. Эти токены взяты из кода ремонтируемого класса Java.

Другой

Целевые методы автоматического исправления ошибок позволяют исправить определенные классы ошибок, например: исключение нулевого указателя[34][35][16] целочисленное переполнение ,[11] переполнение буфера ,[11] утечка памяти ,[36] и т. д. Такие методы часто используют шаблоны эмпирических исправлений для исправления ошибок в целевой области. Например, вставьте Условный оператор чтобы проверить, является ли значение переменной нулевым[16] или вставьте отсутствующие операторы освобождения памяти.[36] По сравнению с методами генерации и проверки, целевые методы, как правило, имеют лучшую точность исправления ошибок, но значительно сужают область применения.[7][36]

Использовать

Есть несколько вариантов использования автоматического исправления ошибок:

  • в среде разработки: когда разработчик обнаруживает ошибку, она активирует функцию для поиска патча (например, нажав кнопку). Этот поиск может происходить даже в фоновом режиме, когда среда IDE активно ищет решения потенциальных проблем, не дожидаясь явных действий разработчика.[37]
  • на сервере непрерывной интеграции: при сбое сборки во время непрерывной интеграции можно попытаться выполнить поиск исправления сразу после сбоя сборки. Если поиск успешен, патч передается разработчику до того, как она начнет работу над ним или до того, как она найдет решение.[38] Когда синтезированный патч предлагается разработчикам в качестве запроса на вытягивание, помимо изменений кода должно быть предоставлено объяснение (например, заголовок и описание запроса на извлечение).[39] Эксперимент показал, что сгенерированные патчи могут быть приняты разработчиками с открытым исходным кодом и объединены в репозиторий кода.[40]
  • во время выполнения: когда сбой происходит во время выполнения, можно найти двоичный патч и применяется онлайн. Примером такой системы ремонта является ClearView,[41] который восстанавливает код x86 с помощью двоичных исправлений x86. Система Итцаля[42] отличается от Clearview: в то время как поиск исправлений происходит во время выполнения, в производственной среде производимые исправления находятся на уровне исходного кода. Система BikiniProxy выполняет оперативное исправление ошибок Javascript, возникающих в браузере.[43]

Пространство поиска

По сути, автоматическое исправление ошибок - это поисковая деятельность, будь то дедуктивная или эвристическая. Область поиска автоматического исправления ошибок состоит из всех изменений, которые могут быть внесены в программу. Были проведены исследования, чтобы понять структуру этого поискового пространства. Qi et al.[44] показал, что исходная фитнес-функция Genprog не лучше случайного поиска для управления поиском. Martinez et al.[45] исследовал дисбаланс между возможными ремонтными действиями, показав его значительное влияние на поиск. Лонг и др.[46] Исследование показало, что правильные исправления можно рассматривать как редкие в пространстве поиска и что неправильные исправления с переобучением гораздо более многочисленны (см. также обсуждение переобучения ниже).

Если явно перечислить все возможные варианты в алгоритме восстановления, это определяет пространство разработки для восстановления программы.[47] Каждый вариант выбирает алгоритм, задействованный в какой-то момент в процессе исправления (например, алгоритм локализации неисправности), или выбирает конкретную эвристику, которая дает разные исправления. Например, в области проектирования восстановления программы с помощью генерации и проверки существует одна точка вариации в отношении степени детализации изменяемых элементов программы: выражения, оператора, блока и т. Д.[47]

Ограничения автоматического исправления ошибок

Методы автоматического исправления ошибок, основанные на наборе тестов, не обеспечивают гарантии правильности исправлений, поскольку набор тестов является неполным и не охватывает все случаи.[7] Слабый набор тестов может привести к тому, что методы генерации и проверки будут создавать проверенные, но неправильные исправления, которые имеют негативные последствия, такие как устранение желаемых функций, утечка памяти и введение уязвимостей безопасности.[7] Один из возможных подходов состоит в том, чтобы усилить набор неудачных тестов путем автоматической генерации дополнительных тестовых примеров, которые затем помечаются как пройденные или неуспешные. Чтобы свести к минимуму усилия человека по маркировке, автоматический тестовый оракул может быть обучен, который постепенно учится автоматически классифицировать тестовые примеры как пройденные или неуспешные и вовлекает пользователя, сообщающего об ошибках, только в неопределенных случаях.[48]

Иногда при ремонте программ на основе набора тестов инструменты генерируют исправления, которые проходят набор тестов, но на самом деле являются некорректными, это называется проблемой «переобучения».[49] «Переобучение» в этом контексте относится к тому факту, что патч переоснащается тестовым входам. Существуют разные виды переобучения:[50] неполное исправление означает, что исправлены только некоторые ошибочные входные данные, введение регрессии означает, что некоторые ранее работавшие функции перестали работать после исправления (потому что они были плохо протестированы). Ранние прототипы для автоматического ремонта сильно страдали от переоснащения: в тесте Manybugs C Qi et al.[7] сообщил, что 104/110 вероятных патчей GenProg переоснащены; по тесту Java Defects4J Мартинес и др.[51] сообщил, что 73/84 правдоподобных исправлений переобучены. В контексте репарации на основе синтеза Le et al.[52] получено более 80% исправлений переобучения.

Еще одно ограничение систем генерации и проверки - это взрыв поискового пространства.[46] Для программы необходимо изменить большое количество операторов, и для каждого оператора существует большое количество возможных модификаций. Современные системы решают эту проблему, предполагая, что для исправления ошибки достаточно небольшой модификации, что приводит к сокращению пространства поиска.

Ограниченность подходов, основанных на символическом анализе[23][24] заключается в том, что программы реального мира часто преобразуются в трудноразрешимые большие формулы, особенно для изменения операторов с помощью побочные эффекты.

Контрольные точки

Тесты ошибок обычно сосредоточены на одном конкретном языке программирования. В тесте C Manybugs, собранном авторами GenProg, содержится 69 реальных дефектов, и он широко используется для оценки многих других инструментов для исправления ошибок для C.[15][8][13][24]

В Java основным тестом является Defects4J, первоначально исследованный Мартинесом и др.,[51] и теперь широко используется в большинстве исследовательских работ по ремонту программ для Java.[22][53] Существуют альтернативные тесты, такие как тест Quixbugs,[54] который содержит оригинальные ошибки для ремонта программы.[55] Другие тесты для выявления ошибок Java включают Bugs.jar,[56] на основе прошлых коммитов и МЕДВЕДЕЙ[57] который является эталоном сбоев при непрерывной интеграции.

Примеры инструментов

Автоматическое исправление ошибок - активная тема исследований в области компьютерных наук. Существует множество реализаций различных методов исправления ошибок, особенно для программ на C и Java. Обратите внимание, что большинство из этих реализаций являются исследовательскими прототипами для демонстрации своих методов, то есть неясно, готовы ли их текущие реализации для промышленного использования или нет.

C

  • ClearView:[41] Инструмент для создания и проверки бинарных исправлений для развернутых систем. Он оценивается по 10 случаям уязвимости безопасности. Более позднее исследование показывает, что он генерирует правильные исправления как минимум для 4 из 10 случаев.[7]
  • GenProg:[6][15] Отличный инструмент для исправления ошибок. Он был тщательно изучен в контексте теста ManyBugs.
  • SemFix:[23] Первый инструмент для исправления ошибок на основе решателя для C.
  • CodePhage:[11] Первый инструмент для исправления ошибок, который напрямую передает код между программами для создания патча для программы C. Обратите внимание, что хотя он генерирует патчи C, он может извлекать код из бинарные программы без исходного кода.[11]
  • LeakFix:[36] Инструмент, который автоматически устраняет утечки памяти в программах на языке C.
  • Пророк:[8] Первый инструмент генерации и проверки, который использует методы машинного обучения для извлечения полезных знаний из прошлых человеческих патчей для распознавания правильных патчей. Он оценивается на том же тесте, что и GenProg, и генерирует правильные исправления (т. Е. Эквивалентные человеческим заплатам) в 18 из 69 случаев.[8]
  • ПоискРемонт:[31] Инструмент для замены ошибочного кода фрагментами кода из других источников. Оценивается на тесте IntroClass.[58] и генерирует патчи более высокого качества на этом тесте, чем GenProg, RSRepair и AE.
  • Анжеликс:[24] Улучшенный инструмент для исправления ошибок на основе решателя. Он оценивается на тесте GenProg. В 10 из 69 случаев он генерирует пятна, эквивалентные человеческим пятнам.
  • Learn2Fix:[48] Первый полуавтоматический инструмент для ремонта без участия человека. Расширяет GenProg для изучения условий, при которых наблюдается семантическая ошибка, путем систематических запросов к пользователю, сообщающему об ошибке. Работает только для программ, которые принимают и производят целые числа.

Ява

  • PAR:[16] Инструмент для создания и проверки, использующий набор вручную определенных шаблонов исправлений. В более позднем исследовании были высказаны опасения по поводу возможности обобщения шаблонов исправлений в PAR.[14]
  • НОПОЛ:[25] Инструмент на основе решателя, ориентированный на изменение операторов условий.
  • QACrashFix:[32] Инструмент, который исправляет ошибки сбоя Java, добывая исправления с веб-сайта Q&A.
  • Астор:[59] Библиотека автоматического восстановления для Java, содержащая jGenProg, Java-реализацию GenProg.
  • NpeFix:[60] Инструмент автоматического исправления NullPointerException в Java, доступный на Github.

Другие языки

  • AutoFixE:[9] Инструмент для исправления ошибок для Эйфелева язык. Он полагается на контракты (то есть форму формальной спецификации) в программах Eiffel для проверки сгенерированных исправлений.

Проприетарный

  • DeepCode объединяет общедоступные и частные GitHub, GitLab и Bitbucket репозитории для выявления исправлений кода и улучшения программного обеспечения.[61]

Рекомендации

  1. ^ Ринард, Мартин К. (2008). "Техническая перспектива Патчинг программные ошибки ". Коммуникации ACM. 51 (12): 86. Дои:10.1145/1409360.1409381. S2CID  28629846.
  2. ^ Харман, Марк (2010). «Автоматизированные методы исправления». Коммуникации ACM. 53 (5): 108. Дои:10.1145/1735223.1735248. S2CID  9729944.
  3. ^ Монперрус, Мартин (2018). «Автоматический ремонт программного обеспечения». Опросы ACM Computing. 51 (1): 1–24. arXiv:1807.00515. Дои:10.1145/3105906. S2CID  216145256.
  4. ^ Газзола, Лука; Микуччи, Даниэла; Мариани, Леонардо (2019). «Автоматическое восстановление программного обеспечения: обзор» (PDF). IEEE Transactions по разработке программного обеспечения. 45 (1): 34–67. Дои:10.1109 / TSE.2017.2755013. HDL:10281/184798. S2CID  57764123.
  5. ^ Тан, Шин Хвэй; Ройчоудхури, Абхик (2015). "Relifix: Автоматический ремонт программных регрессий". 2015 IEEE / ACM 37-я Международная конференция IEEE по разработке программного обеспечения. IEEE. С. 471–482. Дои:10.1109 / ICSE.2015.65. ISBN  978-1-4799-1934-5. S2CID  17125466.
  6. ^ а б c d е ж Веймер, Уэстли; Нгуен, ТханьВу; Ле Гуэ, Клэр; Форрест, Стефани (2009). «Автоматический поиск патчей с помощью генетического программирования». Материалы 31-й Международной конференции по программной инженерии. IEEE. С. 364–374. CiteSeerX  10.1.1.147.8995. Дои:10.1109 / ICSE.2009.5070536. ISBN  978-1-4244-3453-4. S2CID  1706697.
  7. ^ а б c d е ж грамм час я Ци, Цзычао; Длинные, веерные; Ахур, Сара; Ринард, Мартин (2015). «Анализ правдоподобия и правильности исправлений для систем генерации и проверки исправлений». Материалы Международного симпозиума по тестированию и анализу программного обеспечения 2015 г.. ACM. CiteSeerX  10.1.1.696.5616. Дои:10.1145/2771783.2771791. ISBN  978-1-4503-3620-8. S2CID  6845282.
  8. ^ а б c d е ж грамм час я j Длинные, веерные; Ринард, Мартин (2016). «Автоматическая генерация патчей путем изучения правильного кода». Материалы 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования. ACM. С. 298–312. Дои:10.1145/2837614.2837617. ISBN  978-1-4503-3549-2. S2CID  6091588.
  9. ^ а б Пей, Ю; Furia, Carlo A .; Нордио, Мартин; Вэй, Йи; Мейер, Бертран; Целлер, Андреас (май 2014 г.). «Автоматическая фиксация программ с контрактами». IEEE Transactions по разработке программного обеспечения. 40 (5): 427–449. arXiv:1403.1117. Bibcode:2014arXiv1403.1117P. Дои:10.1109 / TSE.2014.2312918. S2CID  53302638.CS1 maint: ref = harv (связь)
  10. ^ «Ремонт структуры данных на основе контрактов с использованием сплава». CiteSeerX  10.1.1.182.4390. Цитировать журнал требует | журнал = (помощь)
  11. ^ а б c d е ж Сидироглу, Стелиос; Лахтинен, Эрик; Длинные, веерные; Ринард, Мартин (2015). «Автоматическое устранение ошибок с помощью передачи кода нескольких приложений». Материалы 36-й конференции ACM SIGPLAN по разработке и реализации языков программирования.CS1 maint: ref = harv (связь)
  12. ^ Ци, Юйхуа; Мао, Сяогуан; Лей, Ян; Дай, Цзыин; Ван, Чэнсон (2014). «Сила случайного поиска по автоматизированному ремонту программ». Материалы 36-й Международной конференции по программной инженерии. ICSE 2014. Остин, Техас: ACM. С. 254–265. Дои:10.1145/2568225.2568254. ISBN  978-1-4503-2756-5. S2CID  14976851.CS1 maint: ref = harv (связь)
  13. ^ а б c Длинные, веерные; Ринард, Мартин (2015). «Поэтапный программный ремонт с синтезом условий». Труды 10-го совместного совещания по основам программной инженерии, 2015 г.. ESEC / FSE 2015. Бергамо, Италия: ACM. С. 166–178. CiteSeerX  10.1.1.696.9059. Дои:10.1145/2786805.2786811. ISBN  978-1-4503-3675-8. S2CID  5987616.CS1 maint: ref = harv (связь)
  14. ^ а б Монперрус, Мартин (2014). «Критический обзор« Автоматическая генерация патчей, извлеченная из рукописных исправлений »: эссе по постановке проблемы и оценке автоматического восстановления программного обеспечения». Материалы 36-й Международной конференции по программной инженерии. ICSE 2014. Нью-Йорк, Нью-Йорк: ACM. С. 234–242. arXiv:1408.2103. Дои:10.1145/2568225.2568324. ISBN  978-1-4503-2756-5. S2CID  13355761.CS1 maint: ref = harv (связь)
  15. ^ а б c Ле Гуэ, Клэр; Дьюи-Фогт, Майкл; Форрест, Стефани; Веймер, Уэстли (2012). «Систематическое исследование автоматического исправления программ: исправление 55 из 105 ошибок по 8 долларов каждая». 2012 34-я Международная конференция по программной инженерии (ICSE). IEEE. С. 3–13. CiteSeerX  10.1.1.661.9690. Дои:10.1109 / ICSE.2012.6227211. ISBN  978-1-4673-1067-3. S2CID  10987936.
  16. ^ а б c d е Ким, Донгсун; Нам, Джаечанг; Сонг, Джэу; Ким, Сунгхун (2013). «Автоматическая генерация патчей, полученная на основе написанных человеком патчей». Материалы Международной конференции по программной инженерии 2013 г.. ICSE '13'. IEEE Press. С. 802–811. ISBN  978-1-4673-3076-3.CS1 maint: ref = harv (связь)
  17. ^ Мартинес, Матиас; Монперрус, Мартин (2018), «Сверхбольшое пространство для поиска ремонта с использованием автоматически созданных шаблонов: режим Cardumen Astor», Разработка программного обеспечения на основе поиска, Springer International Publishing, стр. 65–86, arXiv:1712.03854, Дои:10.1007/978-3-319-99241-9_3, ISBN  9783319992402, S2CID  49651730
  18. ^ Коюнджу, Анил; Лю, Куй; Bissyandé, Tegawendé F .; Ким, Донгсун; Кляйн, Жак; Монперрус, Мартин; Ле Траон, Ив (2020). «FixMiner: разработка соответствующих шаблонов исправлений для автоматического восстановления программ». Эмпирическая разработка программного обеспечения. 25 (3): 1980–2024. arXiv:1810.01791. Дои:10.1007 / s10664-019-09780-z. S2CID  52915728.
  19. ^ Мартинес, Матиас; Веймер, Уэстли; Монперрус, Мартин (2014). «Существуют ли уже компоненты исправления? Эмпирическое исследование предположений об избыточности подходов к исправлению программ». Материалы 36-й Международной конференции по программной инженерии. С. 492–495. arXiv:1403.6322. Дои:10.1145/2591062.2591114. ISBN  9781450327688. S2CID  9533437.
  20. ^ Барр, Эрл Т .; Брун, Юрий; Деванбу, Премкумар; Харман, Марк; Сарро, Федерика (2014). «Гипотеза пластической хирургии». Материалы 22-го Международного симпозиума ACM SIGSOFT по основам программной инженерии - FSE 2014. С. 306–317. CiteSeerX  10.1.1.646.9678. Дои:10.1145/2635868.2635898. ISBN  9781450330565. S2CID  14002308.
  21. ^ Белый, Мартин; Туфано, Микеле; Мартинес, Матиас; Монперрус, Мартин; Пошиваник, Денис (2019). «Сортировка и преобразование компонентов восстановления программы с помощью сходства кода глубокого обучения». 26-я Международная конференция по анализу, эволюции и реинжинирингу программного обеспечения, IEEE, 2019 г. (SANER). С. 479–490. arXiv:1707.04742. Дои:10.1109 / SANER.2019.8668043. ISBN  978-1-7281-0591-8. S2CID  13578285.
  22. ^ а б Вен, Мин; Чен, Цзюньцзе; Ву, Ронгсинь; Хао, Дан; Чунг, Шинг-Чи (2018). «Создание обновлений с учетом контекста для лучшего автоматического восстановления программ». Материалы 40-й Международной конференции по программной инженерии - ICSE '18. Нью-Йорк, Нью-Йорк, США: ACM Press: 1–11. Дои:10.1145/3180155.3180233. ISBN  9781450356381. S2CID  3374770.
  23. ^ а б c d Нгуен, Хоанг Зыонг Тхиен; Ци, Давэй; Ройчоудхури, Абхик; Чандра, Сатиш (2013). «SemFix: восстановление программ с помощью семантического анализа». Материалы Международной конференции по программной инженерии 2013 г.. ICSE '13'. Сан-Франциско, Калифорния: IEEE Press. С. 772–781. ISBN  978-1-4673-3076-3.CS1 maint: ref = harv (связь)
  24. ^ а б c d Мечтаев, Сергей; Йи, Чжуён; Ройчоудхури, Абхик (2016). «Angelix: масштабируемый синтез многострочной программы с помощью символьного анализа». Материалы 38-й Международной конференции по разработке программного обеспечения, ICSE 2016, Остин, Техас, 14-22 мая 2016 г.. С. 691–701.CS1 maint: ref = harv (связь)
  25. ^ а б Сюань, Цзифэн; Мартинес, Матиас; Демарко, Фавио; Клеман, Максим; Ламелас, Себастьян; Дюрье, Томас; Ле Бер, Даниэль; Монперрус, Мартин (2016). «Nopol: автоматическое исправление ошибок условных операторов в программах на Java». IEEE Transactions по разработке программного обеспечения. 43: 34–55. arXiv:1811.04211. Дои:10.1109 / TSE.2016.2560811. S2CID  15132155.CS1 maint: ref = harv (связь)
  26. ^ Джа, Сусмит; Гулвани, Сумит; Seshia, Sanjit A .; Тивари, Ашиш (01.05.2010). Компонентный синтез программ под управлением Oracle. ACM. С. 215–224. Дои:10.1145/1806799.1806833. ISBN  9781605587196. S2CID  6344783.
  27. ^ Дюрье, Томас; Монперрус, Мартин (2016-05-14). «ДинаМот». DynaMoth: динамический синтез кода для автоматического восстановления программ (PDF). С. 85–91. Дои:10.1145/2896921.2896931. ISBN  9781450341516. S2CID  16025812.
  28. ^ Галенсон, Джоэл; Реамс, Филип; Бодик, Растислав; Хартманн, Бьёрн; Сен, Кушик (31.05.2014). CodeHint: динамический и интерактивный синтез фрагментов кода. ACM. С. 653–663. Дои:10.1145/2568225.2568250. ISBN  9781450327565. S2CID  10656182.
  29. ^ Le, Xuan-Bach D .; Чу, Дык-Хип; Ло, Дэвид; Ле Гуэ, Клэр; Виссер, Виллем (21.08.2017). Труды 11-го совместного совещания по основам программной инженерии 2017 г. - ESEC / FSE 2017. ACM. С. 593–604. Дои:10.1145/3106237.3106309. ISBN  9781450351058. S2CID  1503790.
  30. ^ Алур, Раджив; Бодик, Растислав; Джунивал, Гарвит; Мартин, Майло М. К .; Рагхотаман, Мукунд; Seshia, Sanjit A .; Сингх, Ришаб; Солар-Лезама, Армандо; Торлак, Эмина; Удупа, Абхишек (2013). «Синтаксически управляемый синтез». 2013 Формальные методы в автоматизированном проектировании. С. 1–8. CiteSeerX  10.1.1.377.2829. Дои:10.1109 / fmcad.2013.6679385. ISBN  9780983567837.
  31. ^ а б Ке, Ялин; Столи, Кэтрин; Ле Гуэ, Клэр; Брун, Юрий (2015). «Восстановление программ с помощью семантического поиска кода». Материалы 30-й Международной конференции IEEE / ACM 2015 года по автоматизированной разработке программного обеспечения. ASE 2015. Линкольн, Небраска: ACM. С. 295–306. Дои:10.1109 / ASE.2015.60. ISBN  978-1-5090-0025-8. S2CID  16361458.CS1 maint: ref = harv (связь)
  32. ^ а б Гао, Цин; Чжан, Ханьшэн; Ван, Цзе; Сюн, Инфэй; Чжан, Лу; Мэй, Хонг (2015). «Исправление повторяющихся сбоев с помощью анализа сайтов вопросов и ответов». 2015 30-я Международная конференция IEEE / ACM по автоматизированной разработке программного обеспечения (ASE). IEEE. С. 307–318. Дои:10.1109 / ASE.2015.81. ISBN  978-1-5090-0025-8. S2CID  2513924.
  33. ^ Чен, Зимин; Коммруш, Стив Джеймс; Туфано, Микеле; Пуше, Луи-Ноэль; Пошиваник, Денис; Монперрус, Мартин (2019). «SEQUENCER: Последовательное обучение для непрерывного восстановления программы». IEEE Transactions по разработке программного обеспечения: 1. arXiv:1901.01808. Дои:10.1109 / TSE.2019.2940179. ISSN  0098-5589. S2CID  57573711.
  34. ^ Длинные, веерные; Сидироглу-Дускос, Стелиос; Ринард, Мартин (2014). «Автоматическое исправление и локализация ошибок во время выполнения с помощью программы восстановления». Материалы 35-й конференции ACM SIGPLAN по разработке и реализации языков программирования. PLDI '14'. Нью-Йорк, Нью-Йорк: ACM. С. 227–238. Дои:10.1145/2594291.2594337. ISBN  978-1-4503-2784-8. S2CID  6252501.CS1 maint: ref = harv (связь)
  35. ^ Добрый, Кинга; Веймер, Уэстли (2008). «Изменение семантики Java для обработки исключений с нулевым указателем». 2008 19-й Международный симпозиум по проектированию надежности программного обеспечения (ISSRE). С. 47–56. CiteSeerX  10.1.1.147.6158. Дои:10.1109 / ISSRE.2008.59. S2CID  1454939.
  36. ^ а б c d Гао, Цин; Сюн, Инфэй; Ми, Яцин; Чжан, Лу; Ян, Вэйкун; Чжоу, Чжаопин; Се, Бин; Мэй, Хонг (2015). «Безопасное исправление утечки памяти для программ на языке C». Труды 37-й Международной конференции по программной инженерии - Том 1. ICSE '15'. Пискатауэй, Нью-Джерси: IEEE Press. С. 459–470. ISBN  978-1-4799-1934-5.CS1 maint: ref = harv (связь)
  37. ^ Мушлу, Кыванч; Брун, Юрий; Холмс, Рид; Эрнст, Майкл Д .; Ноткин, Дэвид; Мушлу, Кыванч; Брун, Юрий; Холмс, Рид; Эрнст, Майкл Д .; Ноткин, Дэвид (19 октября 2012 г.). «Спекулятивный анализ рекомендаций интегрированной среды разработки. Спекулятивный анализ рекомендаций интегрированной среды разработки». Уведомления ACM SIGPLAN. 47 (10): 669, 669–682, 682. CiteSeerX  10.1.1.259.6341. Дои:10.1145/2384616.2384665. ISSN  0362-1340. S2CID  5795141.
  38. ^ Урли, Саймон; Юй Чжунсин; Сейнтюрье, Лайонел; Монперрус, Мартин (27 мая 2018 г.). "Как создать бота для ремонта программ?". Как создать бота для ремонта программ ?: идеи из проекта Repairnator. С. 95–104. arXiv:1811.09852. Дои:10.1145/3183519.3183540. ISBN  9781450356596. S2CID  49237449.
  39. ^ Монперрус, Мартин (2019). «Объяснимый вклад программных ботов: пример автоматического исправления ошибок». 1-й международный семинар IEEE / ACM по ботам в разработке программного обеспечения (BotSE) 2019. С. 12–15. arXiv:1905.02597. Bibcode:2019arXiv190502597M. Дои:10.1109 / BotSE.2019.00010. ISBN  978-1-7281-2262-5. S2CID  146808763.
  40. ^ Монперрус, Мартин; Урли, Саймон; Дюрье, Томас; Мартинес, Матиас; Бодри, Бенуа; Сейнтюрье, Лайонел (2019). "Repairnator автоматически исправляет программы". Повсеместность. 2019 (Июль): 1–12. arXiv:1910.06247. Bibcode:2019arXiv191006247M. Дои:10.1145/3349589. S2CID  198986312.
  41. ^ а б Perkins, Jeff H .; и другие. (2009). «Автоматическое исправление ошибок в развернутом ПО». Материалы 22-го симпозиума ACM SIGOPS по принципам операционных систем. ACM. С. 87–102. CiteSeerX  10.1.1.157.5877. Дои:10.1145/1629575.1629585. ISBN  978-1-60558-752-3. S2CID  7597529.
  42. ^ Дюрье, Томас; Хамади, Юсеф; Монперрус, Мартин (2017). «Генерация исправлений, ориентированная на производство». 2017 39-я Международная конференция IEEE / ACM по разработке программного обеспечения: новые идеи и отслеживание результатов появляющихся технологий (ICSE-NIER). С. 23–26. arXiv:1812.04475. Дои:10.1109 / icse-nier.2017.8. ISBN  978-1-5386-2675-7. S2CID  7737476.
  43. ^ Дюрье, Томас; Хамади, Юсеф; Монперрус, Мартин (2018). «Полностью автоматизированный перезапись HTML и Javascript для создания самовосстанавливающегося веб-прокси». 29-й Международный симпозиум IEEE 2018 по разработке надежности программного обеспечения (ISSRE). С. 1–12. arXiv:1803.08725. Bibcode:2018arXiv180308725D. Дои:10.1109 / ISSRE.2018.00012. ISBN  978-1-5386-8321-7. S2CID  4268784.
  44. ^ Ци, Юйхуа; Мао, Сяогуан; Лей, Ян; Дай, Цзыин; Ван, Чэнсон (2014-05-31). Сила случайного поиска по автоматическому ремонту программ. ACM. С. 254–265. Дои:10.1145/2568225.2568254. ISBN  9781450327565. S2CID  14976851.
  45. ^ Мартинес, Матиас; Монперрус, Мартин (28 ноября 2013 г.). "Разработка моделей ремонта программного обеспечения для рассуждений о пространстве поиска автоматизированного исправления программ". Эмпирическая разработка программного обеспечения. 20 (1): 176–205. arXiv:1311.3414. Bibcode:2013arXiv1311.3414M. Дои:10.1007 / s10664-013-9282-8. ISSN  1382-3256. S2CID  1676168.
  46. ^ а б Длинные, веерные; Ринард, Мартин (2016). "Анализ пространства поиска для создания и проверки систем генерации патчей". Материалы 38-й Международной конференции по программной инженерии. ICSE '16. Нью-Йорк, Нью-Йорк: ACM. С. 702–713. arXiv:1602.05643. Дои:10.1145/2884781.2884872. HDL:1721.1/113656. ISBN  978-1-4503-3900-1. S2CID  7426809.CS1 maint: ref = harv (связь)
  47. ^ а б Мартинес, Матиас; Монперрус, Мартин (2019). «Astor: Изучение возможностей создания и проверки программ для восстановления после GenProg». Журнал систем и программного обеспечения. 151: 65–80. arXiv:1802.03365. Дои:10.1016 / j.jss.2019.01.069. S2CID  3619320.
  48. ^ а б Бёме, Марсель; Гитал, Чарака; Фам, Ван-Туан (2020). «Автоматический ремонт программы Human-In-The-Loop». Материалы 13-й Международной конференции по тестированию, валидации и верификации программного обеспечения. ICST 2020. Порту, Португалия: IEEE. С. 274–285. arXiv:1912.07758. Дои:10.1109 / ICST46399.2020.00036. ISBN  978-1-7281-5778-8. S2CID  209386817.CS1 maint: ref = harv (связь)
  49. ^ Смит, Эдвард К .; Барр, Эрл Т .; Ле Гуэ, Клэр; Брун, Юрий (2015). «Лекарство хуже болезни? Переоснащение в автоматизированном программном ремонте». Труды 10-го совместного совещания по основам программной инженерии, 2015 г.. ESEC / FSE 2015. Нью-Йорк, Нью-Йорк: ACM. С. 532–543. Дои:10.1145/2786805.2786825. ISBN  978-1-4503-3675-8. S2CID  6300790.CS1 maint: ref = harv (связь)
  50. ^ Юй Чжунсин; Мартинес, Матиас; Данглот, Бенджамин; Дюрье, Томас; Монперрус, Мартин (2018). «Устранение переобучения заплат с помощью автоматического создания тестов: исследование возможности и эффективности системы ремонта Nopol». Эмпирическая разработка программного обеспечения. 24: 33–67. arXiv:1810.10614. Bibcode:2018arXiv181010614Y. Дои:10.1007 / s10664-018-9619-4. ISSN  1382-3256. S2CID  21659819.
  51. ^ а б Мартинес, Матиас; Дюрье, Томас; Соммерар, Ромен; Сюань, Цзифэн; Монперрус, Мартин (2016-10-25). «Автоматическое исправление реальных ошибок в java: масштабный эксперимент над датасетом default4j». Эмпирическая разработка программного обеспечения. 22 (4): 1936–1964. arXiv:1811.02429. Дои:10.1007 / s10664-016-9470-4. ISSN  1382-3256. S2CID  24538587.
  52. ^ Le, Xuan Bach D .; Тунг, Фердиан; Ло, Дэвид; Гуэ, Клэр Ле (2018-03-02). «Переоснащение в автоматизированном ремонте программ на основе семантики». Эмпирическая разработка программного обеспечения. 23 (5): 3007–3033. Дои:10.1007 / s10664-017-9577-2. ISSN  1382-3256. S2CID  3635768.
  53. ^ Хуа, Цзиньру; Чжан, Мэнши; Ван, Кайюань; Хуршид, Сарфраз (2018). «К практическому ремонту программ с генерацией кандидатов по запросу». Материалы 40-й Международной конференции по программной инженерии - ICSE '18. Нью-Йорк, Нью-Йорк, США: ACM Press: 12–23. Дои:10.1145/3180155.3180245. ISBN  9781450356381. S2CID  49666327.
  54. ^ Лин, Деррик; Коппел, Джеймс; Чен, Анджела; Солар-Лезама, Армандо (2017). «QuixBugs: набор тестов для восстановления многоязычной программы, основанный на задаче quixey». Труды Международной конференции ACM SIGPLAN 2017 года по системам, программированию, языкам и приложениям: Программное обеспечение для человечества - SPLASH Companion 2017. Нью-Йорк, Нью-Йорк, США: ACM Press: 55–56. Дои:10.1145/3135932.3135941. ISBN  9781450355148.
  55. ^ Йе, Он; Мартинес, Матиас; Дюрье, Томас; Монперрус, Мартин (2021). «Комплексное исследование автоматического восстановления программ на тесте QuixBugs». Журнал систем и программного обеспечения. 171: 110825. arXiv:1805.03454. Дои:10.1016 / j.jss.2020.110825.
  56. ^ Saha, Ripon K .; Лю, Инцзюнь; Лам, Крыло; Ёсида, Хироаки; Прасад, Мукул Р. (2018). «Bugs.jar: крупномасштабный и разнообразный набор данных о реальных ошибках Java». Материалы 15-й Международной конференции по репозиториям программного обеспечения для майнинга. MSR '18: 10–13. Дои:10.1145/3196398.3196473. ISBN  9781450357166. S2CID  50770093.
  57. ^ Мадейрал, Фернанда; Урли, Саймон; Майя, Марсело; Монперрус, Мартин (2019). «BEARS: расширяемый тест на ошибки Java для исследований автоматического исправления программ». 26-я Международная конференция по анализу, эволюции и реинжинирингу программного обеспечения (SANER), 2019 г.. С. 468–478. arXiv:1901.06024. Дои:10.1109 / SANER.2019.8667991. ISBN  978-1-7281-0591-8. S2CID  58028949.
  58. ^ Ле Гуэ, Клэр; Holtschulte, Нил; Смит, Эдвард; Брун, Юрий; Деванбу, Премкумар; Форрест, Стефани; Веймер, Уэстли (2015). "Многие Ошибки и вступление Учебный класс Тесты для автоматического восстановления программ на языке C ». IEEE Transactions по разработке программного обеспечения. 41 (12): 1236–1256. Дои:10.1109 / TSE.2015.2454513.CS1 maint: ref = harv (связь)
  59. ^ Мартинес, Матиас; Монперрус, Мартин (2016). «АСТОР: Библиотека восстановления программ для Java» (PDF). Материалы ISSTA, демонстрационный трек. С. 441–444. Дои:10.1145/2931037.2948705. ISBN  978-1-4503-4390-9. S2CID  7322935.
  60. ^ Дюрье, Томас (2017). «Генерация динамических патчей для исключений нулевого указателя с помощью метапрограммирования». 24-я Международная конференция по анализу, эволюции и реинжинирингу программного обеспечения, IEEE, 2017 (SANER). С. 349–358. arXiv:1812.00409. Дои:10.1109 / SANER.2017.7884635. ISBN  978-1-5090-5501-2. S2CID  2736203.
  61. ^ "ИИ приходит на вашу работу по кодированию". Просеянный. Получено 2019-04-15.

внешняя ссылка

  • программа-ремонт.org наборы данных, инструменты и т. д., связанные с автоматизированным исследованием ремонта программ.