Основные сценарии применения ИИ в разработке
Инструменты на основе искусственного интеллекта все активнее внедряются в разработку ИТ-решений. Если сначала они воспринимались как интересное новшество, то сегодня программисты пользуются ими в своей повседневной работе: ИИ помогает быстрее писать код, находить ошибки, а порой за несколько минут подсказывает решение для задачи, которая раньше потребовала бы многочасового поиска в интернете или самостоятельных опытов.
О том, какую роль ИИ играет сегодня на каждом этапе основной последовательности (пайплайна) разработки программного обеспечения: в аналитике, непосредственном написании и тестировании кода, рассказал директор департамента разработки и внедрения систем искусственного интеллекта BIA Technologies Михаил Красильников.
Терминология
Начнем с аналитической функции. Позиция аналитика в каждой компании предполагает что-то свое, поэтому стоит сразу сузить понятия, которые будут использоваться далее. В рамках этой статьи под аналитиком имеется ввиду, во-первых, специалист, занимающийся работой с данными, накопленными в организации. Каждая компания аккумулирует сведения о своей деятельности и располагает определенными базами данных, содержащими как динамическую, так и статическую информацию. Аналитик по данным визуализирует их, извлекает инсайты, прогнозирует, дает рекомендации по продуктовой линейке.
Во-вторых, будет иметься в виду аналитик, который формулирует технические задания (ТЗ): каким образом нужно доработать платформу или систему, чтобы получить определенный результат. После этого разработчик реализует ТЗ в программном коде и передает ПО на тестирование. Тестировщик проверяет, правильно ли работает система и соответствует ли она техническому заданию, которое написал аналитик. Так выглядит стандартный пайплайн разработки, и далее мы рассмотрим все три его составляющие.
В этот процесс при необходимости может быть включен и аналитик по данным — уже после тестирования. К примеру, он проводит A/B тестирования, или сплит-тестирования. Так называются методики, когда сравниваются две версии продукта, после чего делается вывод, на какую из них лучше реагирует аудитория. Типичный пример – старая и новая версии сайта. Перед запуском обновленная версия открывается для части пользователей. На основе этой выборки оценивается, улучшилась ли функциональность или, наоборот, пользователи стали уходить с сайта, изменились ли такие оценочные метрики, как конверсия, глубина просмотра страниц и так далее.
ИИ как инструмент аналитика
Рассмотрим пример использования искусственного интеллекта для аналитика по данным. Чтобы получить из баз данных компании интересующую информацию и представить ее визуально, аналитику требуется составить транзакт SQL-запросы, которые покажут эти сведения, например, в виде таблицы Excel. После этого аналитик визуализирует их или, допустим, настроит отчет таким образом, чтобы он собирался автоматически по запросу бизнес-пользователей на регулярной основе. Есть достаточно много систем для создания таких отчетов: Power BI, ClickView, Tableau и другие. Так было ранее.
Сейчас же для написания SQL-запросов широко применяются языковые модели ИИ. Достаточно составить промт: прописать какие именно данные нужны, за какой период, в каком формате требуется представить результаты и на что обратить внимание. Для решения таких задач, например, используется tData Doctor GPT. Также эта модель позволяет генерировать запросы и прописывать скрипт, который будет отрисовывать необходимую визуализацию. Это сильно сокращает работу пользователя, занимающегося построением отчетности. Не исключено, что со временем этим смогут заниматься даже бизнес-пользователи, не знакомые со спецификой языка запросов.
Языковые модели помогают и специалистам, которые пишут спецификацию на доработку программного кода. Благодаря ИИ-инструментам, дообученным компанией на накопленных за предыдущее время знаниях, специалисты могут быстрее и более точно выполнить задачу, или, например, резюмировать информацию по планируемой доработке. Обычно для таких целей используются набор вики-конспектов со старыми ТЗ, юзер-стори и другие текстовые описания. Существует также известная база подобных знаний Twiki – что-то вроде аналога Википедии, хранящий большой объем текстовой технической информации.
Еще одна задача, в которой может помочь ИИ, – конвертация набросков, чернового текста или нечетко сформулированных мыслей в грамотный текст на русском языке. Не все умеют четко формулировать свои идеи, но недостаток такого навыка теперь можно скомпенсировать с помощью искусственного интеллекта. Останется только проверить, не исказила ли нейросеть какие-то детали. Иначе говоря, использование модификатора текста дает возможность писать более точные и непротиворечивые технические задания, не упустить нюансы.
Разработка ПО
Что важно для разработки программного обеспечения? Во-первых, детальное и согласованное техническое задание. Во-вторых, хороший код: легко масштабируемый, читаемый, не сильно связный, т.е. такой в который легко внести изменения. И часть работы по генерации кода сейчас также на себя берет искусственный интеллект. Разработчик пишет функцию, а ИИ по ее сигнатуре может дополнить или продолжить код. Для этого уже существуют встроенные в редакторы кода IDE инструменты. Набор опций у них достаточно большой: выявлять ошибки, проверять значения функций и переменных, запускать код на удаленной "машине", обеспечивающий доступы к другим инструментам (консоли, терминалу), к системе контроля версий. Такие инструменты значительно упрощают создание ПО.
Еще одним примером такого ИИ-помощника для создания кода является GitHub Copilot. Он может достаточно хорошо дописывать код в режиме автодополнения (и это сильно ускоряет процесс набора), подсказывает, на какие файлы и моменты стоит обратить внимание при проверке кода. Помимо этого, интерфейс чата, позволяет задавать вопросы, связанные с кодированием. Эта генеративная модель нередко предлагает хорошие решения, которые разработчик искал бы достаточно долго, если не знал бы их заранее.
Тестирование
На этом этапе разработки ИИ помогает прежде всего в автоматическом тестировании. Он генерирует автотесты, которые ускоряют проверку функциональности. Раньше существовала следующая проблема: с одной стороны, чем больше автотестов, тем меньше вероятность того, что пользователи получат сборку программного обеспечения с ошибкой. С другой стороны, сложно покрыть автотестами 100% функциональности, потому что она постоянно меняется. Функции убираются и добавляются, как следствие, требуется переписывать автотесты, а вместе с ними и документацию. Чем сильнее меняется функциональность, тем больше объем работы, что серьезно влияет на общее время разработки.
Если же генерировать автотесты с помощью ИИ, можно получить более качественный продукт с минимальными дополнительными затратами. Но важно понимать, что на текущий момент ИИ — это инструмент, который ускоряет работу грамотного тестировщика при автотестировании, но не подменяет его самого. Поручать автотесты пользователям, которые не владеют достаточным опытом и располагают только генеративным моделям, не стоит. В этом случае сильно повышается риск упустить варианты проверки, которые не ускользнули бы от квалифицированного тестировщика. Но в целом, ИИ достаточно хорошо создает тесты и охватывает функциональность, за счет чего можно увеличить объем покрытия тестирования и снизить его стоимость.
Похожая ситуации складывается с технической документацией: после изменения фрагмента кода с помощью ИИ-технологии можно быстро поменять фрагмент документации. Раньше это было достаточно проблематично сделать, особенно если компания-заказчик хотела как можно быстрее получить готовое ПО, и основное внимание разработчиков было направлено на написание кода и функциональность ИТ-решения. Как следствие, изменения в документации откладывали на потом. Через определенное время она уже довольно сильно расходилась с итоговым кодом. Сейчас эту проблему успешно решает новая технология.
Примерно так выглядят основные сценарии применения ИИ на трех этапах разработки, но, пожалуй, мало кто возьмется предсказать, какими они будут хотя бы через два-три года. Многие сходятся на том, что основной прорыв уже случился, а в ближайшем будущем доработка технологии будет вестись без слишком радикальных скачков. Но даже такое совершенствование может привнести очень серьезные изменения в подходы к разработке. Произойдет это или нет, покажет время, но уже нет никаких сомнений, что в обозримом будущем мыслить о разработке, не принимая во внимание ИИ как ее важный инструмент, вряд ли имеет смысл.