Примечание редактора. Адитья выступает на ODSC APAC 2021. Посмотрите его доклад Машинное обучение для разработки программного обеспечения здесь!

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

Методы машинного обучения оказались невероятно успешными в извлечении полезной статистической информации из сложных данных. Это привело к значительному прогрессу в области естественных языков, речи и зрения. Можем ли мы разработать методы машинного обучения, которые смогут найти смысл в большом объеме исходного кода, доступного на GitHub и BitBucket? В последнее время эта перспектива привлекла большое внимание средств массовой информации благодаря новым объявлениям, таким как GitHub Co-pilot, который может автоматически генерировать исходный код из сигнатур методов и строк документации, или TransCoder от Facebook для неконтролируемого машинного перевода между языками программирования.

В отличие от естественных языков, языки программирования имеют четко определенный синтаксис и семантику, которые можно смоделировать математически. Таким образом, исходный код может быть подвергнут формальному анализу, и существует множество инструментов, которые могут выполнять глубокий семантический анализ программного обеспечения. Зачем нам машинное обучение, если мы можем алгоритмически анализировать программы? Ответ кроется в статистических свойствах исходного кода. Хотя может быть трудно доказать правильность реализации криптографического алгоритма, возможно, достаточно легко распознать общий шаблон кодирования (скажем, алгоритм сортировки) и обнаружить в нем ошибки, отыскивая любые отклонения в реализации от существует много примеров подобных реализаций. Разработка формального метода анализа программ требует значительных ручных усилий и исследовательского опыта. Если мы сможем обучить нейронные сети понимать код и рассуждать о нем, мы сможем разработать нейронные методы анализа программ на основе примеров исходного кода.

Помимо исходного кода, инженеры-программисты часто работают с несколькими модальностями данных в виде документации на естественном языке, комментариев к коду, журналов выполнения, дизайнов пользовательского интерфейса и т. д. Социальные форумы, такие как StackOverflow, являются отличным источником знаний. Таким образом, эти источники данных дают нам представление о кодировании, которое может быть недоступно в самом исходном коде. Модели, которые могут понимать код и другие модальности, например, естественный язык, могут быть весьма ценными. В отличие от веб-поиска, поиск исходного кода по ключевым словам не особенно эффективен из-за вероятного несоответствия между ключевыми словами, используемыми в поисковых запросах, и идентификаторами переменных или методов, используемых в коде. Модели контекстного встраивания общего назначения для исходного кода, такие как BERT для понимания кода (CuBERT), можно использовать для получения распределенных представлений исходного кода и запросов на естественном языке для лучшего сопоставления и поиска.

Мы наблюдаем быстрый прогресс в методах машинного обучения для понимания кода и их применениях к задачам разработки программного обеспечения. Тем не менее предстоит пройти долгий путь с точки зрения более глубокого понимания и способности анализировать большие контексты кодирования, а также унифицированной обработки исходного кода с другими источниками информации. В моем предстоящем выступлении на ODSC APAC 2021 я надеюсь передать свой энтузиазм по поводу этой новой области и ее многообещающих перспектив.

Об авторе/докладчике ODSC APAC 2021, посвященном достижениям в области машинного обучения для разработки программного обеспечения:

Адитья Канаде — доцент кафедры информатики и автоматизации Индийского института науки. Он защитил докторскую диссертацию в ИИТ Бомбея и защитил докторскую диссертацию в Пенсильванском университете. Его исследовательские интересы охватывают машинное обучение, разработку программного обеспечения и автоматизированное мышление. Он особенно воодушевлен перспективой разработки методов машинного обучения для автоматизации разработки программного обеспечения и разработки надежных и развертываемых систем машинного обучения.

Веб-страница: http://www.iisc-seal.net/kanade

LinkedIn: https://www.linkedin.com/in/aditya-kanade-572113139/

Твиттер: https://twitter.com/adityakanade0