- 軟件測試:實踐者方法
- 孫志安等編著
- 7字
- 2024-09-19 17:31:50
2.3 軟件可測試性
2.3.1 可測試性生命周期過程模型
可測試性(Testability)是指軟件系統或組件或程序片段的屬性能夠被驗證的程度,即一個軟件系統能夠被測試的難易程度或被確認的能力。理論上,對于任何一個軟件,總能找到辦法對其進行測試驗證,但只有那些具有良好可測試性的軟件,才可能得到高效、完備的測試。一個函數如果粒度太大,多功能帶來多入參問題,必然產生多組合驗證等問題,顯著增加測試初始化難度及測試生命周期成本。微服務架構下,如果構建Mock服務的難度和成本過高,會直接造成不可測或測試成本過高等。
基于云原生等技術,軟件系統的規模及復雜性與日俱增,如果被測系統缺乏良好的可測試性,軟件測試將愈發困難,傳統軟件測試方法亦將受到前所未有的挑戰。軟件開發,為測試而設計、為部署而設計、為監控而設計、為擴展而設計、為失效而設計。這是認識和理念的根本轉變。良好的可測試性讓軟件缺陷無處遁形,有利于軟件測試工作有效開展,有利于降低質量風險和測試成本。
軟件可測試性包括需求、架構、設計、代碼、數據等的可測試性。基于設計方法學的軟件設計,基于編碼規則的編碼實現,是保證可測試性的基礎,簡化軟件設計和編碼,是改進可測試性的重要手段。軟件可測試性生命周期過程模型如圖2-9所示。

圖2-9 軟件可測試性生命周期過程模型
可測試性是軟件的通用質量特性之一,與開發同策劃、同設計、同驗證、同改進。需求分析階段,在業務層面對每個用戶故事建立驗收標準,在功能層面基于用戶要求,確定測試性需求;軟件設計階段,從架構設計、接口設計、日志設計等,建立可測試性規范,采用良好的設計模式,遵守高內聚低耦合、面向對象的SOLID等設計原則,為測試提供額外的接口;編碼實現階段,為可測試性設計代碼規范,確保代碼具有良好的可測試性。
例如,避免在構造函數中引入業務邏輯,如實例化和初始化協作對象、調用靜態方法及復雜賦值邏輯等。在一個類中,只傳入所需對象作為參數,避免在傳入對象中進一步挖掘依賴對象。圖2-10所示反例和正例,清晰地說明了軟件的可測試性問題。

圖2-10 一個軟件可測試性的反例和正例