不穩定不是單次印象
同一案例有時通過、有時失敗,先稱為觀察到的變異,不要立刻叫它環境問題。固定版本、輸入、初始化、時間窗與執行器後,才有資格比較重跑;每次都要保存結果與失敗訊息。
先區分產品、測試器、依賴服務與環境四個可能來源。若輸入其實不同、資料未清空或前一次狀態殘留,合併比例無法支持同條件比較。每次執行要有獨立識別與起止時間,並記錄是否為人工介入。
案例第一次失敗顯示逾時,第二次通過;這只說明兩次觀測不同,不能說環境修好了。應檢查網路、CPU、服務日誌、資料庫狀態與設備事件是否在兩次之間改變。
低風險測試可以在隔離環境重跑,若牽涉輸出或寫入,先使用模擬對象與明確回復步驟。重跑的安全條件未具備時,停止補跑比累積不可解釋的樣本更好。
重跑前先決定是否允許清理狀態;清理本身也可能改變觸發條件。若不能安全清理,應把累積狀態列為實驗因素,而非假裝每次都是獨立試驗。
本文適用通用 PLC、HMI 與整合服務的低風險測試,不指定設備型號或測試 API;涉及實體輸出時仍需依專案程序隔離與核准。
重跑設計與記錄
預先寫好重跑規則,例如同一建置、同一資料集、十次執行,失敗即保存完整日誌;不可看到結果後才挑成功次數。每次包含環境快照、負載、隨機種子、外部服務版本與時間同步狀態。
結果表至少有 run_id、狀態、錯誤類別、耗時、環境指標與證據連結。若測試成功後仍重跑,成功也要留紀錄,否則只留下失敗樣本會誤估比例。重跑間的清理動作要固定且可檢查。
例如十次中六次成功、四次逾時,先報告觀察比例 0.6,不把它轉成環境故障機率。若四次失敗都伴隨服務重啟,這是值得驗證的關聯線索,不是已證明的因果。
重跑間若更換版本、網路、資料或操作人,應分組,不要混成一個分母。樣本少時用逐次結果和限制說明,比假裝精確的小數更可靠。
失敗類別要由可觀測訊息定義,例如逾時、連線拒絕、資料不符或測試器崩潰。把所有失敗合併成 flaky 會失去後續排查方向。
若重跑後失敗比例下降,只表示新條件下觀察不同,不能排除環境因素,也不能證明產品因素;下一步是設計能區分假說的對照。
統計如何解讀
用成功率描述這批固定條件的結果,並附樣本數與失敗類別。二項信賴區間需要合理的獨立試驗模型;連續重跑可能共享服務、快取或設備狀態,因此非獨立樣本不得宣稱二項信賴推論。
一次重跑成功不能證明前一次是環境原因,因為產品競態、未初始化狀態與偶發資料都可能造成變化。至少要設計可控制的對照,例如同一時間在隔離環境與受控負載環境各跑一組。
若所有失敗都集中在某一主機,但主機版本、網路與資料庫也同時不同,主機只是線索。把可疑因素逐一固定或交換,才能逐步縮小原因;沒有做到時,結論應寫『待驗證』。
統計摘要要保留原始序列,例如 F,S,S,F,而非只寫 50%。順序可能揭示累積狀態或資源耗盡;平均成功率會掩蓋這些時序訊息。
可以畫出每次 run 的時間順序與資源曲線,尋找失敗是否集中在啟動後、長時間執行後或特定資料。圖表是探索工具,結論仍須回到可驗證證據。
可把主機、資料集、負載與服務版本交叉固定,先做小批次對照,再決定是否增加樣本。沒有獨立樣本時,統計仍限於描述本次序列。
若第一輪全部在服務啟動後立即測試,第二輪卻先暖機十分鐘,兩輪成功率不能只歸因於主機不同。可在同一主機分別測冷啟動與暖機,固定其他條件,先檢查初始化假說;冷熱條件與執行順序都應寫入資料表。
環境假說的排查
先比對失敗與成功兩次的環境快照,再查同一時間窗的系統與設備日誌;來源時間未校準時,只能說事件在記錄中相鄰,不能宣稱延遲或因果。封包、資源與服務健康資料要標記取樣方法。
假設固定服務併發上限後,重跑十次仍有兩次逾時,只能說這個改動沒有消除所有失敗。負載仍可能有影響,還須對照資源與到達率。若換資料後未再失敗,也需要重複且受控的對照,不能據一次變化斷定原因。
正常排查結果是得到可重現觸發條件,例如某資料集在初始化遺漏時必定失敗。失敗結果也可能是證據不足:此時新增觀測或縮小測試範圍,不能把狀態硬改成環境問題。
若重跑涉及真實輸出,設定人工核准與停止條件,避免為了統計而重複動作。報告同時保存樣本規則、刪除的無效執行及原因,讓後續人員知道分母如何形成。
當環境假說未獲支持,下一步可縮小產品輸入、檢查競態或增加事件記錄。此時原因仍未定,不能把缺少支持當成已排除環境;新的測試要能區分競爭假說,而不只是再累積幾次成功。
環境證據不完整時,保留『原因未定』比硬選分類更安全。後續可增加資源、封包或服務事件記錄,但新增觀測也要寫取樣時機與限制。
練習與常見問題
練習情境:案例十次有七次通過,三次逾時;其中兩次發生服務重啟,另一次無完整日誌。請分別標示觀察結果、可支持的假說與不能下的結論。
問:重跑一次成功就能證明環境造成失敗嗎?答:不能,只能知道結果變化;需要受控對照與足夠證據支持原因。
問:十次重跑能直接算二項信賴區間嗎?答:若樣本不獨立、狀態共享或規則事後挑選,就不能直接宣稱二項模型推論。
問:應否刪除沒有日誌的失敗?答:不能靜默刪除;標成證據不完整並說明是否納入特定摘要。
問:成功率下降就代表版本回歸嗎?答:不代表,先核對輸入、環境、負載、測試器與失敗類型,再做版本對照。
報告中的統計數字應可由原始 run 表重算;若摘要與原始序列不一致,先修正資料治理,不要用四捨五入掩蓋分母問題。
練習答案應包含支持、未支持與仍未知三欄;『假說未支持』只表示目前證據不足以支持它,不等於把其他假說排除。
練習中可確定的是十次有七次通過、三次逾時,其中兩次與重啟同時出現。無日誌那一次仍是逾時觀察,原因未知。下一步應量測重啟前後的連線與初始化,不能把三次都歸成環境,也不能把缺日誌那次刪掉換成更好比例。
參考:NIST/SEMATECH e-Handbook:實驗設計、重複與變異解讀。
參考:NIST SP 800-82 Rev. 3:OT 測試與環境風險考量。