淺談軟件測試的目的和原則
基于不同的立場,存在著兩種完全不同的測試目的。從用戶的角度出發,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可以接受該產品。而從軟件開發者的角度出發,則希望測試成為表明軟件產品中不存在錯誤的過程,驗證該軟件已正確地實現了用戶的要求,確立人們對軟件質量的信心。因此,他們會選擇那些導致程序失效概率小的測試用例,回避那些易于暴露程序錯誤的測試用例。同時,也不會著意去檢測、排除程序中可能包含的副作用。
顯然,這樣的測試對完善和提高軟件質量毫無價值。因為在程序中往往存在著許多預料不到的問題,可能會被疏漏,許多隱藏的錯誤只有在特定的環境下才可能暴露出來。如果不把著眼點放在盡可能查找錯誤這樣一個基礎上,這些隱藏的錯誤和缺陷就查不出來,會遺留到運行階段中去。如果站在用戶的角度,替他們設想,就應當把測試活動的目標對準揭露程序中存在的錯誤。在選取測試用例時,考慮那些易于發現程序錯誤的數據。
有鑒于此,Grenford J.Myers就軟件測試目的提出以下觀點:
。1)測試是程序的執行過程,目的在于發現錯誤;
。2)一個好的測試用例在于能發現至今未發現的錯誤;測試用例設計
。3)一個成功的測試是發現了至今未發現的錯誤的測試。
測試的目標是想以最少的時間和人力找出軟件中潛在的各種錯誤和缺陷。如果成功地實施了測試,就能夠發現軟件中的錯誤。測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符。此外,實施測試收集到的測試結果數據為可靠性分析提供了依據。
根據這樣的測試目的,軟件測試的原則應該是:
。1)應當把“盡早地和不斷地進行軟件測試”作為軟件開發者的座右銘。
由于原始問題的復雜性,軟件的復雜性和抽象性,軟件開發各個階段工作的多樣性,以及參加開發各種層次人員之間工作的配合關系等因素,使得開發的每個環節都可能產生錯誤。所以不應把軟件測試僅僅看作是軟件開發的一個獨立階段,而應當把它貫穿到軟件開發的各個階段中。堅持在軟件開發的各個階段的技術評審,這樣才能在開發過程中盡早發現和預防錯誤,把出現的錯誤克服在早期,杜絕某些隱患,提高軟件質量。
。2)測試用例應由測試輸入數據和與之對應的預期輸出結果這兩部分組成。
測試以前應當根據測試的要求選擇在測試過程中使用的測試用例(Test case)。測試用例主要用來檢驗程序員編制的程序,因此不但需要測試的輸入數據,而且需要針對這些輸入數據的預期輸出結果。如果對測試輸入數據沒有給出預期的程序輸出結果,那么就缺少了檢驗實測結果的基準,就有可能把一個似是而非的錯誤結果當成正確結果。
。3)程序員應避免檢查自己的程序。
測試工作需要嚴格的作風,客觀的態度和冷靜的情緒。人們常由于各種原因具有一種不愿否定自己工作的心理,認為揭露自己程序中的問題總不是一件愉快的事。這一心理狀態就成為測試自己程序的障礙。另外,程序員對軟件規格說明理解錯誤而引入的錯誤則更難發現。如果由別人來測試程序員編寫的程序,可能會更客觀,更有效,并更容易取得成功。要注意的是,這點不能與程序的調試(debuging)相混淆。調試由程序員自己來做可能更有效。
文章來源于領測軟件測試網 http://www.kjueaiud.com/