S
Stitex
Разработка

Как проверить, что прошивку можно поддерживать

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

11 сентября 20269 минутStitex Technologies

Ошибка: проверили, что файлы отдали, а не что из них собирается прошивка

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

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

Ход соблазнителен тем, что оба признака — «изделие работает» и «файлы переданы» — проверяются заказчиком без инженера. Признак, который действительно отвечает на вопрос, так не проверяется: кто-то должен сесть и попробовать собрать.

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

Что лежит в архиве вместо проекта

Строка акта «переданы исходные коды» покрывает четыре разные вещи. В описи они выглядят одинаково убедительно; различает их только то, что с переданным получится сделать: повторить заливку того же самого, прочитать текст программы на экране или собрать из этого текста новый файл для контроллера. Первое видно по расширению файла, остальное — только после того, как переданное открыли в среде разработки.

Что передалиКак это выглядит на приёмкеЧто выяснится при первой правке
Файл прошивки — .hex или .bin«Вот прошивка, заливайте»Повторить заливку можно, изменить нечего: текста программы в файле нет
Выгрузка программы из контроллера«Достали прямо из шкафа»Открывается ли выгруженное в среде разработки с именами и комментариями — отдельный вопрос, и смотреть его надо глазами на экране
Папка с исходным текстом«Код есть, вот он»Соберётся на другом компьютере или нет — заранее не сказать: версия среды, состав библиотек и файл настроек проекта нигде не названы, и подбирают их перебором
Исходный текст плюс инструкция по сборке и заливке«Список файлов и порядок действий»Проверяется действием — по инструкции собирают и сверяют результат

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

Можно ли поддерживать прошивку без автора: проверка, которая отвечает на этот вопрос

Ответ даёт не опись, а один опыт. Посторонний инженер берёт переданный комплект, собирает прошивку у себя и сравнивает полученное с тем, что залито в изделие. Порядок такой:

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

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

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

Что проверяют, кроме сборки

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

  • Чем заливать — работает ли отладочный разъём или встроенный загрузчик, нужен ли для записи пароль и у кого он,
  • Закрыта ли память на чтение — от этого зависит, можно ли вообще сверить собранное с тем, что стоит в изделии,
  • Где живут уставки и калибровки — внутри прошивки или в отдельной памяти, и что из этого стирается при перезаписи,
  • Есть ли описание обмена — правка в прошивке ломает верхний уровень, если формат кадров нигде не записан,
  • Принимает ли контроллер обновление только с подписью — тогда без ключа собранный файл в него не встанет,
  • Обращается ли прошивка к чужому серверу — и что произойдёт с изделием в день, когда этот сервер выключат.

Каждый пункт проверяется действием на запасном экземпляре, а не ответом подрядчика по телефону. Ответ «да, конечно, всё есть» здесь ничем не отличается от строки в акте.

Если проверка не сошлась — это не «нельзя», а другая работа

У проверки три исхода, и каждый ведёт к своим действиям.

ИсходЧто это значитЧто делать
Собралось и совпалоПрошивку продолжит другой инженерЗафиксировать инструкцию и повторять проверку после каждой правки
Собралось, но не совпалоВ изделии залито не то, что в архиве: правка ушла мимо проектаПока автор на связи — запросить актуальные файлы и повторить сверку
Не собираетсяПередан след проекта, а не проектДособрать недостающее у автора; если его нет — восстанавливать по образу и по поведению

Третий исход дороже первых двух и считается иначе: в нём оплачивается не правка, а разбор того, что удалось снять с живого устройства. Называть цену такой работы до описи того, что осталось, нельзя, и торг здесь идёт не о ставке, а о том, за какой результат вы платите: почему цена подрядчика не равна результату.

Как записать условие, чтобы проверка состоялась

Строка «переданы исходные коды» не проверяема: под неё подходит и папка с кодом, и файл прошивки. Проверяемая формулировка описывает наблюдаемое действие и его результат — например, так: инженер заказчика или третья сторона на чистом компьютере по переданной инструкции собирает прошивку, заливает полученный файл в запасной экземпляр и получает работающее изделие. Акт подписывается после того, как это проделано, а не после демонстрации автором. Как устроены такие формулировки — наблюдаемое действие и ответ «да» или «нет» на него — как принять работу, если вы не инженер.

Если акт уже подписан, смысл проверки не исчезает, а меняется. Она перестаёт быть рычагом в споре о готовности — спорить не о чем, работа принята — и становится разведкой: вы узнаёте, какой из трёх исходов вас ждёт, пока автор ещё отвечает на письма, а не в день отказа оборудования. От этого же ответа зависит, есть ли у вас выбор между «поддерживает тот, кто делал» и «поддерживает кто-то другой»: без собираемого проекта второго варианта не существует, какими бы ни были цены.

Проверку придётся повторять

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

Как с этим у нас

Когда прошивку и плату делаем мы, исходный текст, среда сборки и инструкция передаются как условие сдачи, а не как жест доброй воли. Собраны они под то, чтобы прошивку из них собирал не автор: другой инженер продолжает работу без нас — и описанную выше сборку есть на чём провести. Разбор и сопровождение чужого оборудования, у которого нет автора, — направление, где у нас стоит пометка «готовы взяться»: она видна на странице что мы делаем и что остаётся у вас рядом с самим направлением, и снимать её авансом мы не будем.

Частые вопросы

Можно ли поддерживать прошивку без автора?

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

Достаточно ли файла прошивки, чтобы её можно было менять?

Нет. Файл с расширением .hex или .bin позволяет повторить заливку того же самого в новое изделие — и только это. Текста программы в нём нет: компилятор превратил его в машинные инструкции и выбросил имена и комментарии. Опись, в которой файл прошивки стоит вместо исходного текста, выглядит убедительно и не значит ничего.

Как проверить поддерживаемость, если устройство работает и трогать его нельзя?

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

Подрядчик не отдаёт среду разработки, ссылаясь на лицензию. Это нормально?

Чужую лицензию действительно передать нельзя — она куплена не для вас. Проверяется другое: названы ли продукт и его версия, можете ли вы приобрести такую же лицензию сами и собирается ли проект после этого без участия автора. Отказ назвать продукт и версию лицензией не объясняется — это уже привязка к исполнителю.

Мы не инженеры. Кто должен проводить такую проверку?

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

Что делать, если работа уже принята, а проверку никто не делал?

Провести её сейчас, пока автор ещё отвечает на письма. Расхождение, найденное сегодня, закрывается перепиской с тем, кто делал: недостающий файл присылают. То же расхождение, найденное в день отказа оборудования, закрывается восстановлением по бинарнику. Сама проверка идёт в стороне от объекта: собирают на чужом компьютере, заливают на запасной экземпляр. К работающему изделию она подходит в одной точке — когда с контроллера снимают образ для сверки, и это место планируют заранее.

Проверим переданное, пока автор ещё на связи

Скажем, что из вашего комплекта собирается, чего в нём не хватает и что придётся снимать с самого изделия. На странице направлений видно, где у нас наработанная практика, а где пометка о готовности взяться: по чужим прошивкам стоит вторая.

Контакты

Спросите нас по теме статьи

Опишите свою ситуацию — скажем, что из этого применимо у вас, а что нет. Без обязательств.

Telegram
@StitexBot
Отвечаем
В течение рабочего дня