程式碼涵蓋率 100% 這樣夠了嗎?

在看 model-based testing 時,我們會用各種測試路徑來設計測試案例,然後期望能夠把所有的路徑都考慮進去,這麼一來就會達成涵蓋率百分之百的成就。以下面的 Finite State Machine 來說,要想涵蓋所有路徑,需要設計 3 條路徑,會從 A 出發到達終點 F 或 E。

fsm

路徑: A → B → E, A → C → D → E, A → C → F

但是,是否涵蓋率就代表你的測試是完美了呢?以路徑來說,的確如此,但是請看下面的程式碼:

float Divide(int x, int y)
{
    return  (float)(x/y);
}

程式碼只有一行,打算執行每一行程式碼,讓涵蓋率要百分之百的話,根本只需要一個測試案例。但是,依照邊界值分析,在 y = 0 的時候,這程式碼可能就破功了,這樣你還會相信測試案例把所有的程式碼都涵蓋進去了,就是百分之百了嗎?

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s