Докладчик: проф. д-р Юрген Дёлльнер

Когда мы развиваем материю интеллекта, мы также расширяем возможности выхода за пределы наших человеческих возможностей. Юрген Дёлльнер, профессор систем компьютерной графики в Институте Хассо-Платтнера в Потсдаме, Германия, недавно говорил о потенциале искусственного интеллекта (ИИ) для преобразования структуры, анализа кода и, возможно, в конечном итоге создания кода разработки программного обеспечения. На презентации присутствовало около пятидесяти гостей, в том числе ряд представителей компаний, находящихся в авангарде современного технологического рынка.

С тех пор как Джозеф Вейценбаум представил диалог между человеком и машиной в своей программе «Элиза» в 1966 году, идея ИИ вызвала некоторый первоначальный интерес, испытала фазу разочарования, а теперь набрала огромный импульс. Как и следовало ожидать, исследователи и пионеры в области разработки программного обеспечения начали использовать потенциал искусственного интеллекта, чтобы коренным образом изменить то, как разработка программного обеспечения будет работать в будущем. Его способность собирать и анализировать огромные объемы данных в автоматическом режиме, обнаруживать закономерности, а также обрабатывать и генерировать предложения на естественном языке может освободить разработчиков от многих трудоемких, нетворческих, но важных задач.

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

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

Вместо того, чтобы вращаться вокруг этого абстрактного представления о том, что ИИ играет ключевую и активную роль в качестве разработчика программного обеспечения, настоящее волнение для разработчиков программного обеспечения сосредоточено на трех идеях:

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

В то время как ответ на третий вопрос склоняется к идее индуктивного синтеза программ и, таким образом, скорее зависит от научного прогресса, достигнутого исследователями ИИ в настоящее время и в неопределенное время в будущем, текущие события в мире машинного обучения предлагают значительные перспективы для первые две идеи.

Прежде чем углубляться в детали каждого из трех вопросов, стоит объяснить некоторые фундаментальные понятия. В течение последних нескольких лет ИИ успешно обучался на корпусах естественного языка для решения таких задач, как перевод текста, его классификация и обобщение. Это стало возможным благодаря двум достижениям: доступности огромных объемов данных и новых алгоритмов, а также компьютерного оборудования, позволяющего эффективно обрабатывать большие объемы данных. Что касается универсальных репозиториев программного обеспечения в облаке, таких как GitHub, профессор Дёлльнер сказал, что в последнее время стали доступны обширные репозитории кода, где «язык» кода состоит из языков программирования. Если мы будем рассматривать исходный код, доступный в этих репозиториях, как «корпус» таким же образом, как тот, который используется для обучения ИИ на естественном языке, с языками программирования, ИИ можно будет обучить с помощью этих репозиториев кодовой базы для решения таких же сложных и удивительных задач, как обобщение исходные коды для генерации комментариев и так далее.

Упрощение применения машинного обучения

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

Машинное обучение: проведение анализа кода и поддержка процессов разработки программного обеспечения

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

Еще один способ, с помощью которого ИИ может повысить точность разработки программного обеспечения, — это процесс генерации комментариев, который недавно был реализован с помощью модели рекуррентной нейронной сети (RNN).Построение языковой модели для естественного языка комментарии и выравнивание слов в комментариях с отдельными токенами кода напрямую, CODE-NN устраняет разрыв между вербально-семантической человеческим мозгом разработчиков и числовой логикой кода. Поскольку ИИ работает со стратегической строгостью машины и избавляется от человеческих ошибок, связанных с разработчиками программного обеспечения, он может генерировать комментарии с большей точностью и потенциально может уменьшить количество несоответствующих, отсутствующих или устаревших комментариев к коду, которые возникают из-за тесноты. график проекта или другие причины.

Учитывая, что более 60% усилий разработчиков тратится на понимание программы, это может привести к значительному перераспределению человеческой энергии в области, которые в противном случае упускались бы из виду, и в противном случае обеспечить выявление и устранение ошибок в коде.

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

Создание кода

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

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

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

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