Обучение вывело алгоритм коррекции кода программ в лидеры по эффективности

4 февраль, 2016 - 10:25Виталий Кобальчинский

Технологии искусственного интеллекта постоянно находят новые приложения. Очередной иллюстрацией гибкости этого подхода стала система исправления ошибок в программном обеспечении, разработанная в Массачуссетском технологическом институте (MIT).

Обучение вывело алгоритм коррекции кода программ в лидеры по эффективности

Система под названием Prophet (Пророк) описывается в статье, которую сотрудники лаборатории MIT CSAIL аспирант Фань Лун (Fan Long) и профессор Мартин Ринар (Martin Rinard) представили на симпозиуме по принципам языков программирования, состоявшемся в январе в Санкт-Петербурге (штат Флорида).

Prophet обучалась на примерах патчей, применённых к восьми приложениям из онлайнового репозитория открытого кода GitHub. Анализ 777 ошибок и соответствующих исправлений позволил выявить общие закономерности и затем применить приобретённый опыт для корректирования недочетов в другом наборе программ.

В основу Prophet положен алгоритм, разработанный Фань Луном ранее. Он пытался исправить ошибки систематически модифицируя программный код, но тратил на достижение результата неприемлемо много времени. Новая система машинного обучения оптимизирует использование этого алгоритма. Она сначала выстраивает возможные патчи по вероятности их пригодности и только затем приступает к отнимающим основное время тестам.

В испытаниях на 69 реальных дефектах кода восьми популярных открытых программ, Prophet превзошла другие системы по эффективности примерно в 10 раз. Там где они исправляли одну или две ошибки, Prophet устраняла 15-18, в зависимости от того, останавливали ли её после применения первого решения или разрешали работать дальше. Обнаружение оставшихся 50 ошибок требовало выявления логических несоответствий в масштабах всей программы, что было недоступно для текущей версии алгоритма Фань Луна.

«Один из самых интригующих аспектов этого исследования состоит в том, что нами были обнаружены универсальные свойства правильного кода, которые можно изучить на одном наборе приложений и применить к другому набору, – подчеркнул профессор Ринар. – Способность распознавать правильный код имеет огромное значение для всех программных технологий».