Однажды команда отправила платы с печатью «функциональное тестирование пройдено», потому что загрузчик вывел дружелюбный UART-баннер. Строка совпала, фикстура зажглась зелёным, и график казался менее устрашающим. Затем ранние устройства начали возвращаться с случайными сбросами — около 6% ранних отказов в первые несколько тысяч — как раз тогда, когда продукт нуждался в доверии. На стенде платы казались исправными, пока не началась настоящая активность: всплеск передачи BLE потянул за систему питания, и просадка шины 1.8 В явно проявилась на осциллографе. Истинная причина заключалась не в загадочном поведении прошивки. Это была реальность сборки: заменённый индуктивный элемент с похожей верхней меткой, но другим насыщением, плюс тест, который никогда не нагружал шину.
Этот побег — не просто техническая ошибка; это социальный провал, одетый в технический костюм. Как только отчёт говорит «функционально ПРОЙДЕНО», другие слышат «функции подтверждены», и организация начинает принимать решения о поставке с ложной картой.
Функциональный — не синоним «что-то выводит на экран».
Область сначала: тест, который случайно лжёт, всё равно лжёт
Когда прошивка задерживается или нестабильна, ранние тесты должны вести себя как есть: детекторы дефектов сборки и базовые линии аппаратного обеспечения. Назвать их «функциональными» — значит случайно сертифицировать поведение, которое они никогда не проверяли.
Вот ловушка ярлыка «функциональный тест». Кто-то говорит: «нам нужен функциональный тест без прошивки», и обычно подразумевает «нам нужен способ продолжать линию без превращения производства в лабораторию прошивки». Это разные цели. Первая формулировка допускает небрежную печать ПРОЙДЕНО/НЕ ПРОЙДЕНО. Вторая предполагает тест с определённым охватом, с явными заявлениями и явными отрицаниями, что предотвращает зацикливание аргументов при обзоре сборки. Также это делает панели мониторинга честными, когда руководство спрашивает о процентах прохождения, а кто-то пытается приравнять автоматизацию к качеству.
Чтобы предотвратить отклонение области, заставьте каждый ранний план тестирования ответить письменно на два вопроса: какие дефекты он обнаружит и какие поведения продукта он сертифицирует. не Некоторые команды формализуют это как двухстолбцовый акт подписи во время передачи DVT на PVT, потому что память не выдерживает давления графика.
| Категория | Тест может заявлять это | Тест не должен заявлять это |
|---|---|---|
| Ранний скрининг сборки | Обнаруживает дефекты сборки, соответствующие заданным измерениям (рельсы/часы/сброс/континуитет/одна или две аналоговые истины) | Сертифицирует видимые для клиента функции, производительность в различных условиях, безопасность/соответствие или «работает» в широком смысле |
| Позже с помощью прошивки | Проверяет конкретные поведения, связанные с версионированным, воспроизводимым тестовым образом и требованиями трассировки | Предполагает покрытие за пределами включенных флагов функций или за пределами условий теста |
Профессиональной аудитории не нужно определение JTAG, SWD, UART, I2C или SPI здесь. Полезная работа — решить, что можно измерить детерминированно сегодня, и как эти измерения получить и передать дальше, чтобы никто не использовал зеленый свет в своих целях.
Базовая линия измерений: рельсы, затем часы/сбросы, затем один аналоговый истина
Базовый уровень не означает добавление «больше тестов». Он подразумевает установление небольшого набора инвариантов — обычно 5-8 — которые плата должна удовлетворять, прежде чем любой симптом прошивки станет предметом обсуждения. Рельсы и часы — классические инварианты, потому что они являются предусловиями для всего остального, и с ними трудно спорить, когда они зафиксированы на приборах, а не в логах.
Это проявляется в шаблоне «опоздавшее оправдание прошивки, скрывающее проблему с часами». В одном случае платы иногда загружались, а иногда зависали, и «нестабильность прошивки» стала стандартным объяснением. Исправление началось с устранения вариативности: повторить один и тот же эксперимент при 50 циклах питания, измерить запуск и сброс осциллятора, и перестать рассматривать несогласованные логи как доказательство. Источник часов имел пограничный запуск в холодных условиях из-за выбора конденсатора нагрузки, который был «достаточно близко» на бумаге. После измерения и исправления прошивка перестала казаться нестабильной. Победа заключалась не в лучшем формате логов, а в форме волны и дисциплине повторяемости.
Первым приоритетом базового уровня являются силовые рельсы, потому что если рельсы неправильные, все остальные симптомы — ложь. Это означает измерение более чем «он загружается, значит питание в порядке». Это означает номинальные напряжения рельсов, последовательность относительно включений и сброса, пульсации/шумы с известной полосой пропускания и хорошей техникой зонда, а также сознательное стресс-тестирование, приближающееся к худшему случаю. Осциллограф серии Tektronix MDO3000 и лабораторный источник питания, такой как Keysight E36313A, могут выполнить большую часть этого без церемоний, а откалиброванный мультиметр, например Fluke 87V, быстро выявит скучные ложи.
История с «печатью PASS, которая стоила четверть» — хорошая причина считать реакцию на транзиентную нагрузку необязательной. Сравнение баннера UART может пройти на пограничном рельсе, потому что загрузка при загрузке — это событие с низким стрессом по сравнению с радиостанциями, моторами или датчиками, которые пиково потребляют ток. 10-секундный скриптовый шаг нагрузки или любой повторяемый шаг, приближающийся к реальному транзиенту тока, — это дешевый способ выявить замененные индукторы, неправильно подобранные конденсаторы или регулятор, который едва стабилен. Без этого стресса тест проверяет только, что плата тихая, а не что она здорова.
На этом этапе появляется ловушка сканирования I2C: «наш скан I2C показывает устройства, значит аппаратное обеспечение в порядке». Перечисление все еще может пройти при неправильном значении подтяжки, пограничном рельсе, питающем уровневый преобразователь, холодном соединении, которое разрывается при вибрации, или часовом источнике, который запускается достаточно медленно, чтобы спутать тайминг при каждом десятом запуске. Также оно может пройти, когда аналоговая ссылка некачественная, потому что цифровая связь остается идеальной до тех пор, пока измерения не начнут дрейфовать в поле. Сканы I2C — полезная проверка на дым, но это не доказательство стабильной основы питания и тайминга.
Базовая линия, предназначенная для выживания при смене прошивки, должна иметь хотя бы один конкретный пример порога, потому что неопределенность — это то, как «измерение» превращается в вибрации. Пример, а не универсальное правило: 1.8 В шина может потребоваться для поддержания стабильности в пределах ±5%, и при определенном шаге нагрузки (например, приближающемся к ожидаемому радиовсплеску) просадка может быть ограничена <100 мВ с восстановлением в короткое окно. Это окно может быть субмиллисекундным или несколькими миллисекундами, в зависимости от регулятора, профиля нагрузки и того, что могут терпеть downstream ICs. Именно здесь важна граница неопределенности: пороги пульсации и просадки зависят от конкретной компенсации регулятора, пропускной способности зондирования, физической площади петли зонда и фактической формы переходных процессов. Способ сделать порог честным — проверить его на эталонной единице, а затем на известной плохой единице (или вызванной ошибке), чтобы подтвердить, что измерение различает «здоровый» и «приближающийся к созданию очереди RMA».
Базовая линия также должна включать небольшой аналоговый контроль на смешанных сигнальных платах, потому что пропуск аналогового — это как команды отправляют «работает у меня на стенде» катастрофы. Классическая неисправность тонкая и дорогая: цифровой интерфейс идеален, значения выглядят разумными при комнатной температуре, а затем показания на месте дрейфуют с изменением температуры или питания. В одной программе датчиков причина была в замещении из-за нехватки: опорное напряжение 2.048 В было вставлено с неправильным классом допуска, одна буква отличалась в номере детали. Прошивка пыталась скрыть дрейф с помощью таблиц компенсации, пока кто-то не измерил вывод опорного сигнала и не посмотрел распределение кода АЦП при фиксированном входе. Решением было контроль BOM и одно измерение опорного сигнала на раннем этапе тестирования с достаточно жестким порогом, чтобы поймать замещения. Калибровка не может исправить перепутанный семейство компонентов; она может только скрывать неисправность, пока она не выйдет наружу.
Такты и сбросы заслуживают базового места по той же причине, что и шины: они создают ложь, если они находятся на грани. Простая привычка — фиксировать время деassertion сброса и запуск тактового генератора при десятках циклов питания — превращает «случайную зависание» в воспроизводимую систему. Это также мешает командам из разных часовых поясов превращать каждую перебойную проблему в спор в Slack о том, кто что сломал за ночь.
Докажите фикстуру перед обвинением плат (золотая дисциплина)
Периодические неисправности часто имеют механическое происхождение, и производственный фикстур — это механическая система с электрическими побочными эффектами. Рассматривать результаты фикстуры как истину в последней инстанции без доказательства, что фикстура исправна, — это как тратить дни на переработку, которая никогда не могла помочь.
Фикстура с гвоздями однажды начала отказывать платы, которые ранее прошли запуск на стенде. Симптомы были непоследовательными, что делало «нестабильность прошивки» легкой мишенью. Быстрым решением было пропустить известную хорошую плату через фикстуру и сравнить сопротивление контактов на pogo-пинах. И золотая плата тоже не прошла. Это сразу же отвлекло обвинения от дизайна и переключило их на тестовую инфраструктуру. Виновником был неуловимый: корпус разъема на фикстуре был вне допусков, смещая выравнивание так, что два pogo-пина едва касались друг друга. Замените разъем — и паттерн неисправности исчезнет. После этого шаг самотестирования фикстуры стал обязательным.
Используйте это дерево решений, чтобы предотвратить большинство ранних хаосов:
- Если эталонная единица не прошла на фикстуре: Прекратите трогать DUT. Проверьте сопротивление контактов pogo-пинов, выравнивание разъемов, состояние калибровки прибора и проводку фикстуры перед любой отладкой на уровне платы.
- Если эталонная единица прошла, но DUT не прошел: Продолжайте диагностику платы, используя базовые измерения. Запишите серийный номер, ревизию платы, ID фикстуры и условия окружающей среды, чтобы можно было сравнить неисправность, а не воспроизвести ее из памяти.
Фраза «случайные неисправности на фикстуре» должна восприниматься как просьба доказать исправность фикстуры, а не как запрос на дополнительные журналы прошивки. Эта одна привычка меняет тон позднего ночного отладки между сайтами, потому что сразу же сокращает пространство поиска.
Покрытие по классу дефектов: небольшая модель неисправности в виде лестницы превосходит «полный набор тестов» в театре
Эффективная стратегия раннего тестирования — это не та с самым длинным списком проверок. Это та, которая ловит наиболее вероятные классы дефектов с помощью самых дешевых надежных измерений, делая отложенные проверки явными, чтобы их нельзя было скрыть под зеленой печатью.
Лестница модели дефекта начинается с перечисления классов дефектов, которые реально появляются в контрактных сборках: открытые цепи, короткие замыкания, неправильная деталь, неправильная ориентация, отсутствующая часть, перемычки при пайке и механальные смещения. Затем она связывает каждый класс с методом обнаружения, который не требует стабильного программного обеспечения: AOI для грубых ошибок размещения и полярности, проверки целостности там, где есть доступ, сигнатуры шин и отклик нагрузки для замещений и отсутствующих пассивных компонентов, и границевое сканирование там, где цепи и доступ реальны. Ценность лестницы — не теоретическое покрытие, а возможность сказать вслух и письменно: «этот тест обнаруживает открытые цепи/короткие на этих сетях, но не проверяет функцию X.»
Это также решает проблему давления «давайте полностью автоматизируем производственные тесты сейчас». Автоматизация — не прогресс, если она автоматизирует шум. Доказательство повторяемости фикстуры, определение инвариантов и выбор тестов классов дефектов, которые будут иметь тот же смысл на следующей неделе, — это прогресс. Всё остальное — это театр на панели управления.
Отложение требует линии защиты, потому что люди приравнивают «не протестировано» к небрежности. Лучшее объяснение — что отложения — это осознанные решения о риске: отложены из-за отсутствия доступа, из-за слишком волатильного прошивки или потому что класс дефекта редкий относительно текущего графика и контекста сборки. Главное — остановить превращение этих отложений в подразумеваемые претензии.
Граничное сканирование: детерминированные доказательства, когда это позволяет аппаратное обеспечение
Границы сканирования — самый невыгодный и наименее эффектный инструмент в этой ситуации, потому что он может обеспечить детерминированное покрытие для открытий и коротких замыканий на деталях с тонким шагом без необходимости использования встроенного программного обеспечения. Он также снимает споры. Если цепь может выполнять тесты межсоединений, и сеть показывает открытие, нет смысла спорить о том, исправит ли это настройка времени работы прошивки.
В одном случае с прерывистыми сбоями шины дешевый логический анализатор делал шину «в основном исправной», что удерживало обвинения в адрес прошивки. Тесты межсоединений с помощью границ сканирования выявили открытие на выводе адреса BGA — вероятно, холодное соединение — без ожидания дополнительных логов или кода. Это позволило избежать дорогостоящей повторной работы с рентгеном и превратило повторную работу в целенаправленное действие с количественной проверкой. Координация между Эвереттом и командой CM в Пенанге стала проще, потому что доказательства были детерминированными.
Реальная проверка важна: границы сканирования работают только при реальном доступе. Цепь должна быть спроектирована с учетом непрерывности, BSDL должны быть пригодны к использованию, подтяжки и стяжки должны быть разумными, а настройки безопасности — не «проблемы позже» — доступ к отладке с предохранителями является жестким ограничением. Распространенная мечта — «может ли границы сканирования тестировать всё», часто в паре с «нет тестовых площадок, но всё равно должно быть возможно». Честный ответ — осуществимость зависит от доступа к цепи, качества BSDL и состояния блокировки; обещание процента покрытия без этих фактов превращает тестовые планы в вымысел.
Практическим компромиссом, который не заставит команды вращаться, является пилотирование границ сканирования на одной плате с предполагаемым доступом к крепежу и инструментарием (наиболее распространены комплекты Corelis/Asset/Keysight в фабриках). Если это работает, оно может заменить дни споров при каждом будущем анализе неисправностей. Если нет, план следует немедленно переключить обратно на рельсы, такты, сбросы и небольшой набор аналоговых сигнатур — вещей, которые всё еще можно измерить через доступные разъемы и площадки.
Выживающая цепь: минимально сейчас, глубже позже
Ранние тесты обычно умирают, потому что они хрупки, не задокументированы или привязаны к предпочтениям одного человека. Минимальный каркас, который выживает, по замыслу скучен: бегунок, специфическая для платы карта выводов, установленный порог и логирование, которое делает повторные запуски сопоставимыми.
Шаблон, который выдержал несколько переписаний прошивки, — это трехслойный каркас: абстракция стимулов/измерений (драйверы устройств через что-то вроде pyvisa или слой DAQ), карта платы (часто достаточно YAML-карты выводов), и тестовые случаи, остающиеся детерминированными. Логирование в CSV, привязанное к серийному номеру, может быть достаточно ранним, при условии дисциплинированных метаданных: ревизия платы, ID крепежа, окружающие условия и версия тестового образа при использовании прошивки. Выбор языка (Python против LabVIEW или сред поставщика) важнее, чем модульная граница. Монотонный VI LabVIEW, который может редактировать только один человек, становится риском для штата, а не стратегией тестирования.
Также существует тонкая неопределенность, которая относится к разговору о каркасе: подписи профиля тока. Они мощны, когда состояния прошивки стабильны. Когда прошивка меняется ежедневно, пороги тока следует рассматривать как инструмент для обнаружения трендов/аномалий, а не как жесткое прохождение/непроход. Это возможно только если команда может зафиксировать версионированный тестовый образ с управляемыми флагами функций и воспроизводимостью.
Точка передачи проста: ранние тесты могут расширять свои заявления по мере развития прошивки, но только если каркас сохраняет доверие к измерительному слою и честно называет компоненты. Ранний скрининг уменьшает количество ошибок при сборке. Он не подтверждает поведение продукта.
