在實際測試中,窮舉測試工作量太大,實踐上行不通,這就注定了一切實際測試都是不徹底的。當然就不能夠保證被測試程序中不存在遺留的錯誤。軟件工程的總目標是充分利用有限的人力和物力資源,高效率、高質量地完成測試。為了降低測試成本,選擇測試用例時應注意遵守“經濟性”的原則。第一,要根據程序的重要性和一旦發生故障將造成的損失來確定它的測試等級;第二,要認真研究測試策略,以便能使用盡可能少的測試用例,發現盡可能多的程序錯誤。掌握好測試量是至關重要的,一位有經驗的軟件開發管理人員在談到軟件測試時曾這樣說過:“不充分的測試是愚蠢的,而過度的測試是一種罪孽”。測試不足意味著讓用戶承擔隱藏錯誤帶來的危險,過度測試則會浪費許多寶貴的資源。
測試是軟件生存期中費用消耗最大的環節。測試費用除了測試的直接消耗外,還包括其它的相關費用。能夠決定需要做多少次測試的主要影響因素如下:
?、?、系統的目的
系統的目的的差別在很大程度上影響所需要進行的測試的數量。那些可能產生嚴重后果的系統必須要進行更多的測試。一臺在 Boeing 757上的系統應該比一個用于公共圖書館中檢索資料的系統需要更多的測試。一個用來控制密封燃氣管道的系統應該比一個與有毒爆炸物品無關的系統有更高的可信度。一個安全關鍵軟件的開發組比一個游戲軟件開發組要有苛刻得多的查找錯誤方面的要求。
?、?、潛在的用戶數量
一個系統的潛在用戶數量也在很大程度上影響了測試必要性的程度。這主要是由于用戶團體在經濟方面的影響。一個在全世界范圍內有幾千個用戶的系統肯定比一個只在辦公室中運行的有兩三個用戶的系統需要更多的測試。如果不能使用的話,前一個系統的經濟影響肯定比后一個系統大。除此而外,在分配處理錯誤的時候,所花的代價的差別也很大。如果在內部系統中發現了一個嚴重的錯誤,在處理錯誤的時候的費用就相對少一些,如果要處理一個遍布全世界的錯誤就需要花費相當大的財力和精力。
?、?、信息的價值
在考慮測試的必要性時,還需要將系統中所包含的信息的價值考慮在內,一個支持許多家大銀行或眾多證券交易所的客戶機 /服務器系統中含有經濟價值非常高的內容。很顯然這一系統需要比一個支持鞋店的系統要進行更多的測試。這兩個系統的用戶都希望得到高質量、無錯誤的系統,但是前一種系統的影響比后一種要大得多。因此我們應該從經濟方面考慮,投入與經濟價值相對應的時間和金錢去進行測試。
?、?、開發機構
一個沒有標準和缺少經驗的開發機構很可能開發出充滿錯誤的系統。在一個建立了標準和有很多經驗的開發機構中開發出來的系統中的錯誤不會很多,因此,對于不同的開發機構來說,所需要的測試的必要性也就截然的不同。
然而,那些需要進行大幅度改善的機構反而不大可能認識到自身的弱點。那些需要更加嚴格的測試過程的機構往往是最不可能進行這一活動的,在許多情況下,機構的管理部門并不能真正地理解開發一個高質量的系統的好處。
?、?、測試的時機
測試量會隨時間的推移發生改變。在一個竟爭很激烈的市場里,爭取時間可能是制勝的關鍵,開始可能不會在測試上花多少時間,但幾年后如果市場分配格局已經建立起來了,那么產品的質量就變得更重要了,測試量就要加大。測試量應該針對合適的目標進行調整。
五、軟件測試的心理學問題
1、程序測試的過程具有破壞性
人類的活動具有高度的目的性,建立適當的目標具有重要的心理作用。如果我們的目的是要證明程序中沒有錯誤,那我們就會不自覺地朝這個方向去做;也就是說,我們會傾向于挑選那些使程序出錯的可能性較小的測試數據。另一方面,如果我們的目標是要證明程序中有錯,那就會選擇一些易于發現程序所含錯誤的測試數據。而后一種態度會比前者給程序增添更多的價值。
測試的定義意味著程序測試的過程是具有破壞性的,其程度甚至達到了不可容忍的地步。社會上大多數人的人生觀是建設性的,而不是破壞性的。人們傾向 于創造一個物品,而不是輕易毀壞—個物品。因此,程序壞—個物品。因此,程序 測試的破壞性的定義使人們對程序測試工作望而生畏。程序測試定義還隱含著如何設計測試情況(測過數據),以及應該由誰和不應由誰來測試一個給定程序等等觀點。
原文轉自:http://www.uml.org.cn/bzgf/bzgf060802.htm