實時軟件測試[1] 軟件測試
軟件測試和維護占用了典型軟件生命周期過程的70%或更多,那么選擇什么樣的策略來控制這些成本呢?LDRA將給出您答案。
多年來,在航空電子工業領域,覆蓋率分析技術已經在復雜的軟件控制系統錯誤檢測方面取得了非常有效的業績,F在,汽車工業也在考慮在軟件控制方面的測試質量和不斷增加的費用之間選擇。如果能夠借鑒航空電子工業領域中的經驗和教訓將是一種明智的選擇。
有很多不同類型和級別的覆蓋率。經常被提及的術語是函數覆蓋率,這是一個用來報告你是否調用過每一個函數的度量標準。這種覆蓋率有助于在測試的初級階段確保軟件的所有部分達到一些基本的覆蓋率和消除一些明顯的不足。
在那些開發復雜實時軟件(RTS)的公司里,通常情況下這種級別的覆蓋是不夠充分的,因此無論哪一種被應用的覆蓋技術都擴充到包括語句和分支覆蓋。
語句覆蓋——也稱為線性覆蓋、段覆蓋或者基本塊覆蓋,它可用來說明每一個可執行語句是否被執行,基本塊覆蓋和語句覆蓋是一致的,被測的代碼單元是沒有分支的序列。這大大的擴充了覆蓋圖的范圍,雖然僅僅是平面圖。
語句覆蓋是最容易達到100%的覆蓋度量指標。它能覆蓋整個源代碼并且幫助用戶發現存在于程序中很少運行到的代碼段中的錯誤。雖然它相對來說容易達到100%,不需要花費昂貴的費用和資源,但是它仍然能夠顯著的增強我們在源代碼的正確性方面的信心。然而,簡單的實現100%的語句
覆蓋率意味者仍然有通過這些語句的潛在的路徑沒有被執行,語句覆蓋不能測量這些路徑。
語句覆蓋是不能夠辨認很多的控制結構。例如,下面的這段C/C++代碼,在沒有一個測試用例使condition變量成為false的情況下,語句覆蓋就認為這個代碼被充分覆蓋了;實際上,如果一旦condition為false,這個代碼將出錯。這是語句覆蓋的一個非常嚴重的缺點。而If語句的使用是十分普遍的。
int* p = NULL;
if (condition)
p = &variable;
*p = 123;
語句覆蓋也不能告訴我們循環是否在終止時退出,它僅僅說明執行了循環體。因為像do-while這樣的循環會首先執行循環體一次,語句覆蓋認為它們是沒有分支的語句。
語句覆蓋率也忽略邏輯操作符(||和$$)。而且,語句覆蓋也不能辨認連續的開關語句標號。為了達到更加完整和精確的覆蓋,至少應用二維覆蓋圖,顯然需要分解判定條件。
if(condition1&&(condition2|| function1()))
statement1;
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/