Автоматическое исправление ошибок
Автоматическое исправление ошибок — это автоматическое исправление без ошибок в программном обеспечении вмешательства человека-программиста. [1] [2] [3] Его также часто называют автоматической генерацией исправлений , автоматическим исправлением ошибок или автоматическим восстановлением программы . [3] Типичная цель таких методов — автоматическое создание правильных исправлений для устранения ошибок в программах, не вызывая регресса программного обеспечения . [4]
Спецификация
[ редактировать ]Автоматическое исправление ошибок производится в соответствии со спецификацией ожидаемого поведения, которая может быть, например, формальной спецификацией или набором тестов . [5]
Набор тестов — пары ввода/вывода определяют функциональность программы, возможно, записанную в утверждениях, которые можно использовать в качестве тестового оракула для управления поиском. Фактически этот оракул можно разделить на оракул ошибок , который выявляет ошибочное поведение, и оракул регрессии , который инкапсулирует функциональность, которую должен сохранять любой метод восстановления программы. Обратите внимание, что набор тестов обычно неполный и не охватывает все возможные случаи. Таким образом, проверенный патч часто может давать ожидаемые выходные данные для всех входных данных в наборе тестов, но неправильные выходные данные для других входных данных. [6] Существование таких проверенных, но неправильных исправлений является серьезной проблемой для методов создания и проверки. [6] Недавние успешные методы автоматического исправления ошибок часто полагаются на дополнительную информацию, помимо набора тестов, например информацию, полученную из предыдущих исправлений, созданных человеком, для дальнейшего выявления правильных исправлений среди проверенных исправлений. [7]
Другой способ указать ожидаемое поведение — использовать формальные спецификации. [8] [9] Проверка на соответствие полным спецификациям, определяющим все поведение программы, включая функциональные возможности, встречается реже, поскольку такие спецификации обычно недоступны на практике, а вычислительные затраты на такую проверку непомерно высоки. Однако для конкретных классов ошибок часто доступны неявные частичные спецификации. Например, существуют целевые методы исправления ошибок, проверяющие, что исправленная программа больше не может вызывать ошибки переполнения на том же пути выполнения. [10]
Техники
[ редактировать ]Генерация и проверка
[ редактировать ]Подходы «создать и проверить» компилируют и тестируют каждое потенциальное исправление, чтобы собрать все проверенные исправления, которые дают ожидаемые выходные данные для всех входных данных в наборе тестов. [5] [6] Такой метод обычно начинается с набора тестов программы, т. е. набора тестовых примеров , по крайней мере один из которых выявляет ошибку. [5] [7] [11] [12] Одной из первых систем создания и проверки ошибок является GenProg. [5] Эффективность методов создания и проверки остается спорной, поскольку они обычно не дают гарантий правильности исправлений . [6] Тем не менее, сообщаемые результаты новейших современных методов в целом являются многообещающими. Например, при систематическом сборе 69 реальных ошибок в восьми крупных программах на языке C современная система исправления ошибок Prophet генерирует правильные исправления для 18 из 69 ошибок. [7]
Один из способов создания патчей-кандидатов — применить операторы мутации к исходной программе. Операторы мутации манипулируют исходной программой, возможно, через ее представление в виде абстрактного синтаксического дерева или более крупное представление, например, работая на уровне операторов или блоков . Более ранние подходы к генетическому улучшению работали на уровне операторов и выполняли простые операции удаления/замены, такие как удаление существующего оператора или замена существующего оператора другим оператором в том же исходном файле. [5] [13] Последние подходы используют более детальные операторы на уровне абстрактного синтаксического дерева для создания более разнообразного набора возможных исправлений. [12] Примечательно, что оператор мутации удаления оператора и, в более общем плане, удаление кода является разумной стратегией восстановления или, по крайней мере, хорошей стратегией локализации неисправности. [14]
Другой способ создания потенциальных исправлений состоит в использовании шаблонов исправлений. Шаблоны исправлений обычно представляют собой предопределенные изменения для исправления определенных классов ошибок. [15] Примеры шаблонов исправлений включают вставку условного оператора для проверки того, является ли значение переменной нулевым, чтобы исправить исключение нулевого указателя, или изменение целочисленной константы на единицу для исправления ошибок отклонения на единицу. [15]
На основе синтеза
[ редактировать ]Существуют методы ремонта, основанные на символическом исполнении. Например, Семфикс [16] использует символическое выполнение для извлечения ограничения восстановления. Анжеликс [17] представил концепцию ангельского леса для работы с многострочными патчами.
При определенных допущениях можно сформулировать задачу ремонта как задачу синтеза.СемФикс [16] использует компонентный синтез. [18] Dynamoth использует динамический синтез. [19] S3 [20] основан на синтаксически-ориентированном синтезе . [21] ПоискРемонт [22] преобразует потенциальные исправления в формулу SMT и запрашивает возможные исправления, которые позволяют исправленной программе пройти все предоставленные тестовые примеры.
Управляемый данными
[ редактировать ]Методы машинного обучения могут повысить эффективность автоматических систем исправления ошибок. [7] Один из примеров таких методов основан на прошлых успешных патчах от разработчиков-людей, собранных из с открытым исходным кодом репозиториев в GitHub и SourceForge . [7] Затем он использует полученную информацию для распознавания и определения приоритетности потенциально правильных исправлений среди всех созданных исправлений-кандидатов. [7] Альтернативно, патчи могут быть получены напрямую из существующих источников. Примеры подходов включают патчи для майнинга из донорских приложений. [10] или с веб-сайтов контроля качества. [23]
Гетафикс [24] — это языково-независимый подход, разработанный и используемый в Facebook . Учитывая образец кода , в котором инженеры исправляют ошибки определенного типа, он изучает шаблоны исправлений, подобные человеческим, которые применяются к будущим ошибкам того же типа. Facebook Помимо использования собственных репозиториев кода в качестве обучающих данных, Getafix извлекла некоторые исправления из с открытым исходным кодом репозиториев Java . При обнаружении новых ошибок Getafix применяет ранее изученные шаблоны для создания потенциальных исправлений и ранжирует их в течение нескольких секунд. В нем представлены только исправления с самым высоким рейтингом для окончательной проверки инструментами или инженером, чтобы сэкономить ресурсы и в идеале быть настолько быстрым, чтобы на исправление той же ошибки еще не тратилось человеческое время.
Ремонт на основе шаблона
[ редактировать ]Для определенных классов ошибок методы целевого автоматического исправления ошибок используют специализированные шаблоны:
- исключений нулевого указателя Исправление [25] [26] [15] со вставкой условного оператора , чтобы проверить, является ли значение переменной нулевым.
- целочисленного переполнения восстановление [10]
- переполнения буфера устранение [10]
- устранение утечки памяти , [27] с автоматической вставкой недостающих операторов освобождения памяти.
По сравнению с методами создания и проверки методы на основе шаблонов, как правило, имеют более высокую точность исправления ошибок, но значительно сужают область применения. [6] [27]
Использовать
[ редактировать ]Автоматическое исправление ошибок можно использовать несколькими способами:
- В среде разработки: при обнаружении ошибки разработчик активирует функцию поиска исправления (например, нажав кнопку). Этот поиск также может происходить в фоновом режиме, когда IDE активно ищет решения потенциальных проблем, не дожидаясь явных действий со стороны разработчика. [28]
- Во время выполнения: если во время выполнения происходит сбой, бинарное исправление можно найти и применить онлайн . Примером такой системы ремонта является ClearView. [29] который восстанавливает код x86 с помощью двоичных исправлений x86.
Поиск пространства
[ редактировать ]По сути, автоматическое исправление ошибок — это поисковая деятельность, основанная как на дедукции, так и на эвристике. Пространство поиска автоматического исправления ошибок состоит из всех изменений, которые можно внести в программу. Были проведены исследования, направленные на понимание структуры этого пространства поиска. Ци и др. [30] показал, что исходная фитнес-функция Genprog не лучше случайного поиска для управления поиском. Лонг и др. [31] исследование показало, что правильные патчи можно считать редкими в пространстве поиска, а неправильные патчи переобучения гораздо более распространены (см. Также обсуждение переобучения ниже).
Переобучение
[ редактировать ]Иногда при восстановлении программ на основе набора тестов инструменты генерируют исправления, которые проходят набор тестов, но на самом деле являются неправильными; это известно как проблема «переобучения». [32] «Переоснащение» в этом контексте относится к тому факту, что патч соответствует тестовым входным данным. Существуют разные виды переоснащения: неполное исправление означает, что исправлены только некоторые ошибочные входные данные, введение регрессии означает, что некоторые ранее работавшие функции ломаются после патча (поскольку они были плохо протестированы). Ранние прототипы автоматического ремонта сильно пострадали от переоснащения: в тесте Manybugs C Qi et al. [6] сообщил, что 104 из 110 возможных патчей GenProg были переоснащены. В контексте восстановления на основе синтеза Le et al. [33] получили более 80% переоснащенных патчей.
Один из способов избежать переоснащения — отфильтровать сгенерированные патчи. Это можно сделать на основе динамического анализа. [34] Альтернативно, Tian et al. предложить эвристические подходы для оценки правильности патчей. [35] [36]
Ограничения автоматического исправления ошибок
[ редактировать ]Методы автоматического исправления ошибок, основанные на наборе тестов, не дают гарантий корректности исправлений, поскольку набор тестов неполный и не охватывает все случаи. [6] Слабый набор тестов может привести к тому, что методы создания и проверки создадут проверенные, но неправильные исправления, которые будут иметь негативные последствия, такие как устранение желаемых функций, возникновение утечек памяти и создание уязвимостей безопасности. [6] Один из возможных подходов — расширить набор неудачных тестов путем автоматического создания дополнительных тестовых примеров, которые затем помечаются как пройденные или неуспешные. автоматического тестового оракула , который постепенно учится автоматически классифицировать тестовые случаи как пройденные или неуспешные и привлекает пользователя, сообщающего об ошибках, только в неопределенных случаях. Чтобы свести к минимуму усилия человека по маркировке, можно обучить [37]
Ограничением систем генерации и проверки исправлений является взрыв пространства поиска. [31] В программе необходимо изменить большое количество операторов, и для каждого оператора существует большое количество возможных модификаций. Современные системы решают эту проблему, предполагая, что небольшой модификации достаточно для исправления ошибки, что приводит к сокращению пространства поиска.
Ограниченность подходов, основанных на символическом анализе [16] [17] Дело в том, что реальные программы часто преобразуются в невероятно большие формулы, особенно для модификации операторов с побочными эффектами .
Тесты
[ редактировать ]Тесты ошибок обычно фокусируются на одном конкретном языке программирования.В языке C тест Manybugs, собранный авторами GenProg, содержит 69 реальных дефектов и широко используется для оценки многих других инструментов исправления ошибок для C. [13] [7] [12] [17]
В Java основным тестом является Defects4J, который сейчас широко используется в большинстве исследовательских работ по восстановлению программ для Java. [38] [39] Существуют альтернативные тесты, такие как тест Quixbugs, [40] который содержит оригинальные ошибки для восстановления программы. Другие тесты ошибок Java включают Bugs.jar, [41] на основе прошлых коммитов.
Примеры инструментов
[ редактировать ]Автоматическое исправление ошибок — активная тема исследований в области информатики. Существует множество реализаций различных методов исправления ошибок, особенно для программ на C и Java. Обратите внимание, что большинство этих реализаций являются исследовательскими прототипами для демонстрации своих методов, т. е. неясно, готовы ли их текущие реализации к промышленному использованию или нет.
С
[ редактировать ]- КлирВью: [29] Инструмент создания и проверки для создания бинарных исправлений для развернутых систем. Он оценивается по 10 случаям уязвимостей безопасности. Более позднее исследование показало, что он генерирует правильные исправления как минимум для 4 из 10 случаев. [6]
- ГенПрог: [5] [13] Оригинальный инструмент для создания и проверки ошибок. Он был тщательно изучен в контексте теста ManyBugs.
- СемФикс: [16] Первый инструмент для исправления ошибок на основе решателя для C.
- КодФаг: [10] Первый инструмент для исправления ошибок, который напрямую передает код между программами для создания исправлений для программы на языке C. Обратите внимание: хотя он генерирует патчи C, он может извлекать код из двоичных программ без исходного кода. [10]
- УтечкаFix: [27] Инструмент, автоматически устраняющий утечки памяти в программах на языке C.
- Пророк: [7] Первый инструмент создания и проверки, который использует методы машинного обучения для изучения полезных знаний из предыдущих исправлений, созданных человеком, для распознавания правильных исправлений. Он оценивается по тому же тесту, что и GenProg, и генерирует правильные исправления (т. е. эквивалентные человеческим исправлениям) в 18 из 69 случаев. [7]
- ПоискРемонт: [22] Инструмент для замены ошибочного кода фрагментами кода из других источников. Он оценивается в тесте IntroClass. [42] и генерирует патчи гораздо более высокого качества в этом тесте, чем GenProg, RSRepair и AE.
- Анжеликс: [17] Улучшенный инструмент для исправления ошибок на основе решателя. Он оценивается с помощью теста GenProg. В 10 из 69 случаев он генерирует патчи, эквивалентные человеческим патчам.
- Узнать2Исправить: [37] Первый полуавтоматический ремонтный инструмент, управляемый человеком. Расширяет GenProg для изучения условий, при которых наблюдается семантическая ошибка, путем систематических запросов к пользователю, сообщающему об ошибке. Работает только для программ, которые принимают и выдают целые числа.
Ява
[ редактировать ]- О: [15] Инструмент создания и проверки, использующий набор шаблонов исправлений, определенных вручную.
- QACrashFix: [23] Инструмент, который исправляет ошибки сбоя Java, извлекая исправления с веб-сайта вопросов и ответов.
- ВОЗДУХ: [43] Инструмент восстановления Java, основанный на многоцелевом генетическом программировании.
- НпеФикс: [44] Инструмент автоматического восстановления NullPointerException в Java, доступный на Github .
Другие языки
[ редактировать ]- АвтоисправлениеE: [8] Инструмент для исправления ошибок в языке Eiffel . Для проверки созданных исправлений он использует контракты (т. е. форму формальной спецификации) в программах Eiffel.
- Гетафикс: [24] Работает исключительно на преобразованиях AST и поэтому требует только синтаксического анализатора и форматтера. В Facebook он был применен к Hack , Java и Objective-C .
Собственный
[ редактировать ]- DeepCode объединяет общедоступные и частные GitHub , GitLab и Bitbucket репозитории для выявления исправлений кода и улучшения программного обеспечения. [45]
- Kodezi использует данные с открытым исходным кодом из GitHub репозиториев , Stack Overflow и частных обученных моделей для анализа кода, мгновенного предоставления решений и описаний ошибок в коде. [46]
Ссылки
[ редактировать ]- ^ Ринар, Мартин К. (2008). «Техническая перспектива Исправление ошибок программы». Коммуникации АКМ . 51 (12): 86. дои : 10.1145/1409360.1409381 . S2CID 28629846 .
- ^ Харман, Марк (2010). «Технологии автоматического исправления». Коммуникации АКМ . 53 (5): 108. дои : 10.1145/1735223.1735248 . S2CID 9729944 .
- ^ Jump up to: а б Газзола, Лука; Микуччи, Даниэла; Мариани, Леонардо (2019). «Автоматическое восстановление программного обеспечения: обзор» (PDF) . Транзакции IEEE по разработке программного обеспечения . 45 (1): 34–67. дои : 10.1109/TSE.2017.2755013 . hdl : 10281/184798 . S2CID 57764123 .
- ^ Тан, Шин Хвэй; Ройчудри, Абхик (2015). «relifix: автоматическое исправление регрессий программного обеспечения». 2015 IEEE/ACM 37-я Международная конференция IEEE по программной инженерии . IEEE. стр. 471–482. дои : 10.1109/ICSE.2015.65 . ISBN 978-1-4799-1934-5 . S2CID 17125466 .
- ^ Jump up to: а б с д и ж Веймер, Уэстли; Нгуен, ТханьВу; Ле Гу, Клэр; Форрест, Стефани (2009). «Автоматический поиск патчей с помощью генетического программирования». Материалы 31-й Международной конференции по программной инженерии . IEEE. стр. 364–374. CiteSeerX 10.1.1.147.8995 . дои : 10.1109/ICSE.2009.5070536 . ISBN 978-1-4244-3453-4 . S2CID 1706697 .
- ^ Jump up to: а б с д и ж г час я Ци, Цзычао; Лонг, Фан; Ачур, Сара; Ринар, Мартин (2015). «Анализ достоверности и правильности исправлений для систем создания и проверки исправлений». Материалы Международного симпозиума по тестированию и анализу программного обеспечения 2015 г. АКМ. CiteSeerX 10.1.1.696.5616 . дои : 10.1145/2771783.2771791 . ISBN 978-1-4503-3620-8 . S2CID 6845282 .
- ^ Jump up to: а б с д и ж г час я Лонг, Фан; Ринар, Мартин (2016). «Автоматическое создание патчей путем изучения правильного кода». Материалы 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . АКМ. стр. 298–312. дои : 10.1145/2837614.2837617 . ISBN 978-1-4503-3549-2 . S2CID 6091588 .
- ^ Jump up to: а б Пей, Ю; Фурия, Карло А.; Нордио, Мартин; Вэй, И; Мейер, Бертран; Целлер, Андреас (май 2014 г.). «Автоматическое исправление программ с контрактами». Транзакции IEEE по разработке программного обеспечения . 40 (5): 427–449. arXiv : 1403.1117 . Бибкод : 2014arXiv1403.1117P . дои : 10.1109/TSE.2014.2312918 . S2CID 53302638 .
- ^ «Восстановление структуры данных на основе контракта с использованием сплава». CiteSeerX 10.1.1.182.4390 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Jump up to: а б с д и ж Сидироглу, Стелиос; Лахтинен, Эрик; Лонг, Фан; Ринар, Мартин (2015). «Автоматическое устранение ошибок путем передачи кода нескольких приложений». Материалы 36-й конференции ACM SIGPLAN по проектированию и реализации языков программирования .
- ^ Ци, Юхуа; Мао, Сяогуан; Лей, Ян; Дай, Цзыин; Ван, Ченгсонг (2014). «Сила случайного поиска при автоматическом восстановлении программ». Материалы 36-й Международной конференции по программной инженерии . ICSE 2014. Остин, Техас: ACM. стр. 254–265. дои : 10.1145/2568225.2568254 . ISBN 978-1-4503-2756-5 . S2CID 14976851 .
- ^ Jump up to: а б с Лонг, Фан; Ринар, Мартин (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 .
- ^ Jump up to: а б с Ле Гу, Клэр; Дьюи-Фогт, Майкл; Форрест, Стефани; Веймер, Уэстли (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 .
- ^ Ци, Цзычао; Лонг, Фан; Ачур, Сара; Ринар, Мартин (13 июля 2015 г.). «Анализ достоверности и правильности исправлений для систем генерации и проверки исправлений» . Материалы Международного симпозиума по тестированию и анализу программного обеспечения 2015 г. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 24–36. дои : 10.1145/2771783.2771791 . hdl : 1721.1/101586 . ISBN 9781450336208 . S2CID 6845282 .
- ^ Jump up to: а б с д Ким, Донсун; Нам, Джечан; Сон, Джэу; Ким, Сонхун (2013). «Автоматическое создание патчей на основе патчей, написанных человеком». Материалы Международной конференции по программной инженерии 2013 года . ММВБ '13'. IEEE Пресс. стр. 802–811. ISBN 978-1-4673-3076-3 .
- ^ Jump up to: а б с д Нгуен, Хоанг Зыонг Тьен; Ци, Давэй; Ройчудри, Абхик; Чандра, Сатиш (2013). «SemFix: восстановление программы с помощью семантического анализа». Материалы Международной конференции по программной инженерии 2013 года . ММВБ '13'. Сан-Франциско, Калифорния: IEEE Press. стр. 772–781. ISBN 978-1-4673-3076-3 .
- ^ Jump up to: а б с д Мечтаев, Сергей; Йи, Джуён; Ройчудри, Абхик (2016). «Angelix: синтез патчей масштабируемой многострочной программы посредством символьного анализа». Материалы 38-й Международной конференции по программной инженерии, ICSE 2016, Остин, Техас, 14–22 мая 2016 г. стр. 691–701.
- ^ Джа, Саммит; Гулвани, Сумит; Сешиа, Санджит А.; Тивари, Ашиш (1 мая 2010 г.). Синтез программ на основе компонентов под управлением Oracle . АКМ. стр. 215–224. дои : 10.1145/1806799.1806833 . ISBN 9781605587196 . S2CID 6344783 .
- ^ Галенсон, Джоэл; Римс, Филип; Бодик, Растислав; Хартманн, Бьёрн; Сен, Кошик (31 мая 2014 г.). CodeHint: динамический и интерактивный синтез фрагментов кода . АКМ. стр. 653–663. дои : 10.1145/2568225.2568250 . ISBN 9781450327565 . S2CID 10656182 .
- ^ Ле, Суан-Бах Д.; Чу, Дюк-Хип; Ло, Дэвид; Ле Гу, Клэр; Виссер, Виллем (21 августа 2017 г.). Материалы 11-го совместного совещания по основам программной инженерии 2017 г. - ESEC/FSE 2017 . АКМ. стр. 593–604. дои : 10.1145/3106237.3106309 . ISBN 9781450351058 . S2CID 1503790 .
- ^ Алур, Раджив; Бодик, Растислав; Юнивал, Гарвит; Мартин, Майло МК; Раготаман, Мукунд; Сешиа, Санджит А.; Сингх, Ришаб; Солар-Лезама, Армандо; Торлак, Эмина ; Удупа, Абхишек (2013). «Синтаксис-ориентированный синтез». 2013 Формальные методы в автоматизированном проектировании . стр. 1–8. CiteSeerX 10.1.1.377.2829 . дои : 10.1109/fmcad.2013.6679385 . ISBN 9780983567837 .
- ^ Jump up to: а б Ке, Ялин; Столи, Кэтрин; Ле Гу, Клэр; Брун, Юрий (2015). «Восстановление программ с помощью семантического поиска кода». Материалы 30-й Международной конференции IEEE/ACM по автоматизированной разработке программного обеспечения , 2015 г. ASE 2015. Линкольн, Небраска: ACM. стр. 295–306. дои : 10.1109/ASE.2015.60 . ISBN 978-1-5090-0025-8 . S2CID 16361458 .
- ^ Jump up to: а б Гао, Цин; Чжан, Ханьшэн; Ван, Цзе; Сюн, Инфэй; Чжан, Лу; Мэй, Хун (2015). «Исправление повторяющихся ошибок сбоя посредством анализа сайтов вопросов и ответов». 2015 30-я Международная конференция IEEE/ACM по автоматизированной разработке программного обеспечения (ASE) . IEEE. стр. 307–318. дои : 10.1109/ASE.2015.81 . ISBN 978-1-5090-0025-8 . S2CID 2513924 .
- ^ Jump up to: а б Бадер, Йоханнес; Скотт, Эндрю; Прадел, Майкл; Чандра, Сатиш (10 октября 2019 г.). «Getafix: учимся исправлять ошибки автоматически» . Труды ACM по языкам программирования . 3 (OOPSLA): 159:1–159:27. arXiv : 1902.06111 . дои : 10.1145/3360585 .
- ^ Лонг, Фан; Сидироглу-Дускос, Стелиос; Ринар, Мартин (2014). «Автоматическое исправление и сдерживание ошибок во время выполнения с помощью восстановления». Материалы 35-й конференции ACM SIGPLAN по проектированию и реализации языков программирования . ПЛДИ '14'. Нью-Йорк, Нью-Йорк: ACM. стр. 227–238. дои : 10.1145/2594291.2594337 . ISBN 978-1-4503-2784-8 . S2CID 6252501 .
- ^ Добойи, Кинга; Веймер, Уэстли (2008). «Изменение семантики Java для обработки исключений нулевого указателя». 2008 19-й Международный симпозиум по проектированию надежности программного обеспечения (ISSRE) . стр. 47–56. CiteSeerX 10.1.1.147.6158 . дои : 10.1109/ISSRE.2008.59 . S2CID 1454939 .
- ^ Jump up to: а б с Гао, Цин; Сюн, Инфэй; Ми, Яцин; Чжан, Лу; Ян, Вэйкунь; Чжоу, Чжаопин; Се, Бин; Мэй, Хун (2015). «Безопасное устранение утечек памяти для программ на языке C». Материалы 37-й Международной конференции по программной инженерии – Том 1 . ММВБ '15'. Пискатауэй, Нью-Джерси: IEEE Press. стр. 459–470. ISBN 978-1-4799-1934-5 .
- ^ Мушлу, Кыванч; Брун, Юрий; Холмс, Рид; Эрнст, Майкл Д.; Ноткин, Дэвид; Мушлу, Кыванч; Брун, Юрий; Холмс, Рид; Эрнст, Майкл Д.; Ноткин, Дэвид (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 .
- ^ Jump up to: а б Перкинс, Джефф Х.; и др. (2009). «Автоматическое исправление ошибок в развернутом программном обеспечении». Материалы 22-го симпозиума ACM SIGOPS по принципам операционных систем . АКМ. стр. 87–102. CiteSeerX 10.1.1.157.5877 . дои : 10.1145/1629575.1629585 . ISBN 978-1-60558-752-3 . S2CID 7597529 .
- ^ Мао, Лэй, Ян; Дай, Цзиин, Чэнсонг (31 мая 2014 г.). ACM , стр. 254–265 Ци, Юхуа ; . .ISBN 9781450327565 . S2CID 14976851 .
- ^ Jump up to: а б Лонг, Фан; Ринар, Мартин (2016). «Анализ пространств поиска для создания и проверки систем генерации исправлений». Материалы 38-й Международной конференции по программной инженерии . ММВБ '16. Нью-Йорк, Нью-Йорк: ACM. стр. 702–713. arXiv : 1602.05643 . дои : 10.1145/2884781.2884872 . hdl : 1721.1/113656 . ISBN 978-1-4503-3900-1 . S2CID 7426809 .
- ^ Смит, Эдвард К.; Барр, Эрл Т.; Ле Гу, Клэр; Брун, Юрий (2015). «Лекарство хуже болезни? Переобучение в автоматизированном восстановлении программ». Материалы 10-го совместного совещания по основам программной инженерии 2015 г. ESEC/FSE 2015. Нью-Йорк, Нью-Йорк: ACM. стр. 532–543. дои : 10.1145/2786805.2786825 . ISBN 978-1-4503-3675-8 . S2CID 6300790 .
- ^ Ле, Суан Бах Д.; Тунг, Фердиан; Ло, Дэвид; Гу, Клэр Ле (2 марта 2018 г.). «Переоснащение при автоматизированном ремонте программ на основе семантики» . Эмпирическая программная инженерия . 23 (5): 3007–3033. дои : 10.1007/s10664-017-9577-2 . ISSN 1382-3256 . S2CID 3635768 .
- ^ Синь, Ци; Рейсс, Стивен П. (10 июля 2017 г.). «Выявление патчей, переоснащенных набором тестов, посредством создания тестовых примеров» . Материалы 26-го Международного симпозиума ACM SIGSOFT по тестированию и анализу программного обеспечения . Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 226–236. дои : 10.1145/3092703.3092718 . ISBN 978-1-4503-5076-1 . S2CID 20562134 .
- ^ Тиан, Хаое; Лю, Куй; Каборе, Абдул Кадер; Коюнджу, Анил; Ли, Ли; Кляйн, Жак; Биссьянде, Тегавенде Ф. (27 января 2021 г.). «Оценка обучения представлению изменений кода для прогнозирования правильности исправлений при восстановлении программ» . Материалы 35-й Международной конференции IEEE/ACM по автоматизированной разработке программного обеспечения . Ассоциация вычислительной техники. стр. 981–992. дои : 10.1145/3324884.3416532 . ISBN 9781450367684 .
- ^ Тиан, Хаое; Тан, Сюньчжу; Хабиб, Эндрю; Ван, Шанвэнь; Лю, Куй; Ся, Синь; Кляйн, Жак; Биссьянде, Тегавенде Ф. (5 января 2023 г.). «Является ли это изменение ответом на эту проблему?: Сопоставление описаний ошибок и изменений кода для оценки правильности исправлений» . Материалы 37-й Международной конференции IEEE/ACM по автоматизированной разработке программного обеспечения . Ассоциация вычислительной техники. стр. 1–13. arXiv : 2208.04125 . дои : 10.1145/3551349.3556914 . ISBN 9781450394758 . S2CID 251403079 .
- ^ Jump up to: а б Бёме, Марсель; Гитал, Чарака; Фам, Ван-Туан (2020). «Автоматическое восстановление программы человеком в цикле». Материалы 13-й Международной конференции по тестированию, валидации и верификации программного обеспечения . ICST 2020. Порту, Португалия: IEEE. стр. 274–285. arXiv : 1912.07758 . дои : 10.1109/ICST46399.2020.00036 . ISBN 978-1-7281-5778-8 . S2CID 209386817 .
- ^ Вэнь, Мин; Чен, Цзюньцзе; У, Жунсинь; Хао, Дэн; Чунг, Шинг-Чи (2018). «Контекстно-зависимая генерация исправлений для более эффективного автоматического восстановления программ» . Материалы 40-й Международной конференции по программной инженерии . Нью-Йорк, Нью-Йорк, США: ACM Press. стр. 1–11. дои : 10.1145/3180155.3180233 . ISBN 9781450356381 . S2CID 3374770 .
- ^ Хуа, Джинру; Чжан, Мэнши; Ван, Кайюань; Хуршид, Сарфраз (2018). «На пути к практическому ремонту программ с генерацией кандидатов по требованию». Материалы 40-й Международной конференции по программной инженерии . Нью-Йорк, Нью-Йорк, США: ACM Press. стр. 12–23. дои : 10.1145/3180155.3180245 . ISBN 9781450356381 . S2CID 49666327 .
- ^ Лин, Деррик; Коппел, Джеймс; Чен, Анджела; Солар-Лезама, Армандо (2017). «QuixBugs: многоязычный набор тестов для восстановления программ, основанный на задаче Quixey». Сборник материалов Международной конференции ACM SIGPLAN 2017 года по системам, программированию, языкам и приложениям: программное обеспечение для человечества . Нью-Йорк, Нью-Йорк, США: ACM Press. стр. 55–56. дои : 10.1145/3135932.3135941 . ISBN 9781450355148 .
- ^ Саха, Рипон К.; Лю, Инцзюнь; Лам, Винг; Ёсида, Хироаки; Прасад, Мукул Р. (2018). "Ошибки.jar" . Материалы 15-й Международной конференции по репозиториям программного обеспечения для майнинга . МСР '18. стр. 10–13. дои : 10.1145/3196398.3196473 . ISBN 9781450357166 . S2CID 50770093 .
- ^ Ле Гу, Клэр; Холтшульте, Нил; Смит, Эдвард; Брун, Юрий; Деванбу, Премкумар; Форрест, Стефани; Веймер, Уэстли (2015). «Множество ошибок и тесты вводного класса для автоматического восстановления программ на языке C» . Транзакции IEEE по разработке программного обеспечения . 41 (12): 1236–1256. дои : 10.1109/TSE.2015.2454513 .
- ^ Юань, Юань; Банцхаф, Вольфганг (2020). «ARJA: автоматическое восстановление программ Java с помощью многоцелевого генетического программирования» . Транзакции IEEE по разработке программного обеспечения . 46 (10): 1040–1067. arXiv : 1712.07804 . дои : 10.1109/TSE.2018.2874648 . S2CID 25222219 .
- ^ Дюрье, Томас (2017). «Динамическая генерация исправлений для исключений нулевого указателя с использованием метапрограммирования». 2017 24-я Международная конференция IEEE по анализу, эволюции и реинжинирингу программного обеспечения (SANER) . стр. 349–358. arXiv : 1812.00409 . дои : 10.1109/SANER.2017.7884635 . ISBN 978-1-5090-5501-2 . S2CID 2736203 .
- ^ «ИИ придет на вашу работу по кодированию» . Просеянный . 13 марта 2019 года . Проверено 15 апреля 2019 г.
- ^ «Ишрак Хан, революция в сфере программирования в 2021 году» . ТехТаймс . 13 сентября 2019 года . Проверено 15 октября 2022 г.
Внешние ссылки
[ редактировать ]- программа-ремонт
. .org , связанные с исследованиями автоматического восстановления программ. Наборы данных, инструменты и т. д