最近招聘面試測試工程師,發現很多測試工程師都是半路出家,對一些基本的測試概念,思路與技術沒有認知。在設計測試用例的時候只是基於直覺與經驗去測試。這就導致測試用例的設計既不全面,也不科學。
一般功能測試指的都是黑盒測試。就是測試工程師基於需求文檔,對開發完的功能進行測試。也就是說,功能測試都是基於需求的黑盒測試。而需求主要歸為兩大類:
- 顯式功能性需求:指的是需求中明確規定且用戶可以感知到的需求,比如“訪客用戶訪問管理員頁面時會跳轉到登錄頁”。
- 非功能性需求:指的是用戶無法直接體驗到的,非具體功能性的需求,但這種非功能性需求在做功能性測試的時候也會涉及到,因為很多非功能性的需求會影響到功能的可用性與用戶體驗,比如性能測試。
下邊我們分別來看一下兩類不同的需求都有哪些測試用例設計方法或思路。
1、顯式功能性需求
對於顯式功能性需求我們最長用到的方案主要有三種:
- 等價類划分法
- 邊界值分析法
- 錯誤推斷法
1.1、 等價類划分法
我們如果想測試一個功能的最傻的辦法就是窮舉。比如說一個密碼驗證功能,我們把所有的可能的密碼都嘗試一遍,自然就可以覆蓋掉到所有的問題與可能。但是這種窮舉的方法明顯是做不到的。因此我們要用到等價類划分法。
等價類划分法就是說我們將所有可能的輸入數據或操作分為多組不同的子集,每個子集中的數據與操作對發現程序中的潛在錯誤都有同等的效應。這樣我們就將一個子集稱為一個等價類。比如輸入各種與用戶名不相符的密碼,是一個等價類;輸入各種不存在的用戶名是另一組等價類。這樣在測試的時候,我們只要在每個等價類中選擇一個典型操作,就可以達到較好的測試覆蓋度。
等價類還會分為有效等價類和無效等價類兩種。有效等價類指的是合理的、有意義的輸入,主要用來驗證功能是否實現了某個功能。無效等價類與有效等價類相反,指的是無意義的,超過軟件規格的,不合理的輸入,主要用來測試功能的健壯性,看是否考慮了如何處理不合理的情況。
1.2、邊界值分析法
在我們在測試合理與不合理的數據的時候,往往最容易出現問題的就是合理與不合理的邊界,這時我們就需要使用邊界值分析法了。邊界值分析法,就是對恰好大於、小於和等於邊界的值進行測試,來驗證程序是否做到了合適的處理。邊界值分析法一般是作為等價類的補充,來加強測試功能實現的程度與健壯性保障的程度,是否符合規格。
1.3 錯誤推測法
在測試的時候就算我們使用了等價類划分法和邊界值分析法,也很可能會遺漏一些需求中沒有清晰提出,技術上比較隱蔽的錯誤。這種錯誤就需要測試人員通過已有的經驗、對功能實現可能的方法的理解或直覺,來推測出軟件中可能存在的各種錯誤與場景,然后編寫測試用例來進行驗證,這就叫做錯誤推測法。比如,登錄超時后,某個需要權限操作的功能在使用的時候,是否跳到了登錄頁,還是直接報錯,甚至說依舊可以操作。這種錯誤是需要測試人員一定的經驗、技術積累與直覺的。
雖然說功能性測試往往是黑盒測試,但是如果測試工程師對於功能的實現有一定的理解——比如說是否用了緩存、是否使用了消息隊列、是否某個地方會消耗極大的性能等等——將會更容易的推斷出哪些地方會產生錯誤。
2、非功能性需求
在測試工程師測試完顯示功能需求之后,還要考慮到系統的非功能性需求。這種需求可能在文檔中有明確提到,也可能並沒有明確的提出。但是我們的測試工程師在測試的時候卻必須要關注到。
2.1 兼容性測試
兼容性指的是開發的軟件是否在各種平台都可以使用。比如我們開發一個網站,我們的用戶可能會用到各種不同的瀏覽器訪問我們的網站。這樣我們在測試的時候,就不能只考慮到某一種瀏覽器。我們需要考慮到多種瀏覽器的兼容性。
兼容性測試可能會涉及到:
- 不同廠商的瀏覽器及相同廠商不同版本的瀏覽器。
- 不同的設備終端及操作系統
- 不同的屏幕分辨率
- 不同的用戶軟件環境(比如是否禁用了cookie、是否可以連接外網等)
2.2 安全性測試
我們的測試人員還需要關注到開發軟件的安全性。這涉及到:
- 用戶隱私信息是否加密
- 需要權限的資源是否有沒有權限也可以被拿到的風險
- 會不會受到跨站腳本的攻擊
- 會不會受到sql注入攻擊
等等
2.3 壓力測試
測試人員也需要考慮的軟件是否能夠承載其需求所需的壓力,例如:
- 軟件是否能在合理的時間內響應用戶行為
- 軟件是否可能承載足夠的請求
- 軟件在處理大數據量時會不會產生資源鎖死
等等