雷銀國
【摘要】 面向對象的開發(fā)技術有力的推進了軟件產業(yè)的迅速發(fā)展。面向對象軟件的獨有特性,如抽象、繼承、封裝、多態(tài)等,使得傳統(tǒng)的軟件測試技術不能直接應用于面向對象的軟件測試,從而形成一種新興的軟件測試技術——面向對象的測試技術。本文主要分析了面向對象軟件測試中存在的幾點問題及應對策略。
【關鍵詞】 面向對象 軟件測試 單元測試 集成測試 封裝測試 多態(tài)測試
一、引言
現(xiàn)代軟件工程學中,軟件測試作為軟件開發(fā)的重要環(huán)節(jié)越來越受到人們的重視。隨著軟件開發(fā)規(guī)模的增大、復雜程度的增加,測試工作也顯得更加困難。在測試中面臨如下方面的問題:測試的基本單元應該是什么;繼承的內在含義是什么;封裝造成的困難是什么;多態(tài)性引起的附加困難是什么?本文就上述幾個問題進行論述與分析。
二、面向對象軟件測試的概念
面向對象軟件測試是根據面向對象的軟件開發(fā)過程結合面向對象的特點提出的。是新興的軟件測試技術,是專門針對使用面向對象技術開發(fā)的軟件而提出的一種測試技術。其目的是為了解決傳統(tǒng)的軟件測試技術,面對面向對象技術開發(fā)的軟件多少顯得有些力不從心的現(xiàn)象。面向對象開發(fā)技術和傳統(tǒng)的開發(fā)技術相比,新增了多態(tài)、繼承、封裝等特點。這些新特點使得開發(fā)出來的程序,具有更好的結構、更規(guī)范的編程風格, 極大地優(yōu)化了數(shù)據使用的安全性,提高了代碼的重用率。然而,另一方面也影響了軟件測試的方法和內容,增加了軟件測試的難度,帶來了傳統(tǒng)軟件設計技術所不存在的錯誤;或者使得傳統(tǒng)軟件測試中的重點不再突出。
三、面向對象單元測試的選擇
傳統(tǒng)的單元測試的對象是軟件設計的最小單位——模塊。單元測試的依據是詳細設計描述,單元測試應對模塊內所有重要的控制路徑設計測試用例,可以發(fā)現(xiàn)模塊內部的錯誤。對于面向對象系統(tǒng)中的測試案例設計,類——而不是功能(面向對象中的方法),被作為測試的基本單元。
四、繼承測試問題的分析
繼承的功能是面向對象系統(tǒng)的主要優(yōu)點之一。一個應用中正在被測試的類可能已經被完整地測試過后,有必要重新測試繼承的方法嗎?當然在大多數(shù)情況下,繼承的功能要重新測試。因為當功能被繼承時會產生新的使用上下文。另一個原因是,多繼承增加了要測試的上下文的數(shù)目。所以,在設計一個類的測試計劃時必須考慮類所繼承的所有功能。
繼承可以用來實現(xiàn)開發(fā)中的特殊化關系或僅為了編程的方便。實現(xiàn)特殊化作為繼承的出發(fā)點必須對應于問題域的特殊化。這里,用于測試超類的測試案例可能在測試繼承類時是可以復用的。如果繼承的使用僅僅是為了編程的方便,那么這種子類不可能體現(xiàn)真正特殊化關系。因此我們把用于超類的測試案例直接復用于繼承類存在一定的問題。繼承類必須從新測試。所以,基于繼承所使用的上下文對繼承要重新測試。從上述討論中我們可以得出的結論是:派生類必須被測試,即使其代碼可能沒有經過更改。我們需要對實施于基類的測試再補充一些測試案例來覆蓋派生類中那些未被基類滿足的需求區(qū)域。
五、封裝測試問題的分析
封裝是面向對象系統(tǒng)中添加的功能之一。封裝本身不是錯誤的一個來源,但是許多開發(fā)人員認為它會妨礙測試,因為測試要求報告對象的具體和抽象狀態(tài)。封裝確實會使提供這類報告變得困難,繼而影響到報告方法的可靠驗證。但是,有幾種方法可以解決這個問題。那么,通過什么方法可以在較高層解決該問題呢?可以嘗試使用常規(guī)的“正確性證明”技術,因為一個已被證明的方法有理由免于測試。一個程序的常規(guī)正確性證明類似于證明一個理論是正確的。必須使用常規(guī)的數(shù)學方法來證明程序正確地執(zhí)行了期望它實現(xiàn)的功能。常規(guī)的正確性證明就如同窮舉測試,不僅難度大而且耗時。但狀態(tài)報告方法趨向于小而簡單,而且使用常規(guī)方法來證明相對比較容易。從上述討論可以得出的結論是:封裝加大了測試的難度,但這個問題是可以解決的。底層單側或調試工具可以幫助查看對象,但不推薦使用。常規(guī)方法提供了最豐富的結果,但實現(xiàn)起來極其困難。
六、多態(tài)測試問題的分析
多態(tài)對象將有多個綁定,但是必須對多態(tài)對象的每個可能的綁定進行單獨的測試。問題在于定位所有這種綁定可能很困難。無法定位到所有這些綁定將削弱代碼覆蓋的目標,因而是不理想的。有可能缺陷就潛伏在這種情況下。我們必須承認:單獨測試多態(tài)對象的多個綁定的要求確實會產生問題。它還會使集成規(guī)劃變得復雜,因為在一個客戶類可以被測試之前,必須集成許多服務類。
從上述討論中,我們可以得出結論:必須測試多態(tài)對象的所有綁定以檢查完整的代碼覆蓋,但是定位所有綁定卻存在困難。
參 考 文 獻
[1]余先榮羅婷婷.關于面向對象軟件測試技術的研究[J].中國新通信,2013,(8).
[2]宋春秀.面向對象軟件測試技術的研究[J].信息安全與技術,2010,(9).