stringtranslate.com

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

Автоматическое исправление ошибок — это автоматическое исправление ошибок в программном обеспечении без вмешательства человека-программиста. [1] [2] Его также часто называют автоматической генерацией исправлений , автоматическим исправлением ошибок или автоматическим восстановлением программы . [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]

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

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

При определенных допущениях задачу ремонта можно сформулировать как задачу синтеза. SemFix [16] использует синтез на основе компонентов. [18] Dynamoth использует динамический синтез. [19] S3 [20] основан на синтаксически-ориентированном синтезе . [21] SearchRepair [22] преобразует потенциальные исправления в формулу SMT и запрашивает возможные исправления, которые позволяют исправленной программе пройти все предоставленные тестовые случаи.

Управляемый данными

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

Getafix [24] — это языково-независимый подход, разработанный и используемый в работе Facebook . Учитывая образец кода , в котором инженеры исправляют ошибки определенного типа, он изучает шаблоны исправлений, подобные человеческим, которые применимы к будущим ошибкам того же типа. Помимо использования собственных репозиториев кода Facebook в качестве обучающих данных, Getafix извлекла некоторые исправления из репозиториев Java с открытым исходным кодом. При обнаружении новых ошибок Getafix применяет ранее изученные шаблоны для создания потенциальных исправлений и ранжирует их в течение нескольких секунд. В нем представлены только исправления с самым высоким рейтингом для окончательной проверки инструментами или инженером, чтобы сэкономить ресурсы и в идеале быть настолько быстрым, чтобы на исправление той же ошибки еще не тратилось человеческое время.

Ремонт на основе шаблона

Для определенных классов ошибок методы целевого автоматического исправления ошибок используют специализированные шаблоны:

По сравнению с методами создания и проверки методы на основе шаблонов, как правило, имеют более высокую точность исправления ошибок, но значительно сужают область применения. [6] [27]

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

Автоматическое исправление ошибок можно использовать несколькими способами:

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

По сути, автоматическое исправление ошибок — это поисковая деятельность, основанная как на дедукции, так и на эвристике. Пространство поиска автоматического исправления ошибок состоит из всех изменений, которые можно внести в программу. Были проведены исследования, направленные на понимание структуры этого пространства поиска. Ци и др. [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. Обратите внимание, что большинство этих реализаций являются исследовательскими прототипами для демонстрации своих методов, т. е. неясно, готовы ли их текущие реализации к промышленному использованию или нет.

С

Джава

Другие языки

Собственный

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

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

Внешние ссылки