黑盒契約
黑盒驗收不猜暫存器或演算法,只定義外部輸入與輸出。本案例自訂介面契約含Request、ParameterSet、Status、Result、Error,另記送出、接受、完成與回覆時間;這些名稱不是第三方設備的通用API。
當設備只提供最後狀態時,無法證明中間Accepted曾發生;報告要把可觀察性限制列為介面風險,不補寫不存在的事件。
黑盒輸入的所影響的外部行為要有可核對的預期結果,不要求設備逐欄回顯全部輸入。若設備只回Result=42而沒有RequestId,並行兩筆請求時不能可靠關聯;若契約保證同時只有一筆未完成工作,可序列化測試並記錄這項前提,不能一律判通不過。
黑盒測試先固定Request結構與觀察窗口,不能因不知道內部演算法就放寬輸入範圍。R17的接受、完成與錯誤都透過外部介面記錄,內部不可觀察部分明確列限制。
契約寫型別、單位、範圍、必填、版本與錯誤表示。文件只說成功或失敗時,不自行增加中間狀態;未定義項列待澄清。
正常案例送ParameterSet=A、Request=R17,看到Accepted後在期限內回Result=42。這只證明外部行為,不證明內部實作或硬體狀態。
替身版本與真設備分開標記。替身能覆蓋介面案例,不能代替真設備的時序、韌體限制或硬體故障。
本文是通用第三方介面驗收設計,示例R17與結果四十二不對應特定設備指令。測試開始前確認所用協定、韌體與外部契約版本;真設備可能沒有接受狀態或請求識別,不可補畫不存在的訊號作為驗收證據。
邊界與未知
若同時兩個Request共用回覆通道,測試要檢查順序、關聯鍵和逾時後晚到回覆,不能只跑單一請求。
只有介面提供足夠事件且時間基準可信時,才把總期限拆成接受、處理與回覆等分段。若只能量客戶送出到收到結果,就報總間隔;不能從黑盒看不到的中間狀態估出精確處理時間。
ParameterSet缺單位時,設備若回Accepted也不能直接通過;要檢查結果是否可解釋、回覆是否帶版本與品質。若契約沒說,報告應把接受行為列為待澄清風險。
測空參數、下界、上界、未知欄位。本例必要欄缺失預期拒絕並提供可診斷錯誤;未知欄若接受只記相容性觀察,不把一次接受當未來保證。
Accepted後完成回覆遺失時,狀態依契約為Unknown或Timeout,不能直接重播可能有副作用的命令。黑盒測試要把結果未知視為一級輸出。
同RequestId重送可能回原結果、拒絕或新工作。若未定義,報告實際行為與風險,不自創冪等保證。
保存原始訊息、接收時間、順序與設備顯示。只留最終Result會失去曾拒絕、逾時或版本錯誤的證據。
若採用單一未完成請求的序列模式,逾時後仍可能收到舊回覆。下一筆開始前須按介面規則確認前一工作已結束或通道已重新建立,不能只靠正常時一次一筆,就假定逾時後的第一個回覆一定屬於新請求。
時序與錯誤
錯誤碼映射表要帶供應商版本與原文;本地分類更新時保留舊映射,避免歷史報告被重新解讀。
同RequestId換參數的結果若設備回原結果,可能是冪等,也可能是快取;除非文件定義,保留原始行為並列風險,不能直接當重播安全。
晚到結果須關聯原請求及連線或啟動世代。案例版本是測試文件資訊,未必存在設備回覆中;若裝置不能提供世代,依協定採唯一識別、重新建立通道或其他可驗證隔離方式,無法確認就標未知。
時間線列T0送R17、T1接受、T2狀態、T3結果。跨主機時鐘不可靠時保存各端原始時間與接收順序,不用牆鐘硬算延遲。
故意讓結果晚於150毫秒,觀察是否顯示待定或逾時;晚到Result不能偷偷改寫已關閉案例,除非契約明訂補充事件。
未知錯誤保留原始碼與文字,同時可依專案分類為通用故障供統計,但分類不得取代原碼,也不能把它映射成成功。回覆格式變更時先判解析失敗,再判設備業務錯誤。
同腳本執行三次,保存延遲、結果與版本。通過可允許範圍,但要寫樣本數和偏離處置,不只看平均。
相容與分派
版本相容案例要保存真實回覆與解析後結果。若解析器吞掉未知錯誤,應把吞掉欄位列為客戶風險,不以空錯誤欄當設備成功。
第三方只提供錯誤文字時,保存原文和接收時間,另外建立本地分類欄;本地分類是測試管理資料,不可冒稱廠商錯誤碼。這能避免版本更新後分類失真。
舊客戶讀新設備、新客戶讀舊設備各跑一次,觀察版本、未知欄、錯誤格式與時間語意。中間閘道也要逐段核對,兩端通過不代表中間不丟欄位。
輸入已送出、設備Accepted、客戶解析失敗,分派解析或相容層;設備未Accepted且傳輸完整,查設備契約。依第一個不符點,不依最後畫面猜。
沒有內部診斷權限時,要求文件、回覆樣本與可重播介面;無法判定部分列限制,不要求用畫面假造根因。
保存上一版本樣本做回歸,涵蓋正常、邊界、未知、晚到。行為改變要更新契約與矩陣,不能把差異刪掉。
測試報告把自訂Status名稱、第三方原碼與本地統計分類分欄保存,後續版本才能判斷是設備變更還是分類規則改變。
黑盒驗收報告最後列出未觀察的內部性能、硬體安全與韌體分支,避免通過被誤讀成全面保證。
矩陣與練習
未測內部硬體的部分寫成不可觀察限制。驗收通過只表示外部契約在指定樣本、版本與時間範圍成立。
練習要求同一腳本連續三次,另換一個客戶解析器。若結果差異只在解析層,問題屬相容性;若原始回覆就不同,才回到設備或環境調查。
矩陣列輸入、輸出、延遲、錯誤、證據與相容組合。通過是必要欄可觀察、結果可關聯、未知不冒充成功,未測內部行為明確標註。
練習以R17晚到寫Accepted、Timeout、LateResult和關聯鍵;同ID換參數重送要拒絕或協商。契約沒說就列阻塞,不自行放行。
加入未知欄與缺Error回覆,判斷是不相容、部分接受還是拒絕。保留原始訊息供供應商重現。
未參與設計者只看契約和樣本執行;若必須問內部程式,表示驗收依賴不可觀察實作,需要修訂契約。
練習假設R17在零毫秒送出、二十毫秒收到接受、一百五十毫秒到期、二百毫秒收到可關聯結果。應保留逾時事件與晚到結果兩筆證據;是否更新最終工作狀態依契約,不能抹掉曾超過期限的事實。
問:拿不到原始碼還能驗收嗎?答:可驗證外部契約與觀測結果,內部不可見部分須明列限制。
問:設備接受請求就代表工作完成嗎?答:不代表,接受、完成與外部實體效果需要不同證據。
問:晚到結果能直接套給最新請求嗎?答:先核對關聯與世代;無法確認時保留未知,不用到達先後猜測。
問:未知錯誤能歸成通用故障嗎?答:可以作本地分類,但保留廠商原碼與文字,不能吞掉或轉成成功。
參考:NIST SP 800-82 Rev.3:OT測試與運作風險背景;本文案例及狀態為自訂驗收設計。