Специалисты из Массачусетского технологического университета разработали программу Prophet, способную в полностью автоматическом режиме искать ошибки в исходном коде других программ и исправлять их. Согласно отчету авторов программы, для анализа и исправления программа использует стохастическую модель и способна к платформонезависимому применению исправлений кода. Prophet является значительно доработанной версией программы CodePhage.
Для работы с исходным кодом другого программного обеспечения Prophet использует данные об эффективных патчах, исходный код которых и описание опубликованы в открытых источниках в интернете. Для исправления ошибок алгоритм использует полученные из интернета и автоматически измененные патчи, причем он способен анализировать взаимодействие дописанного им самим исправленного кода с остальным кодом исправляемой программы.
Согласно утверждению разработчиков, в отличие от многих других программ для исправления кода, Prophet способен работать с исходным кодом программного обеспечения, состоящим не из нескольких сотен, а тысяч и десятков тысяч строк. При этом новый алгоритм способен к самообучению — при подборе патча к исправляемому программному обеспечению Prophet способен выбирать наиболее правильный код из множества вариантов, причем при выборе используется опыт предыдущих исправлений.
В основу алгоритма разработчики положили гипотезу о том, что у всех программ, независимо от языка, на котором они написаны, и платформы, для которой они предназначены, корректные участки кода имеют определенные универсальные признаки корректности, присутствующие на семантическом уровне. Prophet может составлять карту таких признаков корректности для изученных патчей, а затем переносить ее на анализируемый код программного обеспечения.
При работе с исходным кодом программы Prophet использует статический и динамический анализ кода, что позволяет не только выявить некорректные и потенциально нерабочие участки, но и локализовать ошибки с высокой точностью. Для выбора и изменения обнаруженных патчей и последующего их применения к программному коду также используется динамический анализ. Кроме того, как и Code Phage алгоритм Prophet способен «отмечать» потенциально опасные участки — при их исполнении с ошибкой исправленная программа просто закроется.
Тестирование Prophet раззработчики проводили на 69 известных ошибках в восьми программах с открытым исходным кодом. Результаты работы алгоритма сравнивали с другими такими программами — SPR, Kali, GenProg и AE. На анализ исходного кода и применение патчей всем испытуемым алгоритмам отводились 12 часов. За этот период Prophet сумел найти 19 патчей для 69 дефектов, 18 из которых оказались корректными. Причем 15 из 19 исправлений были подобраны алгоритмом с первой попытки.
В свою очередь SPR за 12 часов смогла найти только 16 правильных патчей из 19, причем только 11 корректных исправлений были подобраны с первой попытки. Kali, GenProg и AE сумели подобрать два, один и два корректных исправления соответственно.
Василий Сычёв
N+1