功能測試根據(jù)需求進(jìn)行功能上的測試,而非功能測試則針對更廣泛的質(zhì)量問題進(jìn)行測試。在本文中,Dayana Stockdale將幫助讀者弄清這兩種測試的差異,并給出一些舉例和策略。
功能測試與非功能測試的主要區(qū)別
在理解功能測試和非功能測試的區(qū)別之前,先需要知道功能性和非功能性需求之間的區(qū)別:
功能要求:描述軟件系統(tǒng)的行為或執(zhí)行。
非功能性要求:描述軟件系統(tǒng)的性能或可用性。
功能需求將指定某一功能必須執(zhí)行某個(gè)操作,而非功能需求則是可能會(huì)指定某一功能執(zhí)行該操作。功能要求是WHAT;而非功能性要求是HOW。
因此,功能需求測試就是驗(yàn)證軟件是否正在執(zhí)行操作,而非功能測試則有助于驗(yàn)證客戶的期望是否得到滿足。
功能測試與非功能測試實(shí)例
為了使讀者能更加清晰的了解兩者之間的差異,Dayana將詳細(xì)介紹一些并行的實(shí)例:
功能測試策略
功能測試策略多種多樣,手動(dòng)和自動(dòng)測試混合使用是確保功能測試覆蓋率的最佳方法。
最常見的功能測試策略是黑盒測試方法,測試者不需要審查內(nèi)部源代碼,而是通過測試各種輸入組合來驗(yàn)證功能。
以下是一些常用的功能測試技術(shù):
1. 安裝測試 — 用于測試桌面或移動(dòng)應(yīng)用程序是否正確安裝。
2. 邊界值分析 — 數(shù)值輸入邊界測試。
3. 等價(jià)劃分 — 分組測試,以減少類似功能測試的重疊。
4. 錯(cuò)誤猜測 — 評估功能問題最有可能被發(fā)現(xiàn),并比其他領(lǐng)域更廣泛地進(jìn)行測試。
5. 單元測試 — 在軟件的最小級別上執(zhí)行測試。不是將系統(tǒng)作為一個(gè)整體運(yùn)行,而是在單元上測試。
6. API測試 — 檢查內(nèi)部和外部API是否正常運(yùn)行,包括數(shù)據(jù)傳輸和授權(quán)。
7. 回歸測試 — 用于驗(yàn)證新軟件更改沒有對現(xiàn)有功能(最常見的自動(dòng)化技術(shù))產(chǎn)生不利影響的測試。
所有的功能測試都有一個(gè)特定的輸出。所有的功能測試都可以用非常明確的通過或者失敗標(biāo)準(zhǔn)來編寫。
非功能性測試策略
非功能性測試有時(shí)可能會(huì)比功能性測試要麻煩很多,因?yàn)槟跍y試客戶對整體質(zhì)量體驗(yàn)的期望,而不是指定輸入數(shù)據(jù)輸出確定的結(jié)果。
以下是主要的非功能性測試技術(shù):
1. 負(fù)載測試 — 在模擬環(huán)境中執(zhí)行的測試,以測試系統(tǒng)在預(yù)期條件(不同數(shù)量的用戶)期間的行為。
2. 壓力測試 — 在資源不足時(shí)測試性能,例如服務(wù)器問題或設(shè)備上硬盤空間不足。
3. 擴(kuò)展性測試 — 檢查系統(tǒng)的規(guī)模,以便隨著使用率的增加和性能受到何種程度的影響而進(jìn)行擴(kuò)展。
4. 容量測試 — 用大量的數(shù)據(jù)測試性能,不一定是數(shù)量龐大的用戶,但可以是一個(gè)用戶執(zhí)行高容量的任務(wù),例如多文件上傳。
5. 安全性測試 — 進(jìn)行測試以發(fā)現(xiàn)系統(tǒng)受到攻擊的脆弱程度,以及數(shù)據(jù)的保護(hù)程度。
6. 災(zāi)難恢復(fù)測試 — 檢查系統(tǒng)在崩潰或重大問題后能在多久時(shí)間內(nèi)的恢復(fù)速度。
7. 一致性測試 — 根據(jù)某一套標(biāo)準(zhǔn)(無論是行業(yè)法規(guī)還是公司的標(biāo)準(zhǔn))來測試軟件系統(tǒng)。
8. 可用性測試 — 測試GUI是否一致,以及整個(gè)應(yīng)用程序是否直觀且易于使用。
雖然一些非功能性測試技術(shù)可以具有通過/失敗的標(biāo)準(zhǔn)(如批量測試),但相比之下,其他測試技術(shù)能夠基于測試人員的意見(如可用性測試)因此更加客觀。
傾聽客戶反饋對于更新非功能性需求至關(guān)重要。雖然在收集意見過程中,可能會(huì)識(shí)別到某些擴(kuò)展性和安全因素,但客戶反饋可以擴(kuò)展這些檢查集合,包括更好地測試應(yīng)用程序在崩潰后應(yīng)該如何恢復(fù),或應(yīng)用程序如何在設(shè)備上占用最小的存儲(chǔ)空間。
客戶反饋有助于進(jìn)行功能測試的風(fēng)險(xiǎn)評估。但對于非功能性測試來說,用戶反饋更有價(jià)值,因?yàn)榉答佊兄谠O(shè)定柵,而功能測試已經(jīng)設(shè)定好了柵。