Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Рефакторинг кода OpenBMC с помощью ИИ: когда нейросети бессильны против архитектурных ошибок

Рефакторинг кода OpenBMC с помощью ИИ: когда нейросети бессильны против архитектурных ошибок

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

Попытки применить искусственный интеллект для наведения порядка во встраиваемом софте часто приводят к парадоксальным результатам: код становится чище структурно, но общие проблемы производительности и логики никуда не исчезают.

Рефакторинг кода OpenBMC с помощью ИИ: когда нейросети бессильны против архитектурных ошибок

Это микросервисы, детка: контекст проекта

В качестве наглядного примера можно рассмотреть компоненты масштабной открытой экосистемы 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 завершит передачу данных, поэтому вынужден ждать окончания потока сообщений по таймеру.

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

В чем ИИ пока безоговорочно уступает человеку?

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

При этом искусственный интеллект оптимизирует текст программы, а не инженерное решение в целом. Модель не способна самостоятельно остановить процесс и предложить радикальный пересмотр архитектуры в пользу монолитного или более эффективного библиотечного подхода.

Вывод

Современные нейросети выступают отличным инструментом для локального улучшения кодовой базы. Однако никакой ИИ не превратит архитектурно ущербный проект в образец инженерного искусства — он лишь сделает существующие костыли более упорядоченными.

Архитектурное видение и критический анализ идей остаются прерогативой человека, хотя грамотно поставленные задачи позволяют ИИ эффективно помогать в рутинных операциях по рефакторингу.

01.