ИИ разобрал 280-строчную функцию OpenBMC — и сделал код длиннее

4 мин чтения 0
ИИ разобрал 280-строчную функцию OpenBMC — и сделал код длиннее

Автор публикации на Habr показал, как ИИ-агент разбирал и рефакторил функцию createSensors в компоненте OpenBMC. Функция обслуживает датчики серверного модуля управления, связывает конфигурацию с устройствами и публикует данные через D-Bus. После декомпозиции код стал понятнее по структуре, но его общий объём вырос: аккуратный рефакторинг не отменяет проблем архитектуры проекта.

Суть события

Речь идёт не о новом продукте и не о готовом коммерческом инструменте, а об эксперименте с кодом открытого проекта OpenBMC. Автор взял функцию createSensors из подпроекта dbus-sensors и попросил ИИ-агента объяснить её устройство, а затем предложить рефакторинг. Исходная функция занимала около 280 строк и выполняла сразу много операций в одном обратном вызове.

ИИ выделил 12 разных задач: получение конфигурации датчиков, поиск устройств через sysfs, проверку устройств на шине I2C, сопоставление железа с настройками, создание объектов HwmonTempSensor и регистрацию их в D-Bus. Там же находились пороги, частота опроса, питание и два режима работы — первоначальное сканирование и обновление при изменении конфигурации.

Что изменил ИИ-агент

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

После реализации основная функция стала короткой точкой запуска, а детали разошлись по нескольким функциям и структурам. Вложенность уменьшилась, отдельные шаги стало проще рассматривать и потенциально тестировать. Но зелёных строк в git-диффе оказалось больше красных: дополнительные сигнатуры, классы и структуры увеличили суммарный объём кода. Это нормальная цена декомпозиции, а не доказательство того, что система стала проще целиком.

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

Контекст OpenBMC

OpenBMC — проект с открытым кодом для прошивок модулей управления серверами и другими системами. Компонент HwmonTempSensor собирает показания аппаратных датчиков и публикует их в системной шине D-Bus, откуда данные могут получать другие службы, например веб-интерфейс.

В описанной архитектуре отдельные службы датчиков не читают все конфигурационные файлы напрямую. Центральный entity-manager разбирает конфигурацию и передаёт её части через D-Bus. Сервис датчиков ждёт нужные данные, отслеживает изменения и запускает обработку после паузы без новых сообщений. В исходной публикации это решение критикуется как источник таймеров, состояния и сложной логики; это оценка автора эксперимента, а не независимо измеренный показатель производительности.

Главное напряжение здесь не в том, что ИИ плохо написал C++. Он достаточно убедительно помог разложить код на части. Проблема в другом: локальное исправление функции не меняет автоматически устройство всей системы, порядок обмена данными и границы ответственности сервисов. Маленькие функции могут сделать конкретный файл удобнее, но не гарантируют, что архитектура стала удачнее.

Что дальше

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

Для команды это означает простой порядок действий: сначала зафиксировать поведение старой функции тестами и наблюдаемыми сценариями, затем менять структуру небольшими шагами и отдельно проверять взаимодействие с D-Bus, sysfs и устройствами. Иначе красивое разделение на классы может лишь перенести прежнюю сложность по новым файлам.

Материал был полезен?
AI-инструменты без границ

Получите доступ к нужному AI-сервису уже сегодня

ChatGPT, Claude, Gemini, MiniMax и агенты для кода — предложения проверенных продавцов по доступным ценам. Оплата российскими картами, через СБП или криптовалютой.

Проверенные продавцы Быстрая выдача Доступные цены
Прокрутить вверх