Checklist 在 Web 測試中的重要性
Checklist(檢查清單)從名字字面意思即可理解,是用於檢查的一系列條目。之所以需要 Checklist,是因為人們的記憶會有疏忽,可能遺漏一些需要注意的事項,還因為人們的經驗和水平有限,能夠思考到的程度有差異,藉助 Checklist 可以協助我們做必要的檢查。舉例,體檢的時候,在體檢中心登記之後會給每個人列印一個清單,就是當天需要檢查的項目,逐項檢查並打勾,就可以避免遺漏;再比如,當我們計劃一次旅遊時,我們會列舉我們旅途中需要用到所有物品的清單,以及旅行前需要完成的各項準備工作。通常,出行前,我們會按照清單逐項檢查,比如辦簽證、訂機票、訂酒店等,出行前,我們會按照清單逐項打包需要帶的東西,比如藥品、工具、檔案資料、護照簽證、機票等等。Checklist
在類似的工作中具有非常重要的價值。
為什麼 Checklist 可以應用在軟體測試中呢?第一,Checklist 可以幫測試人員節省時間,因為很多有效方法並不需要每個測試人員重新發現,前人已經有了充分的總結,並做了大量的有效性驗證;第二,Checklist 可以協助測試人員避免遺漏,人的記憶是有局限的,難免會有遺漏的地方,通過 Checklist 檢查可以有效防止遺漏。
本系列文章就是基於 Checklist 在 Web 軟體產品中的應用展開,分幾個部分逐漸展開。每篇文章將給出某一個特定方面的 Checklist,並給出具體應用執行個體。
回頁首
資料輸入包含的範疇
本文主要介紹資料輸入過程中應用 Checklist 進行測試的情況,包含表格輸入、資料驗證、資料一致性、日期輸入、數字輸入、數字字元輸入等方面。
輸入類型 |
類型描述 |
表格輸入 |
是指在通過 Web 頁面輸入資料的過程中,有些資料頁麵包含多個輸入框,並呈現為一定的布局排列 |
資料驗證 |
用於驗證輸入的資訊是否有效合法,並對非法的資訊進行恰當的處理或警告提示 |
資料一致性 |
用於保證輸入的資料與儲存的、顯示的資料是否一致 |
日期輸入 |
指輸入日期格式的資料,並對輸入日期進行有效性檢驗 |
數字輸入 |
是指對僅輸入數字,而不能接受字元及其他非法字元的輸入 |
數字字元輸入 |
既可以包含數字,也可以同時包含字元 |
回頁首
表格輸入 Checklist
表 1. 表格輸入 Checklist 總結
序號 |
Checklist |
1.1 |
接收到非法輸入時是否能恰當處理? |
1.2 |
該輸入是可選輸入還是必填輸入? |
1.3 |
輸入超過允許長度的資料 |
1.4 |
頁面裝載或重裝載後預設值 |
1.5 |
組合框中的資料可以正常選擇和更改 |
1.6 |
表格是否顯示了所有的部分?是否十分正確的排列?文字內容是否處於正確的位置? |
1.7 |
捲軸是否在需要時出現? |
1.1 接收到非法輸入時是否能恰當處理?
一個好的軟體,當接收到非法輸入時,能夠恰當的處理,不能給出不可預知的錯誤資訊。請看下面的例子。
圖 1. 電子郵件地址和電話號碼
從圖 1 的例子中可以發現,當我們在該頁面的郵件地址中輸入非法的郵件地址時,產品給出了適當的錯誤提示,並且當使用者將滑鼠至於紅色錯誤警示標誌之上時,可以得到更加詳細的提示視窗,該執行個體對郵件地址的非法輸入給出了恰當的提示。而在該圖的電話號碼輸入框中,我們輸入一串字母作為非法輸入,而並沒有得到任何非法輸入警告提示,這是一個軟體缺陷。
1.2 該輸入是可選輸入還是必填輸入?
Web 產品頁面上,輸入欄位是必填項還是可選項需要進行驗證。有兩個方面的驗證需要完成 : 第一,必填輸入欄位確實是必須填的,當沒有輸入時會有錯誤提示;可選輸入欄位是可以不填的。 第二,確保必填輸入欄位是確實必要的,而可選輸入欄位是非必要的。下面我們提供兩個執行個體。
圖 2. 可選項郵件地址未輸入時報錯
圖 2 的執行個體中,電子郵件地址為可選輸入項,當使用者沒有填寫該項時,產品提示需要輸入郵件地址,而這與可選項的定義不符。這是產品的一個缺陷。
圖 3. 不合理的可選項輸入設定
圖 3 的執行個體中顯示為建立一個群組的視窗頁面,該頁面上唯一的輸入即群組名稱,而該群組名稱作為群組的唯一標識,是應該為必填輸入項的。而這裡,產品並未將該輸入項作為必填項。當使用者不做任何輸入,直接點擊確定時,一個沒有名字的群組將被建立。這是不合理的,是產品的缺陷。
1.3 輸入超過允許長度的資料
正常情況下,每個輸入欄位對輸入資料的長度需要進行約束,給出最小長度和最大長度限制。如果使用者輸入的資料長度超過最大允許長度,程式需要做出恰當處理。例如,測試人員可以建立一個 1,000,000 位元組或者更長的字串,將該字串輸入到輸入地區內,並繼續後續操作,比如儲存或者運行,看程式是否能夠給出錯誤提示或者對字串長度進行自動截斷處理等操作。
1.4 頁面裝載或重裝載後預設值
當網頁產品的頁面裝載完成以後,頁面上顯示的初始預設值,需要滿足一致性和準確性。一致性是指,每次從不同的路徑到達相同頁面後,在做進一步操作之前,頁面預設值需要保持一致。準確性是指,頁面上的預設值需要布局合理,需要使能的按鈕和操作都是可用的,需要被禁止的功能要確保不可用。
圖 4. 初始載入頁面
圖 4 顯示的為開啟一個使用者設定檔頁面,該頁面開啟後在不做任何更新的情況下,儲存和取消按鈕處於使能狀態。而實際上此時點擊兩個按鈕是沒有意義的,因為根本沒有任何資訊的更新,不需要儲存也不需要取消。這是產品的一個缺陷,正確的處理方法是在初始載入頁面上禁止兩個按鈕的工作,使其處于禁止狀態。
1.5 組合框中的資料可以正常選擇和更改
組合框中的資料需要保證所有的列表內容都可以被正常選擇到,同時在已選擇一項時可以更改為另外一項內容。下面的例子中將示範一個組合框的缺陷。
圖 5. 組合框缺陷執行個體
圖 5 的例子中,左側圖顯示的是初始狀態下組合框的列表內容,預設選擇的是 Custom Group, 展開列表後可以看到 Search Results。右側圖顯示的是,當更改列表選擇到 Search Results 後,再次展開挑選清單,列表中不能看到另外的選項 Custom Group,這是產品的一個缺陷。產品需要確保不同時期都可以看到所有的列表選項內容。
1.6 表格是否顯示了所有的部分?是否十分正確的排列?文字內容是否處於正確的位置?
一個表格需要多個部分,首先需要確保所有的部分都存在,並且他們都正確的排列在頁面上,還需要保證文字的內容位置是合理的。
圖 6. 表格內容排列未對齊的例子
6 所示,在圖中所示的表格中,不同組件的排列不齊,左邊屬性名稱和右邊的屬性值輸入欄位應該是水平對齊的。這裡是產品的一個缺陷。
1.7 捲軸是否在需要時出現?
捲軸的作用是為了保證當頁面待顯示內容超過顯示地區尺寸時,可以通過拖動捲軸來看到顯示地區之外的內容。而軟體產品有時未能對該情況進行合理的處理。是我們測試中遇到的一個網頁產品缺陷。
圖 7. 捲軸缺失
7 所示,注意紅色圈內位置有一個未顯示完全的按鈕,其實下方還有其他更多內容,該部分內容已經超出顯示地區的範圍,應該在右側有一個垂直捲軸使使用者能看到下方的內容。這裡垂直方向捲軸的缺失為產品的缺陷。
回頁首
資料驗證 Checklist
序號 |
Checklist |
2.1 |
任何時候當輸入非法資料時,系統都不能表現糟糕 |
2.2 |
如果使用者在產品使用過程中刪除 cookie 會有什麼後果? |
2.3 |
如果使用者在使用產品後刪除 cookie 會有什麼後果? |
2.1 任何時候當輸入非法資料時,系統都不能表現糟糕
儘管軟體產品設計的目的不是僅為了接收非法資料輸入,但是產品需要確保當得到非法資料時依然不會表現的很糟糕,而依然應該做出恰當的處理。非法資料的類型分為很多種,包括資料長度、資料的大小、資料中的非法字元、資料輸入的順序等方面。
2.2 如果使用者在產品使用過程中刪除 cookie 會有什麼後果?
Cookie 是產品為了識別使用者身份、儲存使用者配置資訊、進行會話跟蹤等而儲存在本地終端上的資料。產品設計需要保證在使用者使用過程中,如果使用者刪除 cookie,產品依然處理得當,不會有太糟糕的、不可預知的行為出現。
2.3 如果使用者在使用產品後刪除 cookie 會有什麼後果?
如果使用者在使用產品之後刪除 cookie,當使用者再次訪問產品時,需要保證產品依然做出恰當的處理,不會有出乎意料的動作發生。
回頁首
資料一致性 Checklist
表 3. 資料一致性 Checklist 總結
序號 |
Checklist |
3.1 |
檢查輸入最大字元長度時顯示、工作是否正常 |
3.2 |
驗證數字輸入欄位是否接受負值及接受負值是否合理 |
3.3 |
確保資料儲存之後所有的數值在資料庫中都得到完整的儲存 |
3.1 檢查輸入最大字元長度時顯示、工作是否正常
每個輸入欄位都有自己的輸入字元長度限制,當輸入長度達到最大長度時,需確保產品顯示和工作都正常。通常情況下,屬於最大長度字元時,給頁面的顯示難度帶來很大挑戰,因為此時需要在有限的頁面顯示的內容最多。以下執行個體顯示了一個最大長度顯示相關的產品缺陷。
圖 8. 最大長度輸入時顯示缺陷
8 所示的例子中,當名字和姓氏都輸入達到最大長度時,儲存之後顯示框中無法將兩部分內容完整的呈現,並且沒有水平捲軸輔助顯示器。這是軟體產品的一個顯示缺陷。
3.2 驗證數字輸入欄位是否接受負值及接受負值是否合理
數字數與地區有些情形下是不應該接受負值輸入的,此時如果處理不當,當有負值輸入時,將會有不可預知的情況出現。如果允許接受負值,測試對負值的處理是否正確也是測試中重要的一個方面。
3.3 確保資料儲存之後所有的數值在資料庫中都得到完整的儲存
在產品頁面上對資料進行儲存之後,需要確保所有數值都完整的儲存到了資料庫中。從不同途徑訪問到相同的資料都是一致的、同步的。為了驗證這一點,測試人員需要嘗試在儲存之後重新開啟並查看顯示,看是否跟儲存之前的資料完全一致,同時努力從不同的路徑訪問和應用相同的輸入, 驗證是否能得到一致的結果。
回頁首
日期輸入 Checklist
表 4. 日期輸入 Checklist 總結
序號 |
Checklist |
4.1 |
驗證閏年被正確驗證並且不引起計算錯誤 |
4.2 |
網頁著作權資訊中的日期是否已更新? |
4.1 驗證閏年被正確驗證並且不引起計算錯誤
閏年是西曆紀年中比較特殊的年份,因為該年有 366 天。基本的計算方法是:四年一閏,百年不閏,四百年再閏。因為涉及到日期的輸入時,測試人員需要考慮在閏年出現時,產品依然正確的響應。閏年比平年多出來的一天,出現在 2 月的最後一天,即 2 月 29 日。
除了閏年需要考慮外,跨年的一天以及整百年的年份也需要加以考慮,因為這些特殊的年份可能會引起不可預知的錯誤。
4.2 網頁著作權資訊中的日期是否已更新?
網頁的著作權資訊通常位於 About(關於)頁面中,其中記錄了產品的名字、公司著作權、詳細版本資訊、著作權年份等資訊。測試人員需要確保著作權資訊是及時、準確的,跟產品的實際版本是一致的。
回頁首
數字輸入 Checklist
表 5. 數字輸入 Checklist 總結
序號 |
Checklist |
5.1 |
確保最小、最大值正確處理 |
5.2 |
確保數值輸入框的第一個字元位置輸入空格時報錯 |
5.3 |
確保輸入值輸入框的最後一個字元位置輸入空格時報錯 |
5.4 |
確保正號 (+) 和負號 (-) 被正確處理 |
5.5 |
避免除數為 0 |
5.6 |
在所有的運算中加入 0 |
5.1 確保最小、最大值正確處理
對於數字輸入欄位,一般都有自己的最大值和最小值,這兩個極值的處理需要特別驗證。除了驗證最大最小值之外,測試人員最好一起驗證比最小值小的值和比最大值大的值是否能被產品恰當處理。
舉例,在定義一個串連的過程中需要輸入一個連接埠號碼,該連接埠號碼的最小值為 1。而當使用者輸入連接埠號碼為 0 時,可以成功添加該串連。而當使用者去驗證該串連時,提示連接埠號碼 0 是非法的。這是產品的一個缺陷。正確的處理方式是,當使用者視圖添加連接埠號碼為 0 時,就給出錯誤提示資訊,告知使用者該連接埠號碼是非法的。
另外一個需要考察的地方,當輸入超出最大最小值時,產品需要給出清晰明確的警告和提示,告知使用者正確的範圍是什麼。下面的例子給出了一個不恰當的錯誤提示資訊。
圖 9. 數值輸入超出範圍提示錯誤不夠具體
圖 9 的例子中,輸入的數值超出了允許的範圍,但是提示資訊非常模糊,看到該提示訊息,使用者依然不知道該數值的範圍應該是多少。這是產品的缺陷,它需要給出更加的明確的資訊,使使用者一看就能知道數值的有效範圍是多少。
5.2 確保數值輸入框的第一個字元位置輸入空格時報錯
當數值輸入框的第一個字元為空白格時,該輸入已經不再是一個數值,應當做非法輸入處理。產品處理過程中,需要給出錯誤資訊。
5.3 確保輸入值輸入框的最後一個字元位置輸入空格時報錯
當數值輸入框的最後一個字元為空白格時,該輸入已經不再是一個數值,應當做非法輸入處理。產品處理過程中,需要給出錯誤資訊。
5.4 確保正號 (+) 和負號 (-) 被正確處理
每個涉及到數值輸入的地方,都涉及到一個數值符號的問題。因為數值有正負之分,需要保證產品對正負數的處理都準確恰當。對於能夠接受帶正號數值的輸入框,處理結果應該跟不含符號 ( 預設為正數 ) 的數值輸入的結果相同,因為本質上兩個數值是相等的 ( 對輸入數值的再顯示除外,因為單純顯示上,兩者相差一個 + 號 )。
5.5 避免除數為 0
除數為 0 是所有的運算中需要避免的。在軟體產品中,如果涉及到除法運算,需要特別注意避免除數為 0 的情況發生。其中包含各種情況下的除數為 0,包括除數為輸入值 0,除數為某中間計算結果為 0 等。
5.6 在所有的運算中加入 0
因為 0 在所有的運算中具有重要的作用,也是一個非常特殊的數值。因此在測試過程中,在所有涉及到的運算中加入 0 值對測試產品具有很好的效果,能測試到較多的與 0 相關的情況。
回頁首
數字字元輸入區檢查 Checklist
表 6. 數字字元輸入區檢查 Checklist 總結
序號 |
Checklist |
6.1 |
嘗試空資料和非空資料 |
6.2 |
嘗試輸入非法字元和符號 |
6.3 |
嘗試合法字元 |
6.1 嘗試空資料和非空資料
空資料的處理在資料輸入測試中,具有非常重要的作用。對空資料的處理方式可能有多重情況:可能是當作使用者無輸入而採用預設值處理,這時需要驗證空資料處理結果和預設值處理結果是否一致;可能把空資料當作非法資料處理,這時候需要驗證出現的錯誤提示是否清楚有效;有時,空資料也作為 0 值處理,這時需要比較空資料的輸出結果跟 0 值的處理結果是否一致。
6.2 嘗試輸入非法字元和符號
在負面測試中,一個很重要的方面就是對非法字元和符號的測試。通常,一個產品有自己的一套命名規範,對產品中使用的符號哪些是允許的、有效,都有明確的定義,也就是合法的輸入。而合法輸入之外的字元和符號,就是非法的。測試人員需要將此類非法字元和符號輸入到產品中,看產品是否恰當的處理。
拿資料集和成員的名字作為例子。它們有自己完整清晰的命名規範。從合法字元的角度來講,資料集和成員的名字中,只能採用 26 個英文字母、數字和三個特殊字元 &、#、@,同時數字不能出現在資料集名字分段的首個字元或成員名稱的首字元。下面一個例子描述的就是關於此方面的一個產品缺陷。
圖 10. 資料集名字和成員名字中的非法字元輸入
圖 10 中,當使用者在資料集名字和成員名字中輸入非法字元 $ 和 % 時,產品頁面並沒有提供警告資訊,這是產品的一個缺陷,而該缺陷在後期的資料處理階段將會暴露出來,因為包含非法字元的名字是無法被主機接受和處理的。
6.3 嘗試合法字元
通常來講,合法字元的測試是功能測試中最基本的內容。但是,合法字元的測試也包含眾多方面。最基本的是簡單輸入,就是單個合法字元或者字串的輸入。其次,將不同的簡單輸入組合在一起,可以組成複雜輸入。此外,還可以對最大允許字元長度進行測試,甚至多個輸入欄位均取最大允許長度進行測試。
回頁首
總結
資料輸入是 Web 產品測試中非常重要的一部分,它就好似產品的血液,流淌在產品的每一部分。而資料輸入包含很多不同的方面,包括表格輸入、日期數字和字元輸入,還需要涉及到使用者的驗證和一致性檢查。要想做好所有這些類型的測試和檢查,單憑測試人員的經驗和記憶是很難給出全面測試的。
本文介紹了利用 Checklist 的思想對各資料類型資料點進行最高效的攻擊和測試,能非常高效的發現產品的缺陷。Checklist 很好的利用了前人的經驗應用到現在的項目中,極大的提高了工作效率,同時可以克服單個測試人員的一些缺點,比如思維的局限性、經驗的缺失、思維的疏忽以及記憶的局限性。總之,Checklist 可以最大化測試人員的工作效率,在有限的時間內發現最多的產品缺陷,從而提高產品的品質。