??通常情況下不論采用什么方法和技術,其測試都是不徹底的,一是不能窮盡測試,二是測試的時間極其有限,沒有足夠的時間完成所需的測試。雖然我們不能保證被測試的程序中不存在遺漏的缺陷,但是,如果軟件完成測試之后,遺漏的嚴重錯誤過多,則表明測試是非常不充分的,測試是失敗的。測試不足意味著讓用戶承擔很大的質量風險。反過來說,如果過度測試,則又會浪費寶貴的測試資源,產品遲遲不能發布,增大企業的成本。因此,在實際的測試計劃中,如何平衡測試的投入和質量的風險是必須考慮的問題,需要考慮測試的范圍取舍、需要適當地承受一些風險----哪些測試項優先級高,需要優先測試;哪些測試項優先級低,在時間不夠的情況下,可以不測。也可以選擇不同的測試方法,達到不同的測試效果,如在特別高效率的測試情況下,測試覆蓋率有所降低,在某些情況下可能就是一種明智的決策。即在測試的取舍上、在測試的投入與質量風險上,需要找到一個最佳平衡點。這就是測試策略發揮作用的地方。
1、測試策略
??為了最大程度地減少這種遺漏的錯誤,同時也為了最大限度地發現存在的錯誤,在測試實施之前要確定有效的測試策略。然后,根據測試策略,選定測試方法、確定測試范圍等,豐富測試計劃,制定詳細的測試方案。依據軟件項目類型、規模及應用背景的不同,我們將選擇不同的測試方案,以最少的軟、硬及人力資源投入而獲得最佳的測試效果,這就是測試策略目標所在。
??軟件測試策略:即在一定的軟件測試標準、測試規范的指導下,依據測試項目的特定環境約束而規定軟件測試的原則、方式、方法的集合,這就是測試策略,其包括如下:
- 實施的測試類型和測試的目標;
- 實施測試的階段及相應的技術;
- 用于評估測試結果的方法和標準;
- 對采取測試策略所帶來的影響或風險的說明等。
2、測試策略制定的三項基本要素
??軟件測試制定有3項基本要素:輸入、輸出和過程。
??(1)輸入:作為制定測試策略的依據,包括限制條件和已具有的資源;
- 所要求的軟、硬件的詳細說明,包括測試環境、測試工具等;
- 人力資源和測試進度的約束,包括測試組成員角色和職責說明;
- 測試方法和衡量測試是否通過的標準;
- 被測軟件組件或系統的功能性和技術性需求文檔,及其變更請求的控制流程。
- 軟件系統所受到的其他限制。
??(2)輸出:制定策略的成功,即最終對所制定 策略的定義或說明。 - 通過/失敗的準則和測試風險評估的結果。
- 已批準和簽署的測試策略文檔。
- 測試策略相對應的測試計劃、測試用例的設計思想和思路。
(3)制定策略的過程。
??測試組分析需求,參與設計的討論,測試策略應該覆蓋整個項目的生命周期,需要各類技術人員參與;各類技術人員相互之間應多交流、討論,以保證制定正確的測試策略。
3、如何制定測試策略
??測試策略描述如何全面的、客觀地和有效地開展測試,對測試的公正性、遵照的標準做一個說明。在制定測試策略過程中,需要考量用戶特點、系統功能之間的關系、資源配置、上個版本的測試質量和已有的測試經驗等各個因素的影響,從而找到問題的解決辦法,包括采取哪些測試方法、采用什么樣的測試工具等。盡可能地考慮到某些細節,借助創造性的思維或頭腦風暴,往往能幫助找到測試的新途徑。
??為了制定正確的測試策略,先要明確其輸入,包括被測的軟件系統的功能性和技術性需求,以及測試目標、測試方法和完成標準等。然后,根據測試目標或測試需求確定測試的內容,評估各項測試內容可能存在的風險并確定測試的優先級,針對不同的測試內容選擇最合適的測試方法、技術和工具,針對不同的測試風險采取不同的對策,最后確定測試策略,包括測試各個階段完成的標準、所采用的方法和對策以及測試用例設計的取舍等。
??測試策略制定步驟:
??在制定策略的過程中,權衡資源約束和風險等因素是很關鍵的,有效的測試策略就是為了降低風險,在有限的資源下完成給定的測試任務,優先級高的測試任務優先完成。如果不采取測試策略,就不能及時完成測試任務。而采取一定的測試策略(如新方法、特別的方法)能及時完成測試任務,或者是舍棄某些非常低或較低優先級的測試任務,從而增加了測試風險。所以需要正確把握測試目標和測試風險之間的平衡,獲得最佳的測試策略。
4、如何更好地制定測試策略
??針對不同的測試階段(單元測試、集成測試、系統測試)、不同的測試對象或測試目標制定相對應的測試策略。例如,單元測試,執行嚴格的代碼復查,以保證在早期就能發現大部分的問題,而對功能性的回歸測試,盡量借助自動化完成,而且要求每天執行冒煙測試或驗證測試,包括在安全性測試、配置測試執行時可進行一些探索性測試。所以在制定測試策略時,可選擇的范圍很大。
-采用不同的測試方式,如加強靜態測試、采用探索式測試就有可能解決進度的問題。
- 采用不同的測試方法,白盒方法準確有效,但黑盒方法能夠直接面對業務,完成端到端的驗證。
- 在選擇不同的測試方式、方法時,需要考慮團隊的能力,甚至需要考慮團隊人員的責任心,如果能力強、責任心強、探索式測試效果會好得多。
- 測試用例的選擇、優化,一般要求測試用例事先定義優先級,這樣有多少時間或人力資源,就做多少測試,按優先級的順序,從高向地來選擇測試。
- 不同的測試層次(單元、集成、系統)其策略是不一樣的
- 新的測試環境是否是虛擬環境、新的測試工具是否易用等都是影響因素。
為了更好地確定軟件測試策略,也可以試著問一些如下的問題,在尋找這些答案的過程中,也就找到了有效的測試策略。 - 如何確定回歸測試的范圍?
- 如何利用可重復性的測試?
- 測試缺乏可預見性,如何收集能衡量測試結果的指標?
- 如何建立穩定的、模擬系統實際運行的測試環境?
- 如何從無窮的輸入數據中選擇合理的、有效的測試數據集?
- 如何加強靜態測試-----規格說明書、設計文檔和程序代碼等的審查?
- 如何處理單元測試和集成測試的關系?
- 如何處理手工測試和自動化測試之間的平衡,使它們的互補性得到發揮,測試的效率和質量達到最佳狀態?
- 如何衡量這份測試策略的有效性?
5、基于測試技術的測試策略
著名的軟件測試專家mysers指出了使用各種測試方法的綜合策略。
- 在任何情況下都要使用邊界值分析方法,因為邊界值分析方法所設計的測試用例能很有效地發現軟件代碼的缺陷。
- 等價類劃分方法是對邊界值分析方法的有效補充。
- 如果軟件某些功能的輸入數據/條件存在多種組合情況,則一開始就可選用因果圖法。
- 錯誤推測法可以幫助追加一些比較特殊、不易直接推理出來的測試用例。
- 對照程序邏輯來審查已有測試用例的邏輯覆蓋成都。如果沒有達到要求的覆蓋率,則應當再增加一些測試用例。
- 盡管用戶更傾向于基于程序規格說明的功能測試,但是白盒測試能發現潛在的邏輯錯誤,而這種錯誤往往是功能測試發現不了的。
6、分階段的測試策略
- 嚴格地執行代碼復查,以保證在早期就發現問題,而不是在代碼發布之后。
- 利用單元測試和集成測試,可以盡早地發現更多的問題,并準備好自動化測試;
- 需要建立一個正規的且自動化的冒煙測試,只有100%通過冒煙測試,才能進入下一個階段。
- 在系統測試中,以每次發布用戶基線為結束標志,用戶基線會增長,同時也會逐漸地要求一些更為精確的性能測試。
- 不能忽略安全性測試、可用性測試、配置測試和數據完整性測試。
- 在功能性、安全性測試、配置測試中可進行一些探索性測試。
- 制定更為詳細的用戶驗收測試計劃,將其與測試腳本和培訓材料一起提供給用戶,以幫助用戶快速提高并完成任務。
7、基于測試方案的綜合測試策略
- 根據軟件產品或服務特性對客戶的使用價值以及特性失效所造成的損失,來確定相應特性的測試優先級。產品特性的優先級越高,其被測試的時間越早,測試的力度也越大。
- 要使用盡可能少的測試用例,發現盡可能多的程序錯誤。一次完整的軟件測試過后,如果程序中遺漏的(較)嚴重錯誤過多,則表明本次測試是不足的或失敗的,這意味著可能讓用戶承擔較大的利益損失風險。反過來說,如果過度測試,則又會浪費軟件企業自身的寶貴資源。所以,需要在以上兩點–風險和效率上進行權衡,找到一個最佳平衡點。
- 測試策略應該盡量的簡單、清晰,例如可以在優先的白板上通過2~3行字和1~2個圖就描述出測試策略來,或者可以通過一個簡短的會議(20分鐘~30分鐘),就能把測試策略解釋清楚。
- 基于缺陷分析的測試策略,通過缺陷分析,可以更好地了解開發人員的習慣,找到容易犯錯的地方,可以更好地設計測試用例,更快地發現缺陷。也可以從缺陷出發,反推回去,找到合適的測試策略。