不管是專業測試人員還是軟件行業其他角色,幾乎很少有人能分清楚各種軟件測試類型,比如最近看到有人說:
“功能測試等同于手動測試”
“功能測試也叫黑盒測試或者數據驅動測試”
……
的確,測試類型的概念沒有標準化的定義,而且在不同的語境下還會有不同的含義,因此,大家都混淆各種概念也是很正常的。但是,盡量搞清楚這些類型,對于我們更好地理解和實踐軟件測試還是很有幫助的。
于是,通過我對ChatGPT進行提問,對它回答不清晰或者不準確的內容通過進一步提問澄清,最終我和ChatGPT pair 整理了這份軟件測試類型清單。
01 按照測試驗證的內容分類
根據測試驗證的內容是系統的功能需求,還是非功能需求,可以分為功能測試和非功能測試,而非功能測試還可以細分為不同的測試類型。
1.1 按測試內容分類的測試類型
1. 功能測試:
功能測試主要驗證軟件系統的功能是否符合用戶需求和規格說明書的要求。
2. 性能測試:
性能測試主要用于測試軟件系統的性能,包括響應時間、吞吐量、負載能力等方面。通過這種測試類型,可以找出系統的性能瓶頸,以及在不同負載條件下的表現。
3. 可靠性測試:
可靠性測試主要用于測試軟件系統的穩定性和可靠性,通常會通過模擬各種異常情況來測試系統的魯棒性,以及對異常情況的處理能力。
4. 兼容性測試:
兼容性測試主要用于測試軟件系統在不同硬件和軟件環境下的兼容性,通常會測試系統在不同操作系統、瀏覽器、設備和網絡環境下的表現,以確保系統能夠在各種環境下正常工作。
5. 安全測試:
安全測試通常會測試系統的漏洞、安全性能、訪問控制等方面,以確保系統能夠抵御各種安全攻擊和威脅。
6. 可用性測試:
可用性測試主要用于測試軟件系統的易用性和用戶體驗。通常會測試系統的界面、操作流程、反應速度等方面,以確保系統能夠提供用戶友好的使用體驗,并滿足用戶的需求。
7. 容量測試:
容量測試主要用于測試系統在高負載情況下的容量和擴展性能,可以確定系統能夠承受的最大負載,并確定系統需要進行哪些優化和調整,以達到滿足業務需求的性能要求。
8. 可維護性測試:
可維護性測試主要用于測試軟件系統的可維護性和可擴展性,可以確定系統的易維護性,以及系統在未來的擴展和修改方面的可行性和成本。
9. 可移植性測試:
可移植性測試主要用于測試軟件系統在不同平臺和環境下的可移植性和兼容性,可以確定系統能夠在不同的操作系統、硬件平臺和開發工具中正確地運行和展現。
10. 國際化測試:
國際化測試主要用于測試軟件系統在不同語言和文化環境下的本地化和國際化能力,可以確定系統是否能夠正確地處理不同的語言和字符集,以及在不同地區和文化背景下的正確表現。
11. 本地化測試:
本地化測試主要測試軟件在特定的語言、文化和地區設置下的功能和表現,以確保軟件在該特定地區的用戶能夠正常使用,并且能夠滿足該地區的語言、文化和習慣等方面的需求。本地化測試通常需要對軟件進行翻譯、本地化調整、格式調整等處理。
12. 易用性測試:
易用性測試主要用于測試軟件系統的易用性和用戶體驗,可以確定系統的用戶友好性,以及系統是否能夠在不同的用戶群體中滿足用戶的需求和期望。
1.2 易混淆測試類型
1. 可用性測試與易用性測試:
可用性測試和易用性測試是相關但不同的測試類型。雖然它們都關注軟件系統的用戶體驗,但它們的重點和方法不同。
可用性測試主要關注系統在各種情況下是否可用。這包括測試系統的可靠性、可訪問性、易學性、效率和容錯性等方面。可用性測試通常通過場景測試、用戶測試和技術測試等方法來評估系統的可用性。
而易用性測試主要關注系統的用戶友好性和易學性,以及用戶的滿意度和使用體驗。易用性測試通常通過用戶研究、人機交互測試和用戶調查等方法來評估系統的易用性。
2. 可移植性測試與兼容性測試:
可移植性測試是測試軟件在不同平臺和環境下的可移植性和可用性,主要關注的是軟件的可移植性,即能否在不同平臺和環境下正常運行和使用。而兼容性測試是測試軟件在不同硬件和軟件環境下的兼容性,主要關注的是軟件的兼容性,即能否在不同的操作系統、瀏覽器、設備和網絡環境下正常工作。
可以將兩者視為相互補充的測試類型,因為軟件的可移植性和兼容性都是非常重要的質量屬性。雖然它們有一些相似之處,但是在測試的具體實現上,可移植性測試通常更注重跨平臺的測試,而兼容性測試則更注重跨環境的測試。
02 按測試粒度分類
2.1 按測試粒度分類的測試類型
單元測試: 測試軟件的最小單元——代碼中的單個函數或方法,以確保其行為符合預期,通常在開發階段由開發人員自行編寫和運行。
集成測試: 測試多個模塊組合成的集成軟件系統,以確保模塊之間的接口和交互符合預期。集成測試可以分為頂部向下和底部向上兩種方式。
系統測試: 測試整個軟件系統,包括所有集成的模塊和組件,以確保軟件的功能、性能、可靠性、兼容性、安全性等方面符合用戶需求和規格說明書的要求。系統測試通常由專門的測試人員進行。
2.2 ChatGPT的原分類
ChatGPT是將測試類型按照不同的測試階段分為:單元測試、集成測試、系統測試和驗收測試,但現在測試的階段已經不是很明顯,各種測試可能并行,我不太喜歡按階段來分,于是啟發ChatGPT改成按照測試粒度分為單元測試、集成測試和系統測試。
而驗收測試則跟冒煙測試和回歸測試放到了一個維度,根據測試目的不同來劃分。
2.3 易混淆測試類型
1. 系統測試與系統級集成測試:
系統測試主要用于測試整個軟件系統是否符合需求和規格說明書,測試人員會對整個軟件系統進行測試,包括系統的功能、性能、可靠性、兼容性和安全性等方面的測試,以驗證軟件系統是否符合需求和規格說明書。
而系統級集成測試是集成測試的一種,它主要用于測試不同子系統之間的集成和協作能力,以及集成后系統的功能和性能等方面是否符合需求。測試人員會針對整個系統的集成進行測試,主要是驗證不同子系統之間的接口和交互是否正確,并且系統能夠按照預期的方式運行。
因此,系統測試和系統級集成測試都是針對整個軟件系統進行測試的,但它們的測試重點和測試目的是不同的。系統測試主要關注整個軟件系統是否符合需求和規格說明書,而系統級集成測試主要關注不同子系統之間的集成和協作能力是否符合需求。
2. 系統測試與端到端測試:
系統測試和端到端測試都是按照測試粒度的不同維度來分類的,但是涵蓋的范圍是有些不同的。
系統測試通常是從整體的角度來測試系統的可靠性、穩定性、性能等方面的質量屬性,常常會涉及多個模塊和組件的集成測試,例如在測試一個大型系統時,系統測試可能會包含多個模塊的集成測試,以及整個系統的端到端測試。
而端到端測試則更加關注整個系統在用戶場景下的完整性,即從用戶使用的角度出發,測試系統是否能夠正確地完成預期的業務流程和交互功能,涵蓋的測試范圍通常會比系統測試更廣泛,包括前端、后端、數據庫、接口等多個方面。端到端測試通常也被稱為業務流程測試或場景測試。
因此,可以認為端到端測試是系統測試中的一個子集,它更加注重系統在用戶場景下的完整性和正確性。
03 按照對系統內部的了解程度分類
ChatGPT給的分類維度是測試方法,個人覺得不是特別合適,進一步澄清為:是按照測試人員在測試過程中了解系統的內部工作原理和結構的程度來劃分的。
黑盒測試: 測試人員不了解系統內部的實現細節,只關注系統的輸入和輸出,根據系統規格說明或者其他文檔編寫測試用例,驗證系統是否符合需求和規格。這種測試方法模擬了系統用戶的行為,通常關注的是系統的功能性和非功能性需求。
白盒測試: 測試人員了解系統的內部工作原理和結構,根據系統設計和代碼邏輯編寫測試用例,驗證系統的正確性和可靠性。這種測試方法側重于測試代碼實現的正確性和系統內部結構的合理性。
灰盒測試: 測試人員了解部分系統的內部工作原理和結構,但是不完全了解系統的全部實現細節。這種測試方法介于黑盒測試和白盒測試之間,既關注系統的功能和需求,也關注代碼實現的正確性和內部結構的合理性。測試人員通常會結合系統規格說明和代碼實現來編寫測試用例。
注:這里的測試人員應該確切地說是開展測試的人員。
04 按照測試目的分類
冒煙測試: 也稱為構建驗證測試,用于驗證軟件系統的主要功能是否正常工作。通常在每次代碼構建完成后進行,以盡早發現潛在的問題,避免在后續測試中浪費時間和資源。
回歸測試: 用于驗證新的軟件功能或修復缺陷后,之前的功能是否受到影響。通常在每次代碼變更后進行,以確保之前的功能沒有被破壞或產生副作用。
驗收測試: 也稱為用戶驗收測試,是在軟件交付給用戶之前進行的最后一輪測試,以確保軟件系統符合用戶需求和預期的質量標準。
05 按照測試對象分類
前端測試: 主要測試網站或應用程序的前端界面,包括頁面布局、交互、響應速度、可訪問性、可用性等方面。
后端測試: 主要測試應用程序的后端功能和邏輯,包括數據處理、算法、業務邏輯等方面。
數據庫測試: 主要測試數據庫的性能、可靠性、安全性等方面,包括對數據表結構、數據完整性、數據類型等方面的測試。
接口測試: 主要測試應用程序與其他系統或服務之間的接口,包括對輸入參數、輸出結果、數據格式、傳輸協議等方面的測試。
06 按照測試手段分類
按照測試手段可以分為手動測試和自動化測試。
07 按照測試執行的方式分類
按照測試執行的方式,也就是是否要基于測試用例(腳本)來進行測試,可以分為腳本化測試和探索式測試。
腳本化測試: ChatGPT認為腳本化測試就是自動化測試,其實腳本化測試是指基于測試用例進行的測試,包括自動化和手動測試。
探索式測試: 不需要事先設計測試用例,它是一種軟件測試風格,強調獨立測試人員的個人自由和職責,為了持續優化其工作的價值,將測試相關學習、測試設計、測試執行和測試結果分析作為相互支持的活動,在整個項目過程中并行地執行。
08 寫在最后
雖然我進行了少量修改和調整,還是有保留絕大部分原話,希望ChatGPT的車轱轆話沒把大家繞暈。
不同的測試類型可以針對不同的需求和問題,有助于制定更加有效的測試計劃和策略。同時,掌握不同的測試類型可以提高測試能力和測試思維,讓測試工作更加專業和高效。
但是,也沒必要過度去摳各種測試類型的細節,測試策略的制定需要系統性地考慮。全面了解各種測試類型的劃分方式,基于測試象限和測試金字塔的指導,結合項目和系統特點來制定適合的策略。
最后,這是一份不全的測試類型清單,也不一定完全準確,歡迎大家留言補充。