曾經有一個團隊在出貨的板子上貼有“功能測試通過”標籤,因為引導程式印出友善的UART橫幅。字串匹配,測具亮綠燈,排程看起來較不令人畏懼。然後早期單元開始退回,伴隨著隨機重置——在前幾千個中約有6%的早期失敗——正當產品需要建立信譽時。在測試台上,板子看似正常,直到真正的活動發生:BLE傳輸突發拉動電源系統,1.8V軌的電壓下降在示波器上清楚顯示。根本原因不是神祕的韌體行為,而是組裝現實:一個替代的電感,具有相似的頂部標記但不同的飽和行為,加上一個從未測試過軌道的測試。
那個逃脫不僅僅是技術失誤;它是一個穿著技術外衣的社會失敗。一旦報告說“功能通過”,其他人就會聽成“特徵已驗證”,組織就會用錯誤的地圖做出出貨決策。
功能並不是“它印出一些東西”的同義詞。
範圍第一:一個偶然的測試仍然會說謊
當韌體遲到或不穩定時,早期測試需要像它們本來的樣子:組裝缺陷檢測和硬體基準。稱它們為“功能”是團隊不小心認證了他們從未測試過的行為的方式。
這就是“功能測試”標籤陷阱的所在。有人說,“我們需要沒有韌體的功能測試”,他們通常的意思是“我們需要一種在不將生產轉變為韌體實驗室的情況下保持生產線運轉的方法。”這兩個目標不同。第一種說法容易導致草率的通過/失敗標記。第二種則邀請一個範圍明確、聲稱和非聲稱都明確的測試,避免在構建審查中陷入爭論。它也讓儀表板保持誠實,當領導層詢問通過率時,並有人試圖將自動化等同於品質。
為了防止範圍漂移,強制每個早期測試計劃以書面回答兩個問題:這個測試能捕捉到哪些缺陷,以及它能證明哪些產品行為 不 證明。一些團隊在DVT到PVT交接時將其正式化為一個雙欄簽核產物,因為記憶無法在時間壓力下存活。
| 類別 | 該測試可以聲稱此點 | 該測試不得聲稱此點 |
|---|---|---|
| 早期組裝篩查 | 檢測與定義測量一致的組裝缺陷(軌道/時鐘/重置/連續性/一或兩個模擬真實) | 證明客戶可見功能、在不同條件下的性能、安全/合規,或廣義上的“正常運作” |
| 固件協助下的後續 | 驗證與版本化、可重複測試映像和需求追蹤相關的特定行為 | 暗示涵蓋範圍超出啟用的功能標誌或測試條件之外 |
專業觀眾不需要在此處定義JTAG、SWD、UART、I2C或SPI。有效的工作是決定今天可以確定性測量的內容,以及這些測量如何命名和傳承,以免有人濫用綠燈。
測量優先基準:先鐵軌,然後時鐘/重置,再一個模擬真實
基準線不代表增加“更多測試”。它意味著建立一組較小的不變條件——通常5到8個——在任何固件症狀值得討論之前,電路板必須滿足這些條件。軌道和時鐘是經典的不變條件,因為它們是其他一切的前提,而且當在儀器上捕捉而非在日誌中時,它們很難被反駁。
這在“後期固件藉口掩蓋時鐘問題”的模式中出現。在一個案例中,電路板有時能啟動,有時會掛起,“固件不穩定”成為預設解釋。修正方法是消除變異性:在50次電源循環中重複相同的實驗,測量振盪器啟動和重置時間,並停止將不一致的日誌視為證據。由於負載電容的選擇在冷啟動條件下邊緣,時鐘源的啟動較差。測量並修正後,固件不再顯得不穩。這個改進不是更好的日誌格式,而是波形和重複性紀律。
基準線的首要任務是電源軌,因為如果軌不正,其他所有症狀都不可靠。這意味著不僅僅是“啟動所以電源正常”的測量。它包括軌的標稱電壓、相對使能和重置的序列、具有已知帶寬和良好探針技術的紋波/噪聲,以及模擬逼近最壞情況瞬變的刻意壓力。Tektronix MDO3000系列示波器和像Keysight E36313A這樣的台式電源可以輕鬆完成這些測試,校準的數字萬用表如Fluke 87V則能快速捕捉無聊的謊言。
“花了25美分的合格章”故事是一個很好的理由,將瞬態負載反應視為非選擇性。UART橫幅比較可以在邊緣軌上通過,因為啟動是一個低壓力事件,相較於無線電、馬達或傳感器突發拉電流。10秒的腳本負載步驟,或任何可重複的步驟,逼近實際電流瞬變,是一種廉價的方法來排除替代的電感器、錯誤值的電容器或幾乎不穩定的調節器。沒有這種壓力,測試只驗證電路板是否安靜,而非其健康狀況。
此時,I2C掃描陷阱往往會出現:“我們的i2c掃描顯示設備正常,因此硬體良好。”即使拉升值錯誤、邊緣軌供電、振動下開路的冷焊或啟動緩慢到能擾亂時序的時鐘,也仍可能通過枚舉。即使模擬參考電壓不合格,數字通信仍然完美,直到測量在現場偏移。I2C掃描是一個有用的煙霧測試,但不能證明電源和時序基礎的穩定性。
旨在經受固件變動的基準線,至少需要一個具體的閾值範例,因為模糊性會使“測量”變成感覺。舉例而非普遍規則:1.8V軌可能需要保持在±5%的穩態範圍內,在定義的負載步驟(例如逼近預期的無線電突發)下,電壓降可能限制在<100mV,並在短時間內恢復。這個時間窗口可以是亞毫秒或幾毫秒,取決於調節器、負載配置和下游IC的容忍度。這裡的不確定邊界很重要:紋波和電壓降閾值取決於具體的調節器補償、探針帶寬、探針的物理環路面積以及實際的瞬變形狀。使閾值可靠的方法是先在金牌單元上驗證,再在已知不良單元(或誘發故障)上驗證,以確保測量能區分“健康”與“即將產生RMA隊列”。
基準線還應包括一個在混合信號電路板上的小型類比驗證集,因為跳過類比是團隊交付“在我的測試台上運行正常”災難的原因。經典的失敗是微妙且昂貴的:數字接口完美,值在室溫下看起來合理,但現場讀數會隨著溫度或電源變化而漂移。在一個傳感器項目中,原因是一個短缺驅動的替代:一個2.048 V的參考電壓被錯誤容差等級的元件填充,零件號中只差一個字符。固件試圖用補償表來掩蓋漂移,直到有人測量了參考腳並查看了具有固定輸入的ADC代碼分佈。解決方案是BOM控制和在早期測試中進行一次參考測量,設置足夠嚴格的閾值以捕捉替代。校準無法修復交換的元件族;它只能裝飾失敗,直到它逃脫。
時鐘和重置也值得有一個基準點,原因與軌道相同:如果它們邊緣不穩定,會產生謊言。一個簡單的習慣——捕捉重置解除的時序和振盪器啟動的時間,跨越數十個電源循環——可以將“隨機掛起”變成可重現的系統。它還可以防止跨時區團隊將每個間歇性問題變成關於誰在夜間弄壞了什麼的Slack爭論。
在責怪測試板之前證明測具(Golden-First Discipline)
間歇性故障通常具有機械起源,而生產夾具是一個具有電氣副作用的機械系統。在沒有證明夾具是可靠的情況下將其結果視為真實,會導致團隊花費數天進行返工,這些返工根本沒有機會幫助解決問題。
曾經一個釘床測試夾具開始失效,對之前通過測試的電路板產生影響。症狀不一致,使得“固件不穩定”成為一個容易的替罪羊。更快的做法是用一塊已知良好的金牌板通過夾具,並比較 pogo針的接觸電阻。金牌板也失效了。這立即將責任從設計轉移到測試基礎設施。罪魁禍首並不微妙:夾具上的連接器外殼超出公差,導致對準偏移,使兩個 pogo針幾乎接觸。更換連接器後,故障模式消失。之後,夾具自測步驟成為不可協商的標準。
使用此決策樹來防止大多數早期混亂:
- 如果金牌單元在夾具上失效: 停止觸摸DUT。在任何板級調試之前,檢查 pogo針接觸電阻、連接器對準、儀器校準狀態和夾具接線。
- 如果金牌單元通過,但DUT失敗: 使用基準測量進行板子診斷。記錄序列號、板子版本、夾具ID和環境條件,以便比較故障,而不是從記憶中重現。
“在夾具上的隨機故障”這個短語應被視為一個請求,要求證明夾具的可靠性,而不是請求更多的固件日誌。這個習慣立即縮小了深夜跨站點調試的搜索空間,改變了語氣。
缺陷類別覆蓋:一個小缺陷模型階梯勝過“完整測試套件”劇院
一個高效的早期測試策略不是擁有最長檢查清單的策略,而是能用最便宜且可靠的測量捕捉最可能的缺陷類別,同時明確推遲項目,避免它們被偷偷帶入綠色通過標記。
故障模型階梯從列舉在合同構建中實際出現的缺陷類別開始:開路、短路、錯誤零件、錯誤方向、缺少零件、焊橋和機械偏差。然後將每個類別映射到不需要穩定應用固件的檢測方法:用AOI檢查粗略放置和極性錯誤,對有訪問的地方進行連通性檢查,對替代和缺失被動元件進行軌跡簽名和負載響應測試,以及在鏈路和訪問實現的情況下進行邊界掃描。這個階梯的價值不在於理論覆蓋範圍,而在於能夠大聲且書面說出:“這個測試可以檢測這些網路上的開路/短路,但不能驗證功能X。”
這也解決了“讓我們現在完全自動化生產測試”的壓力。如果自動化只是產生噪音,那就不是進步。證明夾具的重複性、定義不變性,以及選擇在下週仍具有相同意義的缺陷類別測試,才是真正的進步。其他一切都是儀表板表演。
推遲需要一條防線,因為人們將“未測試”等同於疏忽。更好的說法是,推遲是有意的風險決策:因為缺少訪問、固件過於不穩定,或因為缺陷類別相對於當前的時間表和構建環境較少。重點是阻止這些推遲變成暗示的索賠。
邊界掃描:當硬體允許時的確定性證據
邊界掃描是這種情況下最不光彩、但杠杆最大的方法,因為它可以在不需要應用固件的情況下,為細腳零件上的開路和短路提供確定性覆蓋。它也能化解爭論。如果鏈路可以進行互連測試,並且某個網路顯示開路,就沒有關於固件時序調整是否能修復的爭論。
在一次間歇性總線故障的案例中,一個便宜的邏輯分析儀讓總線看起來“大致正常”,這使得責任歸咎於韌體時序。邊界掃描互連測試隔離了BGA地址引腳上的開路——可能是冷焊——而沒有等待更多日誌或代碼。這避免了一次昂貴的X光返工循環,並將返工轉變為具有定量驗證的有針對性行動。由於證據是確定性的,Everett和檳城的CM團隊之間的協調變得更簡單。
現實檢查很重要:邊界掃描只有在存取是真實的情況下才有效。鏈路連續性需要設計進去,BSDL文件需要可用,拉升和搭接需要合理,安全設置不是“以後的問題”——熔絲除錯存取是一個硬性約束。常見的期望是“邊界掃描能測試所有東西”,常伴隨著“沒有測試墊但仍應可行”的想法。誠實的答案是,可行性取決於鏈路存取、BSDL質量和鎖定狀態;在沒有這些事實的情況下承諾覆蓋率百分比,會讓測試計劃變成幻想。
一個實用的折衷方案是對一塊板子進行邊界掃描,使用預期的夾具存取和工具鏈(工廠中常用Corelis/Asset/Keysight級套件)。如果成功,它可以取代未來每次故障分析中的數天爭論。如果不行,計劃應立即轉回軌道、時鐘、重置和一小組模擬簽名——這些仍可以通過可用的連接器和墊片測量。
能存活的測試裝置:現在最小,之後更深入
早期測試往往失敗,因為它們脆弱、未記錄或依賴於某個人的工具偏好。一個能存活的最小測試架構是按設計的:一個運行器、一個板子特定的引腳圖、一個閾值設置,以及使重跑可比的日誌記錄。
經過多次韌體重寫仍然有效的模式是一個三層的測試架構:刺激/測量抽象(通過pyvisa或DAQ層的儀器驅動程序)、一個板子映射(通常YAML引腳圖就足夠)和保持確定性的測試案例。以序列號為鍵的CSV日誌可以早期提供足夠信息,只要元數據有紀律:板子版本、夾具ID、環境條件,以及涉及韌體時的測試映像版本。語言選擇(Python、LabVIEW或供應商環境)不如模塊邊界重要。一個只有一人能編輯的單體LabVIEW VI,反而成為人員配置風險,而非測試策略。
還有一個微妙的不確定性屬於測試架構的範疇:電流輪廓簽名。當韌體狀態穩定時,它們非常有用。當韌體每天變動時,電流閾值應被視為趨勢/異常檢測,而非硬性通過/失敗,除非團隊能鎖定一個帶有受控功能標誌和可重現性的版本化測試映像。
交接點很簡單:早期測試可以隨著韌體成熟擴展其範圍,但前提是測試架構保持測量層的可信度,命名保持誠實。早期篩查可以減少組裝漏測,但不能證明產品行為。
