選單

如何挑選測試國家:三個挑選軸與預設集合

挑選測試國家不是隨手勾幾個熟悉的地方,而是先決定這批資料要證明什麼。本文說明三個挑選軸、預設集合的組成、邊界樣本的用途,以及為什麼整份集合必須版本化。

發佈於

  • 測試資料
  • 國家資料

挑選測試國家看起來只是勾幾個選項,實際上決定了整批測試資料能證明什麼、又會漏掉什麼。許多團隊第一次做這件事時,會挑自己熟悉或使用者最多的幾個地方,資料看起來很完整,卻在每次改版時反覆出現同一類沒人預期到的錯誤。要讓這份集合真的有用,得先想清楚它要暴露哪些風險,再回頭決定要收進哪些國家。

為什麼要按國家挑測試資料?

如果只挑一個地方,你測到的其實是「這套流程在這個地方的特殊情況下能不能跑」,而不是「這套流程能不能跨國運作」。真正會讓系統出錯的,往往不是主要市場,而是那些欄位結構與主流不同的地方;它們平常沒有流量,一旦出現就變成客訴。

按國家挑選的另一個理由是:國家這個維度同時綁著好幾種變化。同一個代碼背後,可能連動貨幣、時區、欄位是否適用、輸入字元集、名稱長度與顯示順序。這些變化很少單獨出現,而是整組一起出現,因此用國家當抽樣單位,會比用單一欄位當抽樣單位更接近真實情境。

最後,國家集合是會被引用的。測試計畫、驗收單、回歸清單都會寫上「本輪涵蓋哪幾個地方」,一旦集合本身沒有明確定義,這些文件就只是各說各話;等到有人追問某個問題為什麼沒被測到,也沒有人能回答。

三個挑選軸:可觸達、資料難度、邊界價值

挑選時建議分開看三條軸,不要用同一個標準決定所有國家。三條軸各自回答不同問題:業務上碰不碰得到、資料上好不好處理,以及它能不能把系統推到極限。

軸 這個軸在問什麼 選進來的理由
業務可觸達 付款方式、配送範圍、結算語言、是否涉及特殊結算規則 這些地方的流程真的會被使用
資料難度 字元集、書寫方向、地址行長度、名稱長度 容易暴露截斷與編碼問題
邊界價值 極小、極大、欄位結構與主流不同 專門用來測不適用的情形

三條軸不見得要平均分配。常見做法是讓業務可觸達那一條決定「一定要有」,另外兩條決定「再加哪些」,這樣集合就不會變成願望清單,而是一組有明確目的的樣本。

三條軸的結論也可能互相衝突。某個地方業務上很重要,但欄位結構與主流相同,放進來對測試的邊際幫助就很小;反過來,某個地方業務上碰不到,卻是唯一能把某條分支走完的樣本。衝突時不要靠投票解決,而是回頭看這一輪要驗證的是什麼。

什麼樣的國家是好的邊界樣本

邊界樣本的用途不是獵奇,而是把長度檢查、截斷邏輯與預設值逼到極限。好的邊界樣本通常具備三種特徵之一:名稱特別長、地址行數特別多,或欄位組合與主流不同。

挑選時可以問自己:這幾個樣本放進去之後,有沒有任何一條長度上限會被真正碰到?如果全部樣本都落在很短的一側,「超過上限要怎麼處理」那段邏輯就永遠沒被執行過。同理,如果所有樣本都有完整層級,那麼「缺少某一層時該顯示什麼」也從來沒被測到。

邊界樣本也包含「資料量特別小」的一方。規模極小的地區往往沒有完整的資料體系,正好用來驗證系統在資料稀疏時的行為,例如選單只剩一個選項,或某個欄位整批為空的時候,介面與驗證是否還能正常運作。

挑選邊界樣本時還要注意「極端值不能互相抵消」。如果同一個地方同時具備名稱最長與層級最完整這兩種特徵,它就不適合單獨承擔其中一種角色的驗證工作,因為你無法判斷某次失敗究竟由哪一項造成。建議讓每個極端特徵各有一個明確的代表,必要時用兩個樣本分別承擔。

沒有郵遞區號或沒有省州層級的地方怎麼測?

這是新手最常漏掉的一類。並非每個地方都有完整的層級:有的沒有郵遞區號體系,有的沒有省州這一層。若你的集合裡全是結構完整的地方,那麼「必填」這條斷言會把完全合法的資料判成錯誤,而這種錯誤通常要等到正式環境才被使用者發現。

處理方式不是放寬所有驗證,而是把「這個欄位在這裡是否適用」變成一個明確的判斷,並且讓測試同時涵蓋兩種結果。某個地方的郵遞區號具體長什麼樣,屬於另一個題目的範圍,可以對照跨國郵遞區號格式那一篇,本篇只談要不要把它收進樣本。

建議至少保留一個「欄位不適用」的樣本,並在清單上標明它不適用的欄位。這樣一來,當有人把驗證規則改嚴時,這條樣本會立刻失敗,而不是靜靜地被忽略過去。

這類樣本也應該被標成「不可略過」。實務上常見的做法是在回歸清單裡把它列在最前面,因為它驗證的不是某一條規則是否正確,而是系統有沒有假設錯誤。一旦它被跳過,後面的測試即使全數通過,也無法證明跨國的假設成立。

一套預設集合的組成

一套能長期使用的預設集合,通常由三類組成,各自負責不同的事情:

  • 主場:團隊最熟悉、問題回報最快的地方,用來當基準線。
  • 主要市場:實際上線會遇到的地方,決定這批資料的業務價值。
  • 少量極端值:名稱最長、層級最少、字元集最特殊的地方,用來壓迫系統邊界。

三類缺一不可。只有主場,跨國問題永遠測不出來;只有主要市場,長度與編碼的邊界永遠碰不到;只有極端值,回歸結果會與真實使用情境脫節。

這份集合也應該是可解釋的:每個收進來的地方都要能回答「它為什麼在這裡」,而不是「上次就是這樣」。當有人提議移除某個成員時,能否說出它當初放進來的理由,就是這份清單是否還活著的判斷標準。

給開發者:把國家集合當成版本化資產

國家集合一旦被測試引用,它就變成一項資產,需要跟程式一樣對待。實務上可以做這幾件事:

  • 用名稱與版本標示每一版集合,並記錄這一版新增或移除了哪些成員。
  • 讓測試引用指定版本,而不是引用最新的一份,避免昨天與今天跑出的結果無法比較。
  • 把用途寫在同一份檔案裡,說明每個成員是為了哪一條軸而存在。
  • 變更集合時,同時檢查既有斷言是否還成立,尤其是那些假設欄位一定存在的斷言。
  • 不要把真實個人資料填進集合,樣本該是明顯構造出來的內容。

本文提到的集合組成與樣本分類都是為了說明問題而構造的合成示例,不代表任何真實的地方清單或覆蓋範圍,也不對應任何真實企業、機構或個人;這些內容只供軟體測試與表單演示使用,不能當作真實業務憑證或合規依據。相關的判讀方式可以搭配國家資料覆蓋率清單一起看,而集合多久需要重新檢視,則可參考國家資料新鮮度那一篇。

下一步

先把你手上的國家集合列出來,逐個寫上它屬於哪一類,並且標出哪幾個成員專門用來測欄位不適用的情形,缺口通常會立刻浮現。接著可以到國家與地區目錄比對實際的欄位組合,或先看巴西國家頁體會一下結構與主流不同的地方。

繼續閱讀

各國地址與身分資料格式相關文章