Zespół raz wysłał płytki z pieczątką „test funkcjonalny zaliczony”, ponieważ bootloader wyświetlił przyjazny baner UART. Tekst się zgadzał, mocowanie zaświeciło na zielono, a harmonogram wyglądał mniej przerażająco. Potem pierwsze jednostki zaczęły wracać z losowymi resetami — około 6% wczesnych awarii na początku kilku tysięcy — dokładnie wtedy, gdy produkt potrzebował wiarygodności. Na stanowisku płytki wyglądały na w porządku, aż do momentu, gdy pojawiła się prawdziwa aktywność: wybuch transmisji BLE pociągnął system zasilania, a spadek napięcia na szynie 1.8 V wyraźnie pokazał oscyloskop. Przyczyną nie było tajemnicze zachowanie firmware’u. To była rzeczywistość montażu: podstawiony inductor z podobnym oznaczeniem na górze, ale innym zachowaniem nasycenia, plus test, który nigdy nie wywołał stresu na szynie.
Ta ucieczka to nie tylko techniczny błąd; to społeczne niepowodzenie w przebraniu technicznym. Gdy raport mówi „funkcjonalne ZALICZONE”, inni słyszą „cechy zatwierdzone”, a organizacja zaczyna podejmować decyzje o wysyłce z fałszywą mapą.
Funkcjonalne nie jest synonimem „coś drukuje”.
Zakres pierwszy: test, który przypadkowo się pomylił, nadal się myli
Gdy firmware jest opóźnione lub niestabilne, wczesne testy muszą zachowywać się jak to, czym są: wykrywacze defektów montażowych i podstawy sprzętowe. Nazywanie ich „funkcjonalnymi” to sposób, w jaki zespoły przypadkowo zatwierdzają zachowanie, którego nigdy nie testowały.
Oto pułapka etykiety „test funkcjonalny”. Ktoś mówi: „potrzebujemy testu funkcjonalnego bez firmware’u”, a co zwykle mają na myśli, to „potrzebujemy sposobu na utrzymanie linii w ruchu bez zamiany produkcji w laboratorium firmware’u”. To są różne cele. Pierwsza fraza zachęca do niechlujnego pieczątki ZALICZONE/NIEZALICZONE. Druga zachęca do testu z zakresem i wyraźnymi roszczeniami i brakiem roszczeń, co zapobiega powtarzaniu się sporów podczas przeglądów produkcji. Utrzymuje też uczciwość dashboardów, gdy kierownictwo pyta o wskaźniki zaliczeń, a ktoś próbuje porównać automatyzację z jakością.
Aby zapobiec odchyleniom zakresu, wymuś, aby każdy wczesny plan testów odpowiedział na dwa pytania na piśmie: jakie defekty to wykrywa, oraz jakie zachowania produktu to nie certyfikuje. Niektóre zespoły formalizują to jako dwukolumnowy artefakt zatwierdzający podczas przekazania DVT do PVT, ponieważ pamięć nie wytrzymuje presji harmonogramu.
| Kategoria | Test może to stwierdzić | Test nie musi tego twierdzić |
|---|---|---|
| Wczesny screening montażu | Wykrywa defekty montażu zgodne z określonymi pomiarami (szyny/clock/reset/ciągłość/jedna lub dwie analogowe prawdy) | Certyfikuje funkcje widoczne dla klienta, wydajność w różnych warunkach, bezpieczeństwo/zgodność lub „działa” w szerokim sensie |
| Wsparcie firmware później | Weryfikuje określone zachowania powiązane z wersjonowanym, powtarzalnym obrazem testowym i śledzeniem wymagań | Oznacza pokrycie poza włączonymi flagami funkcji lub poza warunkami testowymi |
Profesjonalna publiczność nie potrzebuje definicji JTAG, SWD, UART, I2C ani SPI tutaj. Przydatną pracą jest zdecydowanie, co można zmierzyć deterministycznie dzisiaj, i jak te pomiary są nazywane i przekazywane dalej, aby nikt nie wykorzystał zielonego światła
Podstawa pomiarowa: szyny, potem zegary/resetowania, potem jedna analogowa prawda
Podstawa nie oznacza dodawania „więcej testów”. Oznacza ustanowienie małego zestawu invariantów — zwykle 5 do 8 — które płyta musi spełniać, zanim jakikolwiek symptom firmware będzie wart dyskusji. Szyny i zegary to klasyczne invariaty, ponieważ są warunkami wstępnymi dla wszystkiego innego, i trudno się z nimi spierać, gdy są uchwycone na instrumentach zamiast w logach.
To pojawia się w schemacie „późnego firmware, który ukrywał problem z zegarem”. W jednym przypadku płyty uruchamiały się czasami i zawieszały innym razem, a „niestabilne firmware” stało się domyślnym wyjaśnieniem. Naprawa zaczęła się od usunięcia zmienności: powtórz ten sam eksperyment na 50 cyklach zasilania, zmierz czas uruchomienia oscylatora i resetu, i przestań traktować niespójne logi jako dowód. Źródło zegara miało marginalne uruchomienie w zimnych warunkach z powodu doboru kondensatora obciążeniowego, który był „wystarczająco bliski” na papierze. Po zmierzeniu i poprawieniu, firmware przestało wyglądać na niestabilne. Wygrana nie polegała na lepszym formacie logów; to była fala i dyscyplina powtarzalności.
Pierwszym priorytetem podstawy są zasilacze, ponieważ jeśli są błędne, wszystkie inne symptomy są fałszywe. Oznacza to pomiar więcej niż „uruchamia się, więc zasilanie jest w porządku”. Oznacza to nominalne napięcia szyn, sekwencję względem włączników i resetu, ripplowanie/zakłócenia z znaną szerokością pasma i dobrą techniką sondowania, oraz celowe obciążenie, które przypomina najgorszy przypadek transientu. Oscyloskop Tektronix MDO3000 i zasilacz stołowy, taki jak Keysight E36313A, mogą wykonać wiele z tego bez ceremonii, a skalibrowany multimetr cyfrowy, jak Fluke 87V, szybko wychwytuje nudne kłamstwa.
Historia z „pieczęcią PASS, która kosztowała ćwierć” jest dobrym powodem, aby traktować reakcję na transient obciążenia jako nieopcjonalną. Porównanie bannerów UART może przejść na marginesowym szynie, ponieważ uruchomienie jest niskostresowym zdarzeniem w porównaniu do radiów, silników lub czujników pobierających prąd w impulsach. 10-sekundowy zaprogramowany krok obciążenia lub dowolny powtarzalny krok, który przybliża rzeczywisty transient prądu, to tani sposób na wykrycie podstawionych induktorów, niewłaściwych wartości kondensatorów lub regulatora, który jest ledwo stabilny. Bez tego stresu, test sprawdza tylko, czy płyta jest cicha, a nie czy jest zdrowa.
Na tym etapie pojawia się pułapka skanowania I2C: „nasze skanowanie i2c pokazuje urządzenia, więc sprzęt jest dobry”. Enumeracja może nadal przejść przy niewłaściwej wartości pull-up, marginalnej szynie zasilającej poziomowy konwerter, zimnym połączeniu, które otwiera się pod wibracją, lub zegarze, który startuje wolno na tyle, że zakłóca czasowanie raz na dziesięć uruchomień. Może też przejść, gdy odniesienie analogowe jest niskiej jakości, ponieważ komunikacja cyfrowa pozostaje idealna aż do momentu, gdy pomiary odchylają się w terenie. Skanowanie I2C to przydatny test dymny, ale nie jest dowodem na stabilną podstawę zasilania i czasowania.
Podstawa, która ma przetrwać churn firmware, wymaga co najmniej jednego konkretnego przykładu progu, ponieważ niejasność to sposób, w jaki „pomiar” zamienia się w odczucia. Przykład, a nie uniwersalna zasada: szyna 1.8 V może wymagać utrzymania w granicach ±5% w stanie ustalonym, a pod określonym krokiem obciążenia (np. przybliżając oczekiwany wybuch radiowy), spadek napięcia może być ograniczony do <100 mV z odzyskiem w krótkim oknie. To okno może mieć podmilisekundę lub kilka milisekund, w zależności od regulatora, profilu obciążenia i tolerancji downstream IC. To tutaj ważna jest granica niepewności: progi ripplowania i spadków zależą od konkretnej kompensacji regulatora, szerokości pasma sondowania, fizycznego obszaru pętli sondy i rzeczywistego kształtu transientu. Sposobem na uczciwe ustalenie progu jest jego walidacja na złotej jednostce, a następnie na znanej złej jednostce (lub wywołanym błędzie), aby potwierdzić, że pomiar rozróżnia „zdrowe” od „zaraz tworzącego kolejkę RMA”.
Podstawa powinna również obejmować mały zestaw analogowych testów sanity na płytach mieszanych sygnałów, ponieważ pomijanie analogów to sposób, w jaki zespoły wypuszczają katastrofy typu „działa na moim stole”. Klasyczna awaria jest subtelna i kosztowna: interfejs cyfrowy jest idealny, wartości wyglądają rozsądnie w temperaturze pokojowej, a następnie odczyty z pola driftują wraz z temperaturą lub zmianami zasilania. W jednym programie czujnika przyczyną była substytucja spowodowana brakiem: odniesienie 2.048 V wypełnione złym stopniem tolerancji, jeden znak różniący się w numerze części. Oprogramowanie próbowało zamaskować drift za pomocą tabel kompensacji, aż ktoś zmierzył pin odniesienia i spojrzał na rozkład kodu ADC przy stałym wejściu. Naprawa polegała na kontroli BOM i pojedynczym pomiarze odniesienia we wczesnym teście z wystarczająco ścisłym progiem, aby wykryć substytucje. Kalibracja nie może naprawić zamienionej rodziny komponentów; może tylko ukrywać awarię, aż się wydostanie.
Zegar i reset zasługują na podstawowe miejsce z tego samego powodu, co szyny: tworzą kłamstwa, jeśli są marginalne. Prosta nawyk — rejestrowanie czasu deassertion resetu i uruchomienia oscylatora podczas dziesiątek cykli zasilania — zamienia „losowe zawieszenie” w powtarzalny system. Utrzymuje też zespoły z różnych stref czasowych od zamieniania każdego przerywanego problemu w argument na Slacku o tym, kto co zepsuł w nocy.
Udowodnij mocowanie przed obwinianiem płytek (Złota dyscyplina pierwsza)
Przerywane awarie często mają mechaniczne pochodzenie, a urządzenie testowe jest systemem mechanicznym z efektami elektrycznymi. Traktowanie wyników urządzenia jako prawdy podstawowej bez udowodnienia, że urządzenie jest poprawne, to sposób, w jaki zespoły tracą dni na poprawki, które nigdy nie miały szans pomóc.
Urządzenie typu „bed-of-nails” zaczęło kiedyś zawodzić na płytkach, które wcześniej przeszły testy na stole. Objawy były niespójne, co czyniło „niestabilność firmware” łatwym kozłem ofiarnym. Szybszym rozwiązaniem było przeprowadzenie testu na znanej dobrej złotej płytce i porównanie rezystancji kontaktu przez pogo pin. Złota też zawiodła. To od razu odwróciło winę od projektu i skierowało ją na infrastrukturę testową. Winowajcą nie był subtelny: obudowa złącza na urządzeniu testowym była poza tolerancją, przesuwając wyrównanie tak, że dwa pogo piny ledwo stykały. Wymień złącze, a wzorzec awarii zniknie. Po tym kroku testu własnego urządzenia stał się nie do negocjacji.
Użyj tego drzewa decyzyjnego, aby zapobiec większości wczesnego chaosu:
- Jeśli jednostka złota zawiedzie na urządzeniu testowym: Przestań dotykać DUT-ów. Sprawdź rezystancję kontaktu pogo pinu, wyrównanie złącza, stan kalibracji instrumentu i okablowanie urządzenia testowego przed jakimkolwiek debugowaniem na poziomie płytki.
- Jeśli jednostka złota przejdzie, ale DUT zawiedzie: Kontynuuj diagnozę płytki, korzystając z podstawowych pomiarów. Zapisz numer seryjny, rewizję płytki, ID urządzenia testowego i warunki otoczenia, aby można było porównać awarię, a nie odtwarzać ją z pamięci.
Frazę „losowe awarie na urządzeniu testowym” należy traktować jako prośbę o sprawdzenie urządzenia testowego, a nie jako prośbę o więcej logów firmware. To jedno nawyk zmienia ton późnonocnego debugowania między witrynami, ponieważ natychmiast zawęża przestrzeń poszukiwań.
Pokrycie klasy defektów: Mały model błędu w drabinie pokonuje „pełny zestaw testów” teatr
Skuteczna wczesna strategia testowania nie polega na posiadaniu najdłuższej listy kontrolnej. Polega na wykrywaniu najbardziej prawdopodobnych klas defektów za pomocą najtańszych i najbardziej wiarygodnych pomiarów, przy jednoczesnym wyraźnym odłożeniu na bok, aby nie można ich było ukryć pod zielonym pieczęcią.
Schemat awaryjny zaczyna się od wyliczenia klas defektów, które faktycznie pojawiają się w kontraktowych budowach: otwarcia, zwarcia, niewłaściwy element, niewłaściwa orientacja, brak elementu, mostki lutownicze i niewłaściwe ustawienie mechaniczne. Następnie mapuje każdą klasę na metodę wykrywania, która nie wymaga stabilnego oprogramowania: AOI dla dużych błędów w umieszczeniu i polaryzacji, sprawdzanie ciągłości tam, gdzie dostęp istnieje, sygnatury szyn i odpowiedź na obciążenie dla substytucji i brakujących pasywnych elementów, oraz boundary-scan tam, gdzie łańcuchy i dostęp są rzeczywiste. Wartość tego schematu nie polega na teoretycznym pokryciu, lecz na zdolności do powiedzenia na głos i na piśmie: „ten test wykrywa otwarcia/zwarcia na tych sieciach, ale nie weryfikuje funkcji X.”
To także odnosi się do presji „pełnej automatyzacji testów produkcyjnych teraz”. Automatyzacja nie jest postępem, jeśli automatyzuje hałas. Udowodnienie powtarzalności urządzenia testowego, zdefiniowanie invariantów i wybór testów klas defektów, które nadal będą miały to samo znaczenie za tydzień, to postęp. Wszystko inne to teatr na pulpicie nawigacyjnym.
Odkładanie wymaga linii obrony, ponieważ ludzie utożsamiają „nie testowane” z zaniedbaniem. Lepszym ujęciem jest, że odroczenia to celowe decyzje ryzyka: odłożone z powodu braku dostępu, zbyt dużej zmienności firmware’u lub rzadkości klasy defektu w porównaniu do obecnego harmonogramu i kontekstu produkcji. Chodzi o to, by zapobiec zamianie tych odroczeń w domniemane roszczenia.
Boundary-Scan: Dowody deterministyczne, gdy sprzęt na to pozwala
Boundary-scan jest najmniej efektownym, ale najbardziej skutecznym narzędziem w tej sytuacji, ponieważ może zapewnić deterministyczne pokrycie dla otwarć i zwarć na elementach o drobnej rozstawie bez konieczności używania firmware’u aplikacji. Również zamyka dyskusje. Jeśli łańcuch może przeprowadzić testy połączeń i wykazuje otwarcie, nie ma dyskusji, czy zmiana timing’u firmware’u to naprawi.
W jednym przypadku z przerywanymi awariami autobusu, tani analizator logiki sprawił, że magistrala wyglądała na "w większości w porządku", co utrzymywało oskarżenia na firmware'ie związane z czasowaniem. Testy boundary-scan izolowały otwarte na pinie adresowym BGA — prawdopodobnie zimne lutowanie — bez czekania na więcej logów lub kodu. To zapobiegło kosztownej pętli naprawy rentgenowskiej i zamieniło naprawę w celowe działanie z ilościową weryfikacją. Koordynacja między Everett a zespołem CM w Penangu stała się prostsza, ponieważ dowody były deterministyczne.
Rzeczywistość ma znaczenie: boundary-scan działa tylko wtedy, gdy dostęp jest prawdziwy. Kontynuacja łańcucha musi być zaprojektowana, BSDL musi być użyteczne, pull-upy i strapping muszą być sensowne, a ustawienia bezpieczeństwa nie są "późniejszymi problemami" — dostęp debugowany przez fuse jest twardym ograniczeniem. Powszechne życzenie brzmi: "czy boundary scan może testować wszystko", często w parze z "brakiem padów testowych, ale nadal powinno być możliwe". Szczera odpowiedź brzmi, że wykonalność zależy od dostępu do łańcucha, jakości BSDL i stanu blokady; obiecywanie procentowego pokrycia bez tych faktów to jak zamiana planów testowych w fikcję.
Praktycznym kompromisem, który powstrzymuje zespoły od kręcenia się w kółko, jest pilotaż boundary-scan na jednej płytce z zamierzonym dostępem do mocowania i narzędzi (zestawy Corelis/Asset/Keysight są powszechne w fabrykach). Jeśli działa, może zastąpić dni debat przy każdej przyszłej analizie awarii. Jeśli nie, plan powinien natychmiast wrócić do szyn, zegarów, resetów i małego zestawu sygnatur analogowych — rzeczy, które nadal można zmierzyć przez dostępne złącza i pady.
Przyczepa, która przetrwała: Minimalnie teraz, głębiej później
Wczesne testy mają tendencję do umierania, ponieważ są kruche, nieudokumentowane lub związane z preferencjami narzędzi jednej osoby. Minimalny system, który przetrwa, jest nudny z założenia: sterownik, specyficzna dla płytki mapa pinów, ustawiony próg i logowanie, które sprawia, że ponowne uruchomienia są porównywalne.
Wzorzec, który przetrwał wiele przebudów firmware, to trójwarstwowy system: abstrakcja bodźców/pomiarów (sterowniki instrumentów przez coś w rodzaju pyvisa lub warstwę DAQ), mapa płytki (często wystarczy YAML z mapą pinów) oraz przypadki testowe, które pozostają deterministyczne. Logowanie do CSV z kluczem według numeru seryjnego może być wystarczające na początku, o ile metadane są dyscyplinowane: rewizja płytki, ID mocowania, warunki otoczenia i wersja obrazu testowego, gdy zaangażowany jest firmware. Wybór języka (Python vs LabVIEW vs środowiska dostawców) ma mniejsze znaczenie niż granica modułowa. Monolityczny VI LabVIEW, który może edytować tylko jedna osoba, staje się ryzykiem kadrowym, a nie strategią testową.
Istnieje również subtelna niepewność, która należy do rozmowy o systemie: podpisy profilu prądu. Są potężne, gdy stany firmware są stabilne. Gdy firmware zmienia się codziennie, progi prądu powinny być traktowane jako wykrywanie trendów/anomalii, a nie jako twarde przejście/niepowodzenie, chyba że zespół może zablokować wersjonowany obraz testowy z kontrolowanymi flagami funkcji i powtarzalnością.
Punkt przekazania jest prosty: wczesne testy mogą rozszerzać swoje twierdzenia, gdy firmware dojrzewa, ale tylko jeśli system utrzymuje warstwę pomiarową zaufaną, a nazewnictwo pozostaje szczere. Wczesne przesiewanie zmniejsza ucieczki z montażu. Nie certyfikuje zachowania produktu.
