У нас железка в трёх версиях, 1, 2 и 3. Каждой версии существует разное число экземпляров.
На все версии у меня один проект прошивки. При помощи условной компилации в нём написано:
#ifdef VERSION_1
//низкоуровневые настройки для 1-й версии
#endif
И так далее. Различий между версиями немного, но они очень важны. Прошивка, скомпилированная для одной версии, не будет работать на другой. Даже не запустится.
Естественно, у меня всё автоматизировано. В компиляторе есть нужное число конфигураций, есть кнопка batch build. Когда я готовлю "релиз", я собираю все версии прошивки одним махом и кладу в целевую папку.
И вот мы стали обновлять ПО у пользователя с самой старой версией железки. А оно не запускается. Не перепрошивали ему железку давно, прошло уже много релизов. Мне пришлось перебрать несколько версий прошивок, прежде чем я нашёл ту, на которой всё перестало работать. Причина была тупая. Я случайно внёс изменения в раздел, который не компилируется, когда идёт сборка для самой новой железки. А тестировали мы всё именно на ней. Когда же идёт компиляция под старую версию, ошибка попадает в прошивку. Ошибку я исправил. (теперь иди, под новой версией железки проверь!)
Это что за кринж такой? Почему мы не тестируем на старой железке перед релизом? Да потому что нет у нас её. Все экземпляры находятся у пользователей. Единственное нормальное решение -- иметь у себя по одному экземпляру каждой версии. И так можно было бы сделать, если бы железки стоили по сто баксов. Но они стоят гораздо дороже. Получается, что выгоднее ловить баги у пользователей, чем держать у себя три (а в перспективе ещё больше) тестовых стенда.
Спящий баг
zHz00
| суббота, 08 апреля 2023