Исследователи автоматизировали перенос кода между программами

Sidiroglou-Douskos et al. / Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering

Исследователи из Массачусетского технологического института разработали алгоритм для переноса фрагментов кода между программами под названием CodeCarbonCopy. Пользователю нужно выбрать фрагмент кода в одной программе и точку внедрения в другой, после чего алгоритм вставит этот фрагмент и адаптирует его, например, поменяв названия переменных. По замыслу разработчиков, этот алгоритм значительно облегчит повторное использование кода, а также добавление нового функционала в программы. Алгоритм был представлен на конференции ESEC/FSE 2017 в Германии.

Зачастую программисты создают программы или их части не с нуля, а основываясь на предыдущих аналогичных разработках. Особенно это распространено в случае открытого программного обеспечения. Но в похожих программах одни и те же типы данных могут представляться по-разному.

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

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

Сначала алгоритму необходимо предоставить коды обеих программ, а также выделить фрагмент кода для переноса из программы-донора и указать место в программе-реципиенте, куда этот фрагмент необходимо вставить. После этого алгоритм берет один и тот же файл в качестве входных данных, исполняет две программы и, анализируя обработку одних и тех же данных, изучает различия в их представлениях. Затем на основании этих различий алгоритм создает код, который разработчики назвали адаптером. Он позволяет преобразовывать представление данных программы-донора в представление данных программы-реципиента.

Поскольку выделенный пользователем фрагмент кода может содержать и части других функций, алгоритм также производит статический анализ кода и определяет функции и переменные из донорского кода, которые не нужны для переноса.

Исследователи проверили работоспособность своего алгоритма на шести программах с открытым исходным кодом: VLC, MPlayer, cwebp, bmp2tiff, ViewNior и mtPaint. Алгоритм успешно справился с переносом в большинстве случаев. На перенос он тратил от трех до 23 минут. Разработчики отмечают, что пока их алгоритм хорошо справляется с форматами с простой организацией данных, но в будущем они рассчитывают адаптировать его и для других типов организаций, таких как связные списки или древовидная структура.

Представленный алгоритм отчасти основан на предыдущих разработках этой же исследовательской группы. В 2015 году разработчики создали алгоритм для автоматического исправления багов в программах, а в 2016 году представили его значительно доработанную версию.

Недавно исследователи из Кембриджского университета и Microsoft разработали алгоритм для автоматического создания новых программ на основе имеющихся. Пользователю достаточно указать входные и выходные данные, а алгоритм самостоятельно выведет соответствующие закономерности и на основе фрагментов кода из существующих программ составит из них новую программу.

Григорий Копиев

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.