Представьте себе будущее, в котором искусственный интеллект (ИИ) берёт на себя рутинные задачи по разработке программного обеспечения: рефакторинг запутанного кода, миграция устаревших систем и поиск условий гонки. Всё это освободило бы инженеров-людей для работы над архитектурой, дизайном и действительно новыми проблемами, которые пока недоступны машинам.
Недавние достижения, похоже, приблизили это будущее, но в новой статье исследователей из Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института (MIT CSAIL) и нескольких сотрудничающих учреждений утверждается, что для реализации этого потенциала необходимо решить ряд проблем.
Работа под названием «Challenges and Paths Towards AI for Software Engineering» описывает многие задачи программной инженерии, помимо генерации кода, выявляет текущие узкие места и определяет направления исследований для их преодоления. Цель — позволить людям сосредоточиться на высокоуровневом проектировании, в то время как рутинные задачи будут автоматизированы.
«Все говорят о том, что программисты больше не нужны, и что сейчас доступна вся эта автоматизация, — говорит Армандо Солар-Лезама, профессор Массачусетского технологического института в области электротехники и информатики, главный исследователь CSAIL и старший автор исследования. — С одной стороны, в этой области достигнут огромный прогресс. У нас есть инструменты, которые намного мощнее, чем мы видели раньше. Но предстоит пройти ещё долгий путь, чтобы реализовать все возможности автоматизации, которых мы ожидаем».
Солар-Лезама утверждает, что популярные нарративы часто сводят программную инженерию к «части программирования для студентов: кто-то даёт вам спецификацию для небольшой функции, и вы её реализуете, или решаете задачи по программированию в стиле LeetCode». Реальная практика гораздо шире. Она включает в себя повседневные рефакторинги, которые совершенствуют дизайн, а также масштабные миграции, которые перемещают миллионы строк кода из COBOL в Java и перестраивают весь бизнес.
Основные проблемы и пути их решения
Измерение прогресса
Сегодняшние метрики заголовков были разработаны для коротких, самодостаточных задач, и хотя тесты с несколькими вариантами ответов всё ещё доминируют в исследованиях в области обработки естественного языка, они никогда не были нормой в области ИИ для кода.
Человеко-машинное взаимодействие
Первый автор Алекс Гу, аспирант MIT в области электротехники и информатики, видит сегодняшнее взаимодействие как «тонкую линию связи». Когда он просит систему сгенерировать код, он часто получает большой неструктурированный файл и даже набор модульных тестов, но эти тесты, как правило, поверхностны.
Масштабирование
Текущие модели ИИ испытывают серьёзные трудности с большими базами кода, часто насчитывающими миллионы строк. Основополагающие модели обучаются на общедоступном GitHub, но «код каждой компании уникален», — говорит Гу, что делает проприетарные соглашения о кодировании и требования к спецификациям принципиально выходящими за рамки распределения.
Авторы статьи призывают к усилиям в масштабе сообщества:
* сбор данных, отражающих процесс написания кода разработчиками (например, какой код разработчики сохраняют, а какой выбрасывают, как код изменяется со временем и т. д.);
* создание общих оценочных наборов, которые измеряют прогресс в области качества рефакторинга, долговечности исправлений ошибок и правильности миграции;
* разработка прозрачных инструментов, которые позволят моделям демонстрировать неуверенность и предлагать разработчикам возможность управления, а не пассивного принятия.
Гу формулирует повестку дня как «призыв к действию» для более масштабных коллабораций с открытым исходным кодом, которые ни одна лаборатория не сможет осуществить в одиночку. Солар-Лезама представляет себе постепенные достижения — «результаты исследований, решающие каждую из этих задач по отдельности», — которые найдут своё отражение в коммерческих инструментах и постепенно превратят ИИ из помощника с автозаполнением в настоящего инженерного партнёра.
«Почему всё это важно? Программное обеспечение уже лежит в основе финансов, транспорта, здравоохранения и повседневных мелочей, а человеческие усилия, необходимые для его безопасного создания и обслуживания, становятся узким местом. ИИ, который может взять на себя рутинную работу — и делать это без введения скрытых сбоев — освободил бы разработчиков, чтобы они могли сосредоточиться на творчестве, стратегии и этике, — говорит Гу. — Но это будущее зависит от признания того, что завершение кода — это простая часть; сложная часть — всё остальное. Наша цель — не заменить программистов. Мы хотим усилить их. Когда ИИ сможет решать рутинные и пугающие задачи, инженеры-люди наконец смогут тратить своё время на то, что могут делать только люди».
Гу и Солар-Лезама написали статью вместе с профессором Калифорнийского университета в Беркли Кушиком Сеном и аспирантами Наманом Джайном и Маниш Шетти, доцентом Корнельского университета Кевином Эллисом и аспирантом Вэнь-Дин Ли, доцентом Стэнфордского университета Дийи Янгом и аспирантом Ицзя Шао, а также будущим доцентом Университета Джона Хопкинса Цзыян Ли. Их работа была частично поддержана Национальным научным фондом (NSF), промышленными спонсорами и аффилированными лицами SKY Lab, корпорацией Intel через грант NSF и Управлением военно-морских исследований.
Исследователи представят свою работу на Международной конференции по машинному обучению (ICML).
1. Какие основные проблемы существуют на пути к созданию ИИ, способного заниматься программной инженерией?
В статье утверждается, что на пути к созданию ИИ, способного заниматься программной инженерией, существует несколько основных проблем. Среди них:
* измерение прогресса в области ИИ для кода;
* взаимодействие между человеком и машиной;
* масштабирование моделей ИИ для работы с большими базами кода.
2. Какие задачи, помимо генерации кода, стоят перед ИИ в области программной инженерии?
Согласно тексту, ИИ в области программной инженерии может заниматься не только генерацией кода, но и другими задачами, такими как:
* рефакторинг запутанного кода;
* миграция устаревших систем;
* поиск условий гонки.
3. Какие меры предлагаются для преодоления узких мест в развитии ИИ для программной инженерии?
Авторы статьи предлагают несколько мер для преодоления узких мест в развитии ИИ для программной инженерии:
* сбор данных, отражающих процесс написания кода разработчиками;
* создание общих оценочных наборов, которые измеряют прогресс в области качества рефакторинга, долговечности исправлений ошибок и правильности миграции;
* разработка прозрачных инструментов, которые позволят моделям демонстрировать неуверенность и предлагать разработчикам возможность управления.
4. Какова роль ИИ в будущем программной инженерии по мнению авторов статьи?
По мнению авторов статьи, ИИ может играть важную роль в будущем программной инженерии, взяв на себя рутинные задачи и освободив разработчиков для работы над более сложными и творческими задачами. Однако авторы подчёркивают, что цель не заменить программистов, а усилить их, позволяя им сосредоточиться на том, что могут делать только люди.
5. Какие факторы делают проприетарные соглашения о кодировании и требования к спецификациям принципиально выходящими за рамки распределения?
В статье утверждается, что код каждой компании уникален, что делает проприетарные соглашения о кодировании и требования к спецификациям выходящими за рамки распределения. Это связано с тем, что текущие модели ИИ обучаются на общедоступном GitHub, но код каждой компании имеет свои особенности и требования.