Автор публикации на 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 и устройствами. Иначе красивое разделение на классы может лишь перенести прежнюю сложность по новым файлам.