Ошибка: проверили, что файлы отдали, а не что из них собирается прошивка
Неверный ход делается на приёмке и выглядит безупречно. Подрядчик показывает работающее изделие, передаёт архив, в акте появляется строка «исходные коды переданы», стороны расходятся довольные. Архив кладут на файловый сервер и не открывают: изделие работает, открывать незачем.
Цена ошибки становится видна в день, когда прошивку нужно изменить: сдвинуть порог срабатывания, добавить датчик, поменять адрес сервера, поправить текст на экране. Автора к этому моменту нет — он сменил работу, закрыл ИП или отвечает, что этот проект уже не помнит. Приглашённый инженер открывает архив и не может получить из него файл, который заливают в контроллер: не названа версия среды разработки, не хватает библиотеки, отсутствует файл настроек проекта. Вместо правки начинается разбор: сначала выясняют, из чего вообще собирается то, что уже стоит в изделии, и только потом меняют хоть строку. Оплачивается этот разбор вторым заходом — за то, что уже куплено.
Ход соблазнителен тем, что оба признака — «изделие работает» и «файлы переданы» — проверяются заказчиком без инженера. Признак, который действительно отвечает на вопрос, так не проверяется: кто-то должен сесть и попробовать собрать.
Что лежит в архиве вместо проекта
Строка акта «переданы исходные коды» покрывает четыре разные вещи. В описи они выглядят одинаково убедительно; различает их только то, что с переданным получится сделать: повторить заливку того же самого, прочитать текст программы на экране или собрать из этого текста новый файл для контроллера. Первое видно по расширению файла, остальное — только после того, как переданное открыли в среде разработки.
| Что передали | Как это выглядит на приёмке | Что выяснится при первой правке |
|---|---|---|
| Файл прошивки — .hex или .bin | «Вот прошивка, заливайте» | Повторить заливку можно, изменить нечего: текста программы в файле нет |
| Выгрузка программы из контроллера | «Достали прямо из шкафа» | Открывается ли выгруженное в среде разработки с именами и комментариями — отдельный вопрос, и смотреть его надо глазами на экране |
| Папка с исходным текстом | «Код есть, вот он» | Соберётся на другом компьютере или нет — заранее не сказать: версия среды, состав библиотек и файл настроек проекта нигде не названы, и подбирают их перебором |
| Исходный текст плюс инструкция по сборке и заливке | «Список файлов и порядок действий» | Проверяется действием — по инструкции собирают и сверяют результат |
Разница между третьей и четвёртой строкой и есть предмет проверки. Папка с кодом — сырьё, пригодность которого никто не заявлял: собрать из неё, может быть, и получится, но какими догадками про версию среды и недостающие библиотеки — выяснится по ходу, и повторить этот путь во второй раз будет не по чему. Комплект с инструкцией — записанное утверждение, и одна попытка сборки по этой инструкции либо подтверждает его, либо опровергает.
Можно ли поддерживать прошивку без автора: проверка, которая отвечает на этот вопрос
Ответ даёт не опись, а один опыт. Посторонний инженер берёт переданный комплект, собирает прошивку у себя и сравнивает полученное с тем, что залито в изделие. Порядок такой:
- •Взять компьютер, на котором для этого проекта ничего не ставили, — чужой ноутбук или чистую виртуальную машину,
- •Поставить среду разработки той версии, что названа в инструкции, и библиотеки из переданного комплекта, ничего не доставляя от себя,
- •Собрать прошивку и получить файл для заливки,
- •Сравнить его с образом, считанным из контроллера изделия: сначала размер, затем контрольную сумму, а если она разошлась — места, в которых разошлось содержимое,
- •Залить собранное в запасной экземпляр и проверить, что изделие ведёт себя как прежде: те же реакции на входы, тот же обмен на шине.
Побайтовое совпадение — не обязательное условие. Если в прошивку вшивается дата сборки, номер версии или имя компьютера, на котором собирали, эти байты разойдутся, и это нормально: расхождение сидит в известных полях, и каждое из них можно назвать. Ненормально другое — разный размер файла, расхождение в произвольных местах образа и разное поведение изделия: это значит, что в контроллере лежит не то, что в архиве.
Что проверяют, кроме сборки
Собранный файл бесполезен, если его нечем залить или некуда вернуть настройки. Поэтому проверка не заканчивается компилятором:
- •Чем заливать — работает ли отладочный разъём или встроенный загрузчик, нужен ли для записи пароль и у кого он,
- •Закрыта ли память на чтение — от этого зависит, можно ли вообще сверить собранное с тем, что стоит в изделии,
- •Где живут уставки и калибровки — внутри прошивки или в отдельной памяти, и что из этого стирается при перезаписи,
- •Есть ли описание обмена — правка в прошивке ломает верхний уровень, если формат кадров нигде не записан,
- •Принимает ли контроллер обновление только с подписью — тогда без ключа собранный файл в него не встанет,
- •Обращается ли прошивка к чужому серверу — и что произойдёт с изделием в день, когда этот сервер выключат.
Каждый пункт проверяется действием на запасном экземпляре, а не ответом подрядчика по телефону. Ответ «да, конечно, всё есть» здесь ничем не отличается от строки в акте.
Если проверка не сошлась — это не «нельзя», а другая работа
У проверки три исхода, и каждый ведёт к своим действиям.
| Исход | Что это значит | Что делать |
|---|---|---|
| Собралось и совпало | Прошивку продолжит другой инженер | Зафиксировать инструкцию и повторять проверку после каждой правки |
| Собралось, но не совпало | В изделии залито не то, что в архиве: правка ушла мимо проекта | Пока автор на связи — запросить актуальные файлы и повторить сверку |
| Не собирается | Передан след проекта, а не проект | Дособрать недостающее у автора; если его нет — восстанавливать по образу и по поведению |
Третий исход дороже первых двух и считается иначе: в нём оплачивается не правка, а разбор того, что удалось снять с живого устройства. Называть цену такой работы до описи того, что осталось, нельзя, и торг здесь идёт не о ставке, а о том, за какой результат вы платите: почему цена подрядчика не равна результату.
Как записать условие, чтобы проверка состоялась
Строка «переданы исходные коды» не проверяема: под неё подходит и папка с кодом, и файл прошивки. Проверяемая формулировка описывает наблюдаемое действие и его результат — например, так: инженер заказчика или третья сторона на чистом компьютере по переданной инструкции собирает прошивку, заливает полученный файл в запасной экземпляр и получает работающее изделие. Акт подписывается после того, как это проделано, а не после демонстрации автором. Как устроены такие формулировки — наблюдаемое действие и ответ «да» или «нет» на него — как принять работу, если вы не инженер.
Если акт уже подписан, смысл проверки не исчезает, а меняется. Она перестаёт быть рычагом в споре о готовности — спорить не о чем, работа принята — и становится разведкой: вы узнаёте, какой из трёх исходов вас ждёт, пока автор ещё отвечает на письма, а не в день отказа оборудования. От этого же ответа зависит, есть ли у вас выбор между «поддерживает тот, кто делал» и «поддерживает кто-то другой»: без собираемого проекта второго варианта не существует, какими бы ни были цены.
Проверку придётся повторять
Сошедшаяся один раз сборка не остаётся сошедшейся навсегда. В изделие заливают правку и забывают положить её в архив; обновляется среда разработки, и старый проект в новой версии не открывается; меняется библиотека. Поэтому свежая выгрузка проекта и повторная сборка — это не разовое событие приёмки, а часть ведения объекта, наравне с уставками и резервными копиями конфигурации. Попадает ли это в регулярную работу или оплачивается сверх — что входит в абонентское сопровождение системы.
Как с этим у нас
Когда прошивку и плату делаем мы, исходный текст, среда сборки и инструкция передаются как условие сдачи, а не как жест доброй воли. Собраны они под то, чтобы прошивку из них собирал не автор: другой инженер продолжает работу без нас — и описанную выше сборку есть на чём провести. Разбор и сопровождение чужого оборудования, у которого нет автора, — направление, где у нас стоит пометка «готовы взяться»: она видна на странице что мы делаем и что остаётся у вас рядом с самим направлением, и снимать её авансом мы не будем.
Частые вопросы
Можно ли поддерживать прошивку без автора?
Да, если из переданного комплекта посторонний инженер на своём компьютере собирает файл, сходящийся с залитым в изделие — тот же размер и то же содержимое всюду, кроме полей, которые меняются от сборки к сборке: даты, номера версии, имени машины, — и если в контроллер есть чем этот файл залить. Тогда автор не нужен: его место занимает любой, кто умеет работать с этой средой разработки. Если собрать не удаётся, поддержка тоже возможна, но начинается она с восстановления поведения по тому, что осталось, — это отдельная работа со своей ценой и сроком.
Достаточно ли файла прошивки, чтобы её можно было менять?
Нет. Файл с расширением .hex или .bin позволяет повторить заливку того же самого в новое изделие — и только это. Текста программы в нём нет: компилятор превратил его в машинные инструкции и выбросил имена и комментарии. Опись, в которой файл прошивки стоит вместо исходного текста, выглядит убедительно и не значит ничего.
Как проверить поддерживаемость, если устройство работает и трогать его нельзя?
Сборку проверяют отдельно от изделия: инженер собирает прошивку у себя и сравнивает файл с образом, считанным с контроллера. Содержимое памяти считывание не меняет, но даром для работы оно не проходит: если образ снимают через отладочный интерфейс и инструмент для этого останавливает ядро, изделие на время чтения выходит из работы. Поэтому снятие образа планируют на окно, а не делают на ходу. Заливку собранного проверяют на запасном экземпляре или на стенде, а не на работающем объекте. Если чтение памяти контроллера закрыто, сверяют не файлы, а поведение: собранная прошивка ставится на запасной экземпляр и сравнивается по реакциям и по обмену на шине.
Подрядчик не отдаёт среду разработки, ссылаясь на лицензию. Это нормально?
Чужую лицензию действительно передать нельзя — она куплена не для вас. Проверяется другое: названы ли продукт и его версия, можете ли вы приобрести такую же лицензию сами и собирается ли проект после этого без участия автора. Отказ назвать продукт и версию лицензией не объясняется — это уже привязка к исполнителю.
Мы не инженеры. Кто должен проводить такую проверку?
Любой инженер, который не участвовал в разработке: ваш штатный, другая команда или мы. Проверяется не качество кода и не изящность решений — для этого нужна квалификация уровня автора. Проверяется воспроизводимость: получается или не получается собрать и залить. Ответ здесь бинарный, и его видно без экспертизы.
Что делать, если работа уже принята, а проверку никто не делал?
Провести её сейчас, пока автор ещё отвечает на письма. Расхождение, найденное сегодня, закрывается перепиской с тем, кто делал: недостающий файл присылают. То же расхождение, найденное в день отказа оборудования, закрывается восстановлением по бинарнику. Сама проверка идёт в стороне от объекта: собирают на чужом компьютере, заливают на запасной экземпляр. К работающему изделию она подходит в одной точке — когда с контроллера снимают образ для сверки, и это место планируют заранее.