Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Автоматическая ошибка фиксирование является автоматическим восстановлением из ошибок программного обеспечения без вмешательства человека программиста. [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] ввел понятие «ангельский лес», чтобы иметь дело с многострочными патчами.

При определенных предположениях проблему ремонта можно сформулировать как задачу синтеза. SemFix [23] и Nopol [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. Система Itzal [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] на основе прошлых коммитов, и BEARS [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.
  • Prophet: [8] Первый инструмент генерации и проверки, использующий методы машинного обучения для извлечения полезных знаний из прошлых человеческих патчей для распознавания правильных патчей. Он оценивается на том же тесте, что и GenProg, и генерирует правильные исправления (т. Е. Эквивалентные человеческим заплатам) в 18 из 69 случаев. [8]
  • SearchRepair: [31] Инструмент для замены ошибочного кода фрагментами кода из других источников. Он оценивается в тесте IntroClass [58] и генерирует исправления гораздо более высокого качества в этом тесте, чем GenProg, RSRepair и AE.
  • Angelix: [24] Улучшенный инструмент для исправления ошибок на основе решателя. Он оценивается на тесте GenProg. В 10 из 69 случаев он генерирует пятна, эквивалентные человеческим пятнам.
  • Learn2Fix: [48] Первый полуавтоматический инструмент для ремонта. Расширяет GenProg для изучения условий, при которых наблюдается семантическая ошибка, путем систематических запросов к пользователю, сообщающему об ошибке. Работает только для программ, которые принимают и производят целые числа.

Java [ править ]

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

Другие языки [ править ]

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

Собственный [ править ]

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

Ссылки [ править ]

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

Внешние ссылки [ править ]

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