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

Это микросервисы, детка: контекст проекта
В качестве наглядного примера можно рассмотреть компоненты масштабной открытой экосистемы OpenBMC, предназначенной для создания прошивок модулей управления на базе Linux. В репозитории dbus-sensors находится сервис HwmonTempSensor, отвечающий за сбор телеметрии с аппаратных датчиков температуры и других параметров с последующей публикацией сведений через системную шину D-Bus.
Формально архитектура выглядит современной: сервисы изолированы, взаимодействуют через IPC-протоколы и отделены от низкоуровневой работы с железом. Однако на уровне исходного текста вся функциональность оказывается сосредоточенной вокруг одной массивной функции, превращая поддержку микросервиса в сложную инженерную задачу.
Знакомтесь: функция createSensors на 280 строк
Анализ функции createSensors с помощью ИИ-агента выявил дюжину изолированных задач, выполняемых в рамках единого блока. Этот инструмент получает конфигурацию от управляющего сервиса, ищет драйверы I2C-устройств через sysfs, сопоставляет параметры, регистрирует объекты на D-Bus и управляет порогами опроса.
Подобный «комбайн» поддерживает режим первичного сканирования и динамического обновления конфигурации «на лету». В результате глубина вложенности условных операторов и циклов внутри функции достигает шести-семи уровней, что делает ручную поддержку кода крайне затруднительной.
Что предложил ИИ-агент?
Диагноз нейросети оказался предсказуемым: огромная функция перегружена, страдает от глубокой вложенности и отсутствия тестируемости. Агент предложил разбить монолитный код на отдельные логические шаги.
В числе предложений значилось выделение отдельной структуры SensorScanner с набором компактных методов для каждого этапа обработки, а также устранение дублирования логики при создании экземпляров датчиков, что позволяет избавиться от десятков строк повторяющегося кода.
Результаты рефакторинга и парадокс объёма кода
После реализации предложений монолитная процедура превратилась в аккуратный вызов вспомогательного класса. Тем не менее, анализ git-диффа показывает неожиданный результат: суммарный объем кода не уменьшился, а вырос.
Это объясняется тем, что разбиение гигантской функции на десяток мелких потребовало добавления новых сигнатур, структур и интерфейсов. Код стал более структурированным, но проблема архитектурной перегруженности осталась нерешенной на фундаментальном уровне.
Иллюзия чистого кода: почему нельзя отрефакторить одну функцию
С точки зрения концепций чистого кода и современных стандартов C++, результат выглядит безупречно. Однако улучшение отдельной функции не способно исправить проблемы всего проекта.
Перегруженность конкретных участков кода является прямым следствием базовых инженерных решений, заложенных в основу экосистемы. Программа выступает лишь отражением абстрактных концепций, привнесенных во встраиваемые системы без должного учета специфики среды.
Идея микросервисов и однопоточной асинхронности vs Суровая реальность OpenSource
Глобальная задача подобных утилит сводится к поиску аппаратных устройств, структурированию данных и выводу их в интерфейс. Документация dbus-sensors гордится поддержкой динамической конфигурации, изоляцией датчиков и асинхронной однопоточной моделью на базе sdbusplus/asio.
Однако на практике реализация этих принципов порождает серьезные архитектурные изъяны, существенно влияющие на надежность и общую эффективность работы программного обеспечения в условиях ограниченных ресурсов.
1. Нелепое деление и Божественный сервис
Вместо прямолинейного и понятного алгоритма с чтением локальных конфигурационных файлов разработчики внедрили сложную цепочку взаимодействия. Сервисы датчиков не читают конфиги самостоятельно — эту задачу выполняет отдельный глобальный entity-manager, который парсит все файлы и передает данные через шину.
Поскольку объем передаваемой информации велик, каждый микросервис вынужден создавать собственные фильтры для отбора нужных сведений. Посредники перемалывают потоки IPC-трафика, что снижает общую эффективность распределенной системы.
2. Главная боль: Тайм-ауты „на глаз“ из-за отсутствия транзакций
Отсутствие атомарных операций и нормальных транзакций в концепции D-Bus приводит к необходимости использовать тайм-ауты. Изолированный сервис не знает, когда entity-manager завершит передачу данных, поэтому вынужден ждать окончания потока сообщений по таймеру.
Подобный подход заставляет код оперировать сложными флагами состояния и тратить ценные процессорные ресурсы на ожидание. При высокой нагрузке или задержках со стороны управляющего сервиса система может прочитать неполные данные, что приведет к сбоям.
В чем ИИ пока безоговорочно уступает человеку?
Неработоспособные архитектурные идеи со временем обрастают массой костылей, маскирующих фундаментальные изъяны. Нейросети отлично справляются с наведением внешнего порядка, раскладывая процедурный хаос по объектно-ориентированным полочкам.
При этом искусственный интеллект оптимизирует текст программы, а не инженерное решение в целом. Модель не способна самостоятельно остановить процесс и предложить радикальный пересмотр архитектуры в пользу монолитного или более эффективного библиотечного подхода.
Вывод
Современные нейросети выступают отличным инструментом для локального улучшения кодовой базы. Однако никакой ИИ не превратит архитектурно ущербный проект в образец инженерного искусства — он лишь сделает существующие костыли более упорядоченными.
Архитектурное видение и критический анализ идей остаются прерогативой человека, хотя грамотно поставленные задачи позволяют ИИ эффективно помогать в рутинных операциях по рефакторингу.
