2. 對父類的測試是否能照搬到子類?
援用上面的假設,Base::Redefined()和Derived::Redefined()已經是不同的成員函數,它們有不同的服務說明和執行。對此,照理應該對 Derived::Redefined()重新測試分析,設計測試用例。但由于面向對象的繼承使得兩個函數有相似,故只需在 Base::Redefined()的測試要求和測試用例上添加對Derived::Redfined()新的測試要求和增補相應的測試用例。例如:
Base::Redefined()含有如下語句
If (value<0) message ("less");
else if (value==0) message ("equal");
else message ("more");
Derived::Redfined()中定義為
If (value<0) message ("less");
else if (value==0) message ("It is equal");
else
{message ("more");
if (value==88)message("luck");}
在原有的測試上,對Derived::Redfined()的測試只需做如下改動:將value==0的測試結果期望改動;增加value==88的測試。
多態有幾種不同的形式,如參數多態,包含多態,過載多態。包含多態和過載多態在面向對象語言中通常體現在子類與父類的繼承關系,對這兩種多態的測試參見上述對父類成員函數繼承和過載的論述。包含多態雖然使成員函數的參數可有多種類型,但通常只是增加了測試的繁雜。對具有包含多態的成員函數測試時,只需要在原有的測試分析和基礎上擴大測試用例中輸入數據的類型的考慮。對類為粒度進行面向對象的單元測試,可參考[10]中關于如何從MtSS生成測試用例的說明。
七 面向對象的集成測試(OO Integrate Test)
傳統的集成測試,是由底向上通過集成完成的功能模塊進行測試,一般可以在部分程序編譯完成的情況下進行。而對于面向對象程序,相互調用的功能是散布在程序的不同類中,類通過消息相互作用申請和提供服務。類的行為與它的狀態密切相關,狀態不僅僅是體現在類數據成員的值,也許還包括其他類中的狀態信息。由此可見,類相互依賴極其緊密,根本無法在編譯不完全的程序上對類進行測試。所以,面向對象的集成測試通常需要在整個程序編譯完成后進行。此外,面向對象程序具有動態特性,程序的控制流往往無法確定,因此也只能對整個編譯后的程序做基于黑盒子的集成測試。
面向對象的集成測試能夠檢測出相對獨立的單元測試無法檢測出的那些類相互作用時才會產生的錯誤;趩卧獪y試對成員函數行為正確性的保證,集成測試只關注于系統的結構和內部的相互作用。面向對象的集成測試可以分成兩步進行:先進行靜態測試,再進行動態測試。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/