標籤:style blog http color 使用 strong
《微軟的軟體測試之道》讀書筆記 之 結構測試技術
2014-07-18
我們需要結構測試嗎?
微軟的一項實驗說明了結構測試的在代碼覆蓋中起到的效果:
超過3000名測試員參與了這項實驗,每25人一組,實驗結果在所有組中都是一致的。在這項研究中,
- 指令碼化測試:根據樣式書設計的指令碼化測試在被測程式上達到了標稱83%的程式碼涵蓋範圍。
- 探索性測試:然後,實驗參與者允許進行每人15分鐘,累計5小時的探索性測試。令人驚訝的是,程式碼涵蓋範圍平均只增加了3個百分點。
- 結構測試:但是,當實驗參與者能夠分析探測過的(Instrumented)代碼的運行結果並使用白盒技術設計測試以後,不到20分鐘的時間程式碼涵蓋範圍就提高到了 91%(這是不使用代碼突變或故障注入所能達到的最大實際程式碼涵蓋範圍)。同時,測試員們也能夠更好的從代價和收益的角度解釋為什麼剩下的9%未覆蓋代碼是不可測試的。
顯示了不同測試技術的代碼覆蓋效果。
圖1 不同測試技術的代碼覆蓋效果
塊測試
此書把塊測試、決策測試、條件測試、基礎路徑測試都歸入結構測試技術。這裡主要講一下塊測試。
塊覆蓋和語句覆蓋
- 語句覆蓋測量一個程式在測試過程中被執行過的語句的數量。
- 塊覆蓋測量無分支的連續語句組的數量。導致控制流程程轉向分支的條件陳述式可以包含若干塊。
這個看起來似乎只是一個極小的區別,然而,語句測試和塊測試的區分是相當重要的。因為相較於語句測試,塊測試對控制流程程提供了更好的敏感度。
?代碼塊的計算
塊測試小結
塊測試是用於單元測試的一種普遍方法:
優勢:它非常適合於迅速地評估某函數的準系統。對於設計用於執行switch/case語句和例外處理常式控制流程程的測試來說,它也是一個很有價值的技術。
劣勢:然而,塊測試是健壯的結構測試中相對較弱的標準,它還可能漏掉控制流程程的一些重要的分支。此外,塊測試還容易忽略一些潛在的問題,特別是在我們測試的目的只是要提高程式碼涵蓋範圍而不是要仔細分析被測試代碼的情況下。