Группа исследователей из университета Райса (США) разработала (https://arxiv.org/pdf/1703.05698.pdf) интеллектуальный ассистент разработчика Bayou (https://github.com/capergroup/bayou), позволяющий частично автоматизировать процесс написания кода на языке Java. Проект использует алгоритмы глубинного машинного обучения и модель, натренированную на примерах рабочего Java-кода, представленного на GitHub. Наработки проекта открыты (https://github.com/capergroup/bayou) под лицензией Apache 2.0, код написан на Java и Python. Модель машинного обучения реализована при помощи платформы Tensorflow (https://www.opennet.ru/opennews/art.shtml?num=46058) и инструментария scikit-learn (http://scikit-learn.org/).
На основе задаваемых разработчиком меток c упоминанием методов API и типов данных, которые следует использовать в коде, Bayou позволяет синтезировать готовые программные блоки с реализацией шаблонов использования Java API, соответствующих контексту уже имеющегося кода. Иными словами, Bayou позволяет использовать методы машинного обучения для воплощения парадигмы разработки copy&paste, при которой разработчик находит и использует готовые куски кода, применяемые в других проектах.
В целом Bayou преподносится как более умная система автодополнения кода, способная не просто дополнять не отдельные конструкции, а предлагать достаточно большие и сложные фрагменты кода, включающие обёртки для использования API, циклы и обработчики исключений. Со временем на базе Bayou могут быть подготовлены плагины к интегрированным средам разработки, которые позволят по мере набора кода разработчиком интерактивно предлагать подходящие по контексту куски кода.
Online-демонстрацию возможностей Bayou можно найти на
данной странице (http://askbayou.com/). Например, при возникновении задачи написания кода для чтения из файла разработчик может добавить метку "{ /// call:readLine }":
import java.io.File;
public class Test {
void read(File file) {
{
/// call:readLine
}
}
}
После обработки данной конструкции будет предложен готовый вариант кода:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class TestIO {
void read(File file) {
{
FileReader fr1;
BufferedReader br1;
String s1;
try {
fr1 = new FileReader(file);
br1 = new BufferedReader(fr1);
s1 = br1.readLine();
} catch (FileNotFoundException _e) {
} catch (IOException _e) {
}
return;
}
}
}
В процессе тренировки нейронной сети исходные тексты абстрагируются в древовидную синтаксическую модель, в которой отсутствуют конкретные низкоуровневые имена и операции, но сохраняется общая структура управления кодом, порядок вызова методов API и типы данных, передаваемых и возвращаемых этими методами. В нейронной сети данная информация используется для сопоставления сформированных моделей кода и задаваемых разработчиком меток.
В текущем виде система требует задания достаточно точных меток, не поддерживает указание масок для типов и может использовать лишь ограниченный набор API (java.lang, java.io и java.util). В будущем разработчики намерены реализована возможность формирования запросов на естественном языке и добавить функциональность интерактивной оболочки, позволяющей выбирать разные варианты кода и уточнять свои пожелания. В более отдалённой перспективе планируется обеспечить генерацию более сложного кода, включающего группы методов или классов.
URL: https://www.theregister.co.uk/2018/04/26/java_coding_automat.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=48503