建立輸出鏈
現場寫『輸入正確、畫面正常』不能定位錯誤。先拆成輸入、轉換、狀態、輸出與觀測點,為每段保存原始值、單位、時間、品質與回覆序號,並指定共同案例鍵。
若輸入同時到達,先保存接收順序與批次界線,再判各欄輸出;不能把最後一筆輸入當作整個批次的共同來源。
輸入映射的數值例要保持單位契約:Raw1500乘0.01才是15.00,若映射版本改成0.1,輸出150.0雖然格式正確仍應判語意錯。問題單要列原始值、倍率版本與最後輸出。
本例輸入PressureRaw=1500、Mode=Auto、StartRequest=假,處理後輸出PressureDisplay=15.00、ModeLabel=Auto、StartAck=未請求。每個輸出都標來源欄位、倍率與品質,不靠畫面反推。
另列Raw=0下界、Raw=65535超範圍與Mode缺值。缺值不可默認Auto;超範圍的結果應依契約拒絕、Unknown或標記,不把固定顯示當成通過。
觀測點放在輸入接收、轉換完成、狀態決定、畫面更新與回覆完成。觀測點要足以縮小差異,但不以大量截圖取代結構化日誌。
本文適用於PLC、HMI與採集服務的通用驗收設計。示例名稱與倍率均為自訂,假設Raw有效範圍零至兩千、單位為bar、倍率百分之一,不代表任何類比模組的原始範圍。接入真設備前須另核對模組型號、量程、接線與安全條件。
固定腳本
輸出品質若是Unknown,數值仍可顯示但不可進入自動通過計數;驗收表把值、品質與可用性分列。
同一輸入可能有多個輸出,不能用一個成功欄代表全部。StartRequest被接受不代表設備動作完成,ModeLabel正確也不代表Pressure品質Good;每一輸出各有終態。
若測試介面可提供來源序號,就將輸出與原始輸入關聯;若做不到,改用隔離的單筆輸入及明確觀測窗口。序號跳號可能來自其他事件或取樣遺漏,應查序號定義與日誌,不能只憑跳號斷定處理錯誤。
隔離腳本先按預定規則初始化測試快取,寫案例ID、版本與輸入快照,再執行。案例A送1500、Auto、假,預期三個輸出固定;預期值保存於腳本,不讓操作者臨場改寫。
案例B只把StartRequest改真,壓力與模式不變。若壓力也變,查案例清理、讀取窗口或共享狀態;單一變更讓差異具有解釋力,不能同時換單位和重啟。
案例C送未知模式,預期ModeLabel=Unknown、StartAck拒絕或不適用,PressureDisplay仍依契約處理。這可辨識單欄錯誤是否污染無關輸出。
每次保存輸入、腳本、開始完成時間、輸出與差異。若一回覆含多項資料,記項目索引與順序;只留最後一筆會掩蓋中途失敗。
啟動案例只送到隔離替身,並預先設定允許啟動的狀態。若要現場測試,必須依專案程序確認輸出與互鎖,不可照抄本文布林值直接啟動機器。觀測映射可以先採唯讀方式完成,控制效果另列驗收項目。
現場對照
單位變更時核對數值換算與標籤是否同步,例如一bar等於一百kPa。只改單位文字而保留數字並不等價;測試應保存同一物理量在兩種表示下的預期結果。
現場觀察時可先用唯讀來源和模擬輸出比對,再接正式介面;每一段都保存接收與完成時間。若觀察窗口漏掉短暫狀態,報告應寫取樣限制,不把未看見當成未發生。
現場先確認輸入來源、量程與單位。若PressureRaw來自類比模組,還要記通道狀態與更新時間;畫面15.00不能證明原始值一定1500,也不能證明品質良好。
映射表逐項填實際、預期、差異與證據。按鈕顯示、服務收到與控制器接受是不同時間點,畫面變色不代表設備動作完成。
現場只某次失敗時,先保存現場證據,在受控條件重播相同腳本,比對版本、來源品質、佇列與時鐘。一次只改一項,否則恢復後仍無法知道哪個因素造成差異。
驗收要寫允許延遲,例如輸入確認後兩秒內更新;沒有可靠週期時記觀測範圍與限制,不硬填精確毫秒數。
定位與責任
案例完成後清掉測試快取,確認下一案例不會沿用上一筆輸入。若清理沒有證據,該案例仍可能被污染。
失敗重播須固定快取、腳本、來源版本和時鐘條件。若重播得到不同輸出,先標非確定並比較前置狀態,不要直接挑一個結果當標準答案。
責任分派需引用哪一個觀測點不符,例如來源1500、轉換15.00、畫面15.0其實只是格式差異,不能直接列數值錯;若畫面顯示1500,才有足夠證據指向倍率或欄位。
輸入正確、轉換值錯,查映射或單位;中間值正確、畫面錯,查格式刷新;畫面正確、回覆錯,查命令接受與下游狀態。責任依第一個不符觀測點分派。
一點失敗不一定代表所有點失敗;通道斷線也不能只盯單一欄位。映射表標示共享依賴與獨立依賴,才能判定影響範圍。
問題單附案例、原始輸入、觀測時間線、輸出差異、版本與重播。只有截圖就註明無法定位的層級,不用主觀推論補洞。
修正後重跑原失敗、正常與邊界各一例。若第二人結果不同,先查環境與資料版本,再判定是否為真正缺陷。
問題單引用輸入序號、觀測點與版本,讓負責人可以重播,而不必依賴作者口述。
驗收矩陣完成後,第二人應能從輸入列追到輸出列,再從輸出差異回到第一個觀測點。追不到的欄位列為契約缺口,不用泛用『介面正常』帶過。
矩陣與練習
練習把Mode由Auto改Manual但保持StartRequest真,明訂預期是拒絕、待人工確認或接受。沒有這個契約時,測試不能用任何一種結果自動判通過。
矩陣列A正常、B單欄變更、C無效模式、D品質不良,欄位填輸入、轉換、狀態、畫面、回覆與證據。不適用填NotApplicable並說明,空白不等於未測。
通過條件是輸入有來源、輸出值和品質符合契約、異常不污染無關欄位、時間線可排序、失敗指出第一個不符點。現場不可控時標Blocked並列補測條件。
練習把1500改1501,檢查最小解析度;再讓輸入時間倒退,確認系統依契約拒絕或標未知,不默默改成現在。
由未撰寫者只依腳本重播。若需要口頭步驟才可判定,表示案例依賴未記錄狀態,需補齊前置條件。
數值練習答案:一千五百零一乘百分之一得到十五點零一bar,若畫面只顯示一位小數,可能仍看到十五點零,不能因此認定來源沒更新。應同時核對原始值與未捨入轉換值,再按顯示精度契約判定。
問:十五點零與十五點零零一定是不同結果嗎?答:數值相同,但若契約要求固定兩位小數,顯示格式仍須單獨驗收。
問:按鈕變色就代表啟動完成嗎?答:不代表,要分清請求、接受與完成,各自使用相應觀測點。
問:原始值超範圍能直接截成上限嗎?答:依事先契約處理,截限、拒絕與標不良是不同結果,不能臨場選一種。
問:映射錯誤應先查哪裡?答:先固定來源值、型別、倍率及版本,再沿轉換與畫面逐段比較。
參考:NIST SP 800-82 Rev.3:OT測試與運作風險背景;本文案例及狀態為自訂驗收設計。