前言
承接著之前單元測試相關的文章中,提到了程式的可測試性為系統重要的品質指標之一。這篇文章要提的,則是也很常用來當作檢視測試的品質指標之一。
測試不是有做就好,做心安的...透過code coverage,可以快速的得知,目前系統中,有多少程式被測試過,以及測試的過程中,程式執行的路徑為何。
Code Coverage的定義
基本上就是測試程式碼的涵蓋範圍,不考量成本跟投資效益比,涵蓋率越高,當然代表品質提升面也會比較廣。
Code Coverage的種類
Code Coverage種類不少,以下舉出幾種:
承接著之前單元測試相關的文章中,提到了程式的可測試性為系統重要的品質指標之一。這篇文章要提的,則是也很常用來當作檢視測試的品質指標之一。
測試不是有做就好,做心安的...透過code coverage,可以快速的得知,目前系統中,有多少程式被測試過,以及測試的過程中,程式執行的路徑為何。
Code Coverage的定義
基本上就是測試程式碼的涵蓋範圍,不考量成本跟投資效益比,涵蓋率越高,當然代表品質提升面也會比較廣。
Code Coverage的種類
Code Coverage種類不少,以下舉出幾種:
- Function Coverage:
以function為單位,檢測有哪些function曾經被測試程式測試過。只要有測試到該function,就當作測過了。假設production code裡面有10個function,只有1個被測試過,那function coverage就是10%。
- Line Coverage:
也就是是否production code的每一行程式碼,都有被測試程式執行到。也是一般.NET的code coverage工具裡面,最常看到的涵蓋率。
如果,你以為每一行都有跑到,Line Coverage 100%就代表這是測試品質的最高表現,那就錯了,Line Coverage只是幾個涵蓋率分類裡面的子集合而已。
- Statement Coverage:
與line Coverage一行一行用斷行符號來分的切入角度不同,而是使用statement來當檢測單位。在許多的程式語言中,是允許一行裡面出現多個statement的,當一行裡面擁有多個statement,而測試程式中,只有檢測到其中一個statement,那麼line coverage會涵蓋到,statement coverage卻可以抓出其中涵蓋度不足的部分。
- Decision Coverage:
就像決策樹一般,每一個決策分歧點,也就是程式執行路徑,為檢測單位。值得一提的是,Decision coverage針對的是分歧後的結果。
- Condition Coverage:
即使是Decision Coverage,也有不足之處。不足處在於Decision針對的是每條不同路徑要測試的程式主體,但判斷式本身,卻不過問。而Condition Coverage是連判斷式裡面的陳述式(sub-expression),每一種陳述式所回傳的bool正反兩種情境都要測到。
- Condition/Decision Coverage:
沒錯!就是摻在一起做撒尿牛丸。除了判斷式中每個陳述式的bool都要測true/false,也要測試各種路徑裡面的各種結果。
- Modified condition/decision coverage:
可以說是Condition/Decision Coverage的完成體,一樣以wiki上的例子來說: - Multiple Condition Coverage:
最後當然就是最瘋狂的一種,每一個陳述式都有true/false,去做2的n次方種組合。
沒有留言:
張貼留言