軟體測試面試過程中常見的問題-論登入功能用例設計
測試用例設計:考察測試人員在用例設計方面考慮是否全面,以及對測試需求的分析能力;
最常被問到的,現在軟體有一個登入模組,有使用者名稱和密碼,以及登入按鈕,請你來設計測試用例;
首先說一下我的經歷:
目前參加了5場面試,沒有收到一個offer, 幾乎每一場面試都會被問到這個問題,第一次我的回答是這樣子的:
(面試官說給我兩分鐘,讓我寫一個登入功能的測試用例,登入介面只有使用者名稱,密碼和登入按鈕,面試官還說,2分鐘夠嗎?我肯定的回答,夠了)
然後我在紙上寫下了我的答案:
我的回答1:
測試步驟:
輸入使用者名稱和密碼,點選登入按鈕;
輸入資料:
使用者名稱和密碼均為空
使用者名稱或者密碼為空
使用者名稱不存在;
密碼錯誤;
使用者名稱或者密碼輸入最大長度;
使用者名稱或者密碼輸入特殊字元;
使用者名稱和密碼輸入正確;
然後我給面試官說我寫好了,他說你這就考慮了功能方面,其他方面都不用考慮嗎?…後來回來想了以下,好像確實考慮的不夠,又去百度了以下,用例設計應該從哪些方面去考慮,我查到的是一般從,使用者介面,功能,安全,效能,相容性方面去考慮;
然後我用在了下一次被問到的這個問題中。
我的回答2:
一般從以下幾個方面考慮:
-
UI介面上:檢視風格是否合理,輸入框以及按鈕設計是否好用;
-
功能上:針對使用者名稱和密碼,以及驗證碼,考慮多種無效輸入和有效輸入的情況下,系統是否能正確處理;
-
安全性方面:①考慮使用者許可權,使用不同的使用者登入進去,檢視能訪問的功能是否符合要求;②頁面超時是否有處理;③使用者A登陸後,在當前標籤退出後,立馬再不同標籤中等錄B使用者,再去操作上一個標籤中使用者A操作的介面,看系統是否做出正確的處理;
-
介面測試方面:如果在介面測試中有涉及登入的,可以在請求中對引數做出預設測試,或者修改引數名稱以及修改引數的值等進行驗證;
-
效能測試方面:如果在效能測試需求中有涉及登陸的話,就按照效能的需求去設計用例;
說完了之後,我說“嗯,用例設計的話大致可以從這幾個方面去考慮”,面試官感覺聽得有點找不著頭腦,莫名的尬笑了一下。我自己心裡想,我說了這麼多,應該考慮得算比較全面了吧…看到這裡你有什麼想法呢?
回到家我仔細回想了一下我的回答,第一,我所描述的給人的感覺不是我在設計測試用例,而是我在告訴別人怎麼寫測試用例,且不說我說的是否正確;
仔細想想,我所說的這些測試型別在測試過程之中確實是需要考慮的,但是針對面試官的問題,針對登入功能設計測試用例,我說了很對沒用的,例如介面測試和效能測試,還要安全性方面的,特別是我在網上看到的,關於安全性方面的(主要是考慮session),使用者退出後在其他介面用不同的使用者登入,再去操作使用者A的資訊,系統是否做出正確處理,首先我說的完全有漏洞,(雖然面試關沒有繼續追問,可能他覺得我已經跑題了),例如使用者A退出登入後,介面怎麼會還顯示使用者A相關的資訊呢,描述應該是這樣的,在一個頁面訪問了使用者A的資訊,再新的假面退出登入,再用B使用者登入,然後去操作使用者A訪問過的資訊,這也是測試過的一種方法,但是顯然,跟現在對登入模組用例設計沒有半毛錢關係了…作為一個有3年測試經驗的我,你、給出這樣的回答,我真是要醉了。
回來後,我針對登入模組的用例設計去百度了以下,得到的結果是這樣的:
此題的考察目的:
1、瞭解需求(測什麼都是從瞭解需求開始);
2、是否有設計Test Case的能力
3、是否熟悉各種測試方法;
4、是否有豐富的Web測試經驗;
5、是否瞭解Web開發;
瞭解需求:
測試需求分析過程,可以從質量要求出發,來展開測試需求分析,如從功能、效能、安全性、相容性等各個質量要求出發,不斷細化其內容,挖掘其對應的測試需求,覆蓋質量要求。也可以從開發需求(如產品功能特性點、敏捷開發的使用者故事)出發,針對每一條開發需求形成已分解的測試項,結合質量要求,這些測試項再擴充套件為測試任務,這些測試任務包括了具體的功能性測試任務和非功能性測試任務。在整理測試需求時,需要分類、細化、合併並按照優先順序進行排序,形成測試需求列表。
1、登入介面應該是彈出視窗式的,還是直接在網頁裡面;
2、賬號長度和密碼的強度(比如需要多少位、大小寫敏感、特殊字元混搭等);
3、介面美觀是否有特殊要求?(即是否要進行UI測試);
4、····
用例設計:
測試需求分析完成後,開始用例設計,主要可以從以下幾個方面考慮:
功能測試(Function Test)
1、輸入正確的賬號和密碼,點選提交按鈕,驗證是否能正確登入。(正常輸入)
2、輸入錯誤的賬號或者密碼, 驗證登入會失敗,並且提示相應的錯誤資訊。(錯誤校驗)
3、登入成功後能否跳轉到正確的頁面(低)
4、賬號和密碼,如果太短或者太長,應該怎麼處理(安全性,密碼太短時是否有提示)
5、賬號和密碼,中有特殊字元(比如空格),和其他非英文的情況(是否做了過濾)
6、記住賬號的功能
7、登入失敗後,不能記錄密碼的功能
8、賬號和密碼前後有空格的處理
9、密碼是否加密顯示(星號圓點等)
10、牽扯到驗證碼的,還要考慮文字是否扭曲過度導致辨認難度大,考慮顏色(色盲使用者),重新整理或換一個按鈕是否好用
11、登入頁面中的註冊、忘記密碼,登出用另一帳號登入等連結是否正確
12、輸入密碼的時候,大寫鍵盤開啟的時候要有提示資訊。
13、什麼都不輸入,點選提交按鈕,看提示資訊。(非空檢查)
就從功能測試這一塊,我用藍色標記的地方,我現在一看,這些我也做過測試,但是為什麼我在面試的時候完全忽略掉了這些基本的功能呢?我想一方面是我在用例設計時,壓根沒有吧這些考慮進去,沒有形成用例,自然沒有印象,就是在測試的時候,會想到就測試一下。
介面測試(UI Test)
1、佈局是否合理,2個Testbox 和一個按鈕是否對齊
2、Testbox和按鈕的長度,高度是否複合要求
3、介面的設計風格是否與UI的設計風格統一
4、介面中的文字簡潔易懂,沒有錯別字。
5、不同的瀏覽器視窗大小,下面,介面和功能是否正常
UI測試我也回答了,考慮介面設計風格是否良好等,但是沒有具體進行描述,按照我的描述,測試的時候是完全無法進行測試的,比如怎樣才算良好,怎樣才算不良好呢?以上藍色標記的地方,我一看,我平時也是這麼測的呀,要是沒對齊,或者有錯別字,我一看就知道這是bug呀,但是我在設計用例的時候,單純的寫了,介面風格良好,便於使用者使用。所以這就是我為什麼不能當著面試官的面有條有理的回答出來。
效能測試(Performance Test)
1、開啟登入頁面,需要幾秒
2 、輸入正確的賬號和密碼後,登入成功跳轉到新頁面,不超過5秒
效能測試,我腦海裡,第一浮現的就是使用者併發測試,並且總想往這上面靠,然而我說的,確實跟這個登入的功能的效能不搭嘎。這些標藍的地方,如果測試時遇到了,我肯定知道有問題,例如開啟登入頁面時,頁面一直載入等,但是我說不出來,也是我在平時寫用例時沒有寫到測試用例裡面,這裡我想到了第二家面試的時候,面試官問我,一般一個測試一個軟體,你設計的用例大概有多少,我說一個功能多點的軟體的話,大概三四百個吧,前面還問了我一個軟體能提多少個bug,我說剛開始測試時候可能兩百多個吧........我確實是根據我曾經寫過的測試用例去描述的,不過bug數,實際上,可能不到100個....經過幾輪測試的可能也不到200個,現在看來一個登陸模組用例設計可能都有幾十條了,顯然我所說的功能多點的三四百條用例,設計出來肯定很多地方沒有具體到用例裡面去,就靠測試人員的細心程度和經驗了......
安全性測試(Security Test)
1、登入成功後生成的Cookie是否有HttpOnly(降低指令碼盜取風險)
2、賬號和密碼是否通過加密的方式,傳送給Web伺服器
3、賬號和密碼的驗證,應該是用伺服器端驗證,而不能單單是在客戶端用javaScript驗證
4、賬號和密碼的輸入框,應該遮蔽SQL注入攻擊
5、賬號和密碼的的輸入框,應該禁止輸入指令碼(防止XSS攻擊)
6、錯誤登入的次數限制(防止暴力破解)
7、考慮是否支援多使用者在同一機器上登入;
8、考慮一使用者在多臺機器上登入
我所說的安全性測試也是測試的方法之一,但是呢,跟這個登入模組就有點連不上去了,第4點和第5點,在某些回答中,我也提到過,但是沒有實際測過,也沒有深入去了解,所以說出來很怕面試官會繼續追問,在安全測試方面我確實沒什麼經驗,自己做過較多的就是許可權的驗證,還有登陸過期這類的,不過個人感覺在面試中,就算安全測試技術層面沒什麼經驗,至少6,7,8應該能說出來,因為在平時用過的軟體,很多都會遇到這樣的問題,也是屬於安全方面的。
可用性測試(Usability Test)
1、是否可以全用鍵盤操作,是否有快捷鍵
2、輸入賬號,密碼後按回車,是否可以登入
3、輸入框是否可以以Tab鍵切換
這個的話不是必要的,但是能說出來更好,因為其實不是所有的軟體都支援回車可以登入,tab可以切換下一個輸入框的,這些如果在設計說明說著軟體需求上沒寫,也是可以作為使用者體驗方面去測試。
相容性測試(Compatibility Test)
1、主流的瀏覽器下能否顯示正常已經功能正常(IE6~11, FireFox, Chrome, Safari 等 )
2、不同的平臺是否能正常工作,比如Windows, Mac
3、移動裝置上是否正常工作,比如iPhone, Android
4、不同的解析度
相容性方面應該是比較容易想到的,但是我確實忽略了,後來面試官問我,還有別的嗎,我說沒有了,面試官說,你們平時用什麼瀏覽器測試...我就立馬補充道,噢,用例設計的話也需要考慮相容性方面,比如不同的瀏覽器上功能是否正常等,不過這個要考慮軟體開發設計所支援的瀏覽器和作業系統以及解析度等。
本地化測試 (Localization Test)
1、不同語言環境下,頁面的顯示是否正確。
軟體輔助性測試 (Accessibility Test)
軟體輔助功能測試是指測試軟體是否向殘疾使用者提供足夠的輔助功能
1、高對比度下能否顯示正常(視力不好的人使用)
最後兩點的話,看軟體設計的需求吧,很多軟體基本沒考慮。
綜合以上面試經驗,很重要的是,能說的有條理,能針對具體功能去設計用例,希望自己在下一次面試中針對這個問題,能給面試官一個較為滿意的回答。