1 概述
隨著軟件行業的迅猛發展,軟件測試也逐漸受到越來越多的軟件公司所重視,然而開發出來的軟件直接就可以拿出來做測試嗎?根據近幾年來的實踐證明,在設計軟件時事先沒有對軟件的可測試性進行周密設計和部署的軟件在測試時總是很難于進行,直到測試無法進行下去為止。被測軟件在編碼時需要考慮給測試和后期的產品維護提供必要的手段和接口支持,即要求軟件具有可測試性?;诳蓽y試性的目標考慮,良好的架構設計,完備的接口,使得軟件測試更加高效和可行,同時產品維護也更加便利。
本文描述的范圍:可測試性定義、可測試性特征、可測試性設計。
讀者對象:系統分析和設計人員、開發人員、測試人員。
參考文獻:
1.《軟件可測試性需求設計》 Vince
3.《軟件工程思想》 林銳
2 軟件可測試性定義
2.1 可測試性定義
軟件的可測試性是指在一定的時間和成本前提下,進行測試設計、測試執行以此來發現軟件的問題,以及發現故障并隔離、定位其故障的能力特性。簡單的說,軟件的可測試性就是一個計算機程序能夠被測試的容易程度。
一般來說可測試性很好的軟件必然是一個強內聚、弱耦合、接口明確、意圖明晰的軟件,而不具可測試性的軟件往往具有過強的耦合和混亂的邏輯。
2.2 可測試性特征
1.可操作性:“運行得越好,被測試的效率越高。”
1)系統的錯誤很少;
2)沒有阻礙測試執行的錯誤;
3)產品在功能階段的演化(允許同時的開發和測試)。
2.可觀察性:“你所看見的就是你所測試的。”
1)每個輸入有唯一的輸出;
2)系統狀態和變量可見,或在運行中可查詢;
3)過去的系統狀態和變量可見,或在運行中可查詢(例如:事務日志);
4)所有影響輸出的因素都可見;
5)容易識別錯誤輸出;
6)通過自測機制自動偵測內部錯誤;
7)自動報告內部錯誤;
8)可獲取源代碼。
3.可控制性:“對軟件的控制越好,測試越能夠被自動執行與優化。”
1)所有可能的輸出都產生于某種輸入組合;
2)通過某種輸入組合,所有的代碼都可能被執行;
3)測試工程師可直接控制軟件和硬件的狀態及變量;
4)輸入和輸出格式保持一致且有結構;
5)能夠便利地對測試進行說明、自動化和再生;
6)接口和模塊易控制;
7)業務流程和場景易控制。
4.可分解性:“通過控制測試范圍,能夠更快地分解問題,執行更靈巧的再測試。”
1)軟件系統由獨立模塊構成;
2)能夠獨立測試各軟件模塊;
3)業務流程和場景易分解。
5.簡單性:“需要測試的內容越少,測試的速度越快。”
1)功能簡單性(例如:特性集是滿足需求所需的最小集合);
2)結構簡單性(例如:將體系結構模塊化以限制錯誤的繁殖);
3)代碼簡單性(例如:采用代碼標準為檢查和維護提供方便)。
6.穩定性:“改變越少,對測試的破壞越小。”
1)軟件的變化是不經常的;
2)軟件的變化是可控制的;
3)軟件的變化不影響已有的測試;
4)軟件失效后能得到良好恢復和隔離。
7.易理解性:“得到的信息越多,進行的測試越靈巧。”
1)設計能夠被很好地理解并遵循行業規范;
2)內部、外部和共享構件之間的依賴性能夠被很好地理解;
3)設計的改變被通知;
4)可隨時獲取技術文檔;
5)技術文檔組織合理;
6)技術文檔明確詳細;
7)技術文檔精確性穩定;
8)相關環境配置說明與操作指導。
3軟件可測試性設計
3.1可測試性設計
軟件的可測試性特征主要表現是設立觀察點、控制點、觀察裝置、驅動裝置、隔離裝置。需要注意的是可測試性設計時必須要保證不能對軟件系統的任何功能有影響,不能產生附加的活動或者附加的測試,采取合適的設計模式對軟件進行設計。
原文轉自:http://www.uml.org.cn/zjjs/201004222.asp