登錄

路徑覆蓋

百科 > 軟件 > 路徑覆蓋

1.什么是路徑覆蓋

  路徑覆蓋是指選取足夠多的測(cè)試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過(guò)一次)。路徑覆蓋是覆蓋率最高的一種覆蓋技術(shù)。

  路徑覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,在白盒測(cè)試法中,覆蓋程度最高的就是路徑覆蓋,因?yàn)槠涓采w程序中所有可能的路徑。對(duì)于比較簡(jiǎn)單的小程序來(lái)說(shuō),實(shí)現(xiàn)路徑覆蓋是可能的,但是如果程序中出現(xiàn)了多個(gè)判斷和多個(gè)循環(huán),可能的路徑數(shù)目將會(huì)急劇增長(zhǎng),以致實(shí)現(xiàn)路徑覆蓋是幾乎不可能的。

  路徑覆蓋率的公式:路徑覆蓋率=被執(zhí)行到的路徑數(shù)/程序中總的路徑數(shù)。

2.路徑覆蓋的測(cè)試步驟

  1、將程序流程圖轉(zhuǎn)換成控制流圖;

  2、經(jīng)過(guò)語(yǔ)法分析求的路徑表達(dá)式;

  3、生成路徑圖;

  4、進(jìn)行路徑編碼;

  5、經(jīng)過(guò)譯碼得到執(zhí)行的路徑;

  6、通過(guò)路徑枚舉產(chǎn)生特定路徑測(cè)試用例;

  7、修正的條件判斷覆蓋率。

3.完全路徑覆蓋測(cè)試方法[1]

  雖然路徑覆蓋是覆蓋率最高的,但是,簡(jiǎn)單的程序路徑數(shù)量很少,而復(fù)雜的程序路徑數(shù)量巨大,要實(shí)現(xiàn)路徑覆蓋幾乎不可能,即測(cè)試量過(guò)大;另外,即使?jié)M足了程序結(jié)構(gòu)一般意義上的路徑覆蓋,仍然不能保證被測(cè)程序的正確性,即測(cè)試不足。如果要求測(cè)試更加充分,則要求增加更多的測(cè)試用例來(lái)提高覆蓋率,測(cè)試量會(huì)更大,于是,測(cè)試中就產(chǎn)生了測(cè)試量過(guò)大和測(cè)試不足這一對(duì)矛盾。

  對(duì)于獨(dú)立路徑數(shù)的計(jì)算可以采用下面的方法:

  第一步,從流圖中找出程序所有的必經(jīng)節(jié)點(diǎn)(流圖中任何獨(dú)立路徑都必定經(jīng)過(guò)的節(jié)點(diǎn)叫做必經(jīng)節(jié)點(diǎn)),記作IV(i),其中i為整數(shù)且0\le i \le N。

  第二步,從流圖中找出從必經(jīng)節(jié)點(diǎn)N(i)到必經(jīng)節(jié)點(diǎn)N(i+1)的獨(dú)立路徑數(shù)W(i),其中i為整數(shù)且0 \le i<N。

  第三步,重復(fù)上一步,直到程序結(jié)尾。

  第四步,根據(jù)乘法法則,獨(dú)立路徑數(shù)= W(i),其中i為整數(shù)且0 \le i < N,即獨(dú)立路徑數(shù)=W(0) * W(1) * ? * W(N一1)。

  完全路徑是指所有獨(dú)立路徑的集合,非完全路徑就是所有獨(dú)立路徑集合的真子集。由于程序中可能會(huì)包含有多個(gè)條件的判定,所以程序流程圖可能包含有隱含路徑,從而有程序流圖轉(zhuǎn)換成的對(duì)應(yīng)流圖可能包含有隱藏路徑。如圖1、圖2所示。

  消除隱含路徑的辦法就是將含有多個(gè)條件的判定分為多個(gè)判定。即把圖1的程序流圖轉(zhuǎn)換成如圖3所示,圖4是其對(duì)應(yīng)的流圖。

  圖4中,節(jié)點(diǎn)1,4,7為必經(jīng)節(jié)點(diǎn),W(0)=3,W(1)=3,所以獨(dú)立路徑數(shù)=3*3=9。由此,要達(dá)到完全路徑覆蓋就需要設(shè)計(jì)9個(gè)測(cè)試用例,從而使得測(cè)試量更加龐大。根據(jù)線(xiàn)性代碼序列與跳轉(zhuǎn)的測(cè)試覆蓋準(zhǔn)則,將程序在必經(jīng)節(jié)點(diǎn)處割斷,分別對(duì)每一段程序進(jìn)行完全路徑覆蓋的充分測(cè)試。對(duì)于被割斷的程序片斷,由于沒(méi)有參數(shù)人口,可以在程序片斷的開(kāi)頭增加代碼對(duì)參數(shù)進(jìn)行初始化。從而達(dá)到完全測(cè)試,緩解測(cè)試量過(guò)大與測(cè)試不足的矛盾。

  總結(jié)完全路徑覆蓋的具體步驟如下:

  1、將判定語(yǔ)句的條件進(jìn)行分離,細(xì)化程序流程圖,使其不含隱含路徑。

  2、根據(jù)程序流程圖畫(huà)出流圖,找出必經(jīng)節(jié)點(diǎn),必經(jīng)節(jié)點(diǎn)數(shù)為N。

  3、將程序流程圖在必經(jīng)節(jié)點(diǎn)處割斷,將整個(gè)程序分解為N+1個(gè)程序片斷。

  4、找出程序片斷i的完全路徑,為程序片斷i的每條獨(dú)立路徑設(shè)計(jì)用例,其中:1 \le i \le N+l。

  5、結(jié)合所設(shè)計(jì)的測(cè)試用例,將程序片斷i的參數(shù)初始化,其中1 \le i \le N+1

  6、將測(cè)試用例付諸測(cè)試,重復(fù)第四步至第六步,直到i=N+1。

評(píng)論  |   0條評(píng)論