專利名稱:一種邏輯測(cè)試的功能覆蓋率分析方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種探測(cè)測(cè)試用例的激勵(lì)是否充分的方法,具體來(lái)講,涉及一種邏輯測(cè)試的功能覆蓋率分析方法。
背景技術(shù):
邏輯的功能需求一般可以翻譯為“在XX激勵(lì)下,邏輯應(yīng)當(dāng)XX響應(yīng)”的形式。為了驗(yàn)證邏輯需求規(guī)格書中的某項(xiàng)功能需求是否實(shí)現(xiàn),需要給邏輯施加相應(yīng)的各種激勵(lì)數(shù)據(jù)(如,配置寄存器、向邏輯發(fā)送數(shù)據(jù)包等),然后判斷邏輯的響應(yīng)數(shù)據(jù)是否與需求規(guī)格書中所定義的一致。如果施加給該邏輯的激勵(lì)數(shù)據(jù)是充分的,且邏輯對(duì)激勵(lì)的響應(yīng)是正確的話,則該條邏輯功能就被正確地實(shí)現(xiàn)了。邏輯測(cè)試的通過(guò)需要滿足邏輯對(duì)激勵(lì)的響應(yīng)的正確性及施加給邏輯的激勵(lì)的充分性兩個(gè)條件。
在對(duì)大規(guī)模邏輯的測(cè)試過(guò)程中,由于激勵(lì)數(shù)據(jù)和響應(yīng)數(shù)據(jù)都非常龐大,且響應(yīng)和激勵(lì)的映射關(guān)系也比較復(fù)雜,所以用人工的方法來(lái)分析響應(yīng)是否正確非常困難。圖1中示出了現(xiàn)有的一種測(cè)試分析方法。如圖1所示,可把由激勵(lì)產(chǎn)生器所產(chǎn)生的激勵(lì)數(shù)據(jù)同時(shí)作用于參考模型(Reference Model,RM)和邏輯系統(tǒng)(即被測(cè)邏輯),然后通過(guò)響應(yīng)比較器來(lái)比較該RM和該被測(cè)邏輯的響應(yīng)是否一致。如果在比較結(jié)果中該RM和該被測(cè)邏輯的響應(yīng)是一致的,則說(shuō)明該被測(cè)邏輯和參考模型都正確響應(yīng)了該激勵(lì)數(shù)據(jù);否則,如果比較結(jié)果不一致,則被測(cè)邏輯和參考模型必然有一個(gè)的響應(yīng)是不符合邏輯需求規(guī)格書,需要查找問(wèn)題的根源,并進(jìn)行重新測(cè)試??刂颇_本會(huì)控制該激勵(lì)產(chǎn)生器產(chǎn)生激勵(lì)數(shù)據(jù),并能接收響應(yīng)比較器的比較結(jié)果。
前述的將參考模型的響應(yīng)數(shù)據(jù)與被測(cè)邏輯的響應(yīng)數(shù)據(jù)進(jìn)行比較來(lái)分析被測(cè)邏輯的響應(yīng)是否確性的方法,已成為最普遍采用的一種邏輯系統(tǒng)測(cè)試的方法,但在該方法中未找到對(duì)激勵(lì)充分性進(jìn)行檢驗(yàn)的理想方法。
對(duì)于測(cè)試數(shù)據(jù)的充分性,業(yè)界最普遍的做法是直接根據(jù)需求規(guī)格書上的功能要求,控制激勵(lì)產(chǎn)生器產(chǎn)生各種相應(yīng)的激勵(lì)數(shù)據(jù)進(jìn)行測(cè)試。而不分析和度量該實(shí)際的激勵(lì)是否正確和充分。
但是,測(cè)試人員編寫激勵(lì)產(chǎn)生器的控制腳本來(lái)控制激勵(lì)產(chǎn)生器產(chǎn)生激勵(lì)數(shù)據(jù)時(shí)難免出現(xiàn)遺漏或錯(cuò)誤,但由于現(xiàn)有方法沒(méi)有反饋和報(bào)告機(jī)制,現(xiàn)實(shí)中這種遺漏或錯(cuò)誤不易被測(cè)試人員所察覺(jué),所以就很容易導(dǎo)致漏測(cè)或出現(xiàn)錯(cuò)誤。另一方面,即使控制腳本正確,有時(shí)由于激勵(lì)產(chǎn)生器的錯(cuò)誤,實(shí)際作用在被測(cè)邏輯和RM的數(shù)據(jù)已經(jīng)并非是測(cè)試人員所期望的,這種錯(cuò)誤也不易被測(cè)試人員所察覺(jué),也很容易導(dǎo)致漏測(cè)。
在另外一種方法中,在測(cè)試之前根據(jù)需求規(guī)格以某種方式(如以EXCEL表格的方式)定義好輸入的數(shù)據(jù)必須覆蓋的那些集合,在測(cè)試過(guò)程中用工具檢查實(shí)際的輸入數(shù)據(jù)是否涵蓋了這些集合,如果沒(méi)有涵蓋,則說(shuō)明激勵(lì)不夠充分,提醒測(cè)試人員補(bǔ)充相應(yīng)測(cè)試用例。
但這種方法是由測(cè)試人員根據(jù)需求規(guī)格來(lái)定義輸入數(shù)據(jù)必須涵蓋的數(shù)據(jù)集合,其是人為的定義過(guò)程,同樣難免出現(xiàn)疏漏。另一方面,由于這種集合直觀性差,所以定義過(guò)程工作量較大而且不易重用,修改起來(lái)也很困難,所以實(shí)際效果不夠理想。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于,提供一種邏輯測(cè)試的功能覆蓋率分析方法,可以自動(dòng)地探測(cè)探測(cè)數(shù)據(jù)是否充分以及缺少哪些激勵(lì)數(shù)據(jù)等信息,從而使?jié)M足測(cè)試數(shù)據(jù)充分的目的。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案在于提供了一種邏輯測(cè)試的功能覆蓋率分析方法,包括如下步驟(a)在參考模型中相應(yīng)的功能分支上插入“探針”;(b)在測(cè)試用例的測(cè)試過(guò)程中執(zhí)行到“探針”時(shí),調(diào)用統(tǒng)計(jì)函數(shù)把當(dāng)前功能分支的探測(cè)點(diǎn)信息記錄到統(tǒng)計(jì)表中;(c)在測(cè)試用例執(zhí)行完畢把統(tǒng)計(jì)表的信息打印到這個(gè)測(cè)試用例的日志文件中;(d)在所有測(cè)試用例測(cè)試完畢后,依次打開(kāi)每個(gè)測(cè)試用例的日志文件,匯總所有測(cè)試用例覆蓋的功能分支的探測(cè)點(diǎn)統(tǒng)計(jì)信息,生成“已測(cè)功能分支統(tǒng)計(jì)表”;(e)掃描參考模型代碼,生成探測(cè)點(diǎn)樹(shù);(f)比較“已測(cè)功能分支統(tǒng)計(jì)表”及該探測(cè)點(diǎn)樹(shù),獲取功能覆蓋率信息。
其中,每一個(gè)“探針”中包含有一個(gè)表示該功能分支執(zhí)行次數(shù)的計(jì)數(shù)器,且該統(tǒng)計(jì)表記錄了當(dāng)前測(cè)試用例的激勵(lì)數(shù)據(jù)覆蓋功能分支的探測(cè)點(diǎn)信息。
其中,所述探針包含有當(dāng)前函數(shù)的調(diào)用路徑,一個(gè)探針可以通過(guò)具體化調(diào)用路徑而對(duì)應(yīng)多個(gè)探測(cè)點(diǎn)。
其中,在步驟(b)中進(jìn)一步包括在參考模型中的每一個(gè)需要插入探針的proc中,獲取當(dāng)前的調(diào)用路徑并賦給變量的步驟。
其中,在步驟(b)中進(jìn)一步包括判斷統(tǒng)計(jì)表中是否有當(dāng)前功能分支的探測(cè)點(diǎn)信息;如果在統(tǒng)計(jì)表中沒(méi)有當(dāng)前功能分支的探測(cè)點(diǎn)信息,則在統(tǒng)計(jì)表中增加一條記錄,并將計(jì)數(shù)器置為1;如果統(tǒng)計(jì)表中已有當(dāng)前功能分支的探測(cè)點(diǎn)信息,則將該探測(cè)點(diǎn)信息中的計(jì)數(shù)器加1。
其中,所述步驟(e)進(jìn)一步包括(e1)、對(duì)參考模型進(jìn)行第一遍掃描,得到該參考模型中定義的proc,生成一個(gè)Proc表,以及生成每一proc對(duì)應(yīng)的探針表;(e2)、對(duì)參考模型進(jìn)行第二遍掃描,產(chǎn)生proc調(diào)用關(guān)系表,生成proc調(diào)用關(guān)系樹(shù);(e3)、利用proc調(diào)用關(guān)系樹(shù)和探針表,給proc調(diào)用關(guān)系樹(shù)上的每一個(gè)proc都添加上該proc的“探針”,生成探測(cè)點(diǎn)樹(shù)。
其中,進(jìn)一步包括在探針的描述信息中插入一個(gè)或多個(gè)變量來(lái)統(tǒng)計(jì)調(diào)試信息的步驟。
本發(fā)明的有益效果在于操作簡(jiǎn)單與用EXCEL表格定義激勵(lì)數(shù)據(jù)相比,在參考模型中所關(guān)心的路徑上插入“探針”操作更加容易和方便。其他的工作諸如“探測(cè)點(diǎn)”的統(tǒng)計(jì)、“探測(cè)點(diǎn)樹(shù)”的生成及未覆蓋點(diǎn)的查找打印都是可以通過(guò)軟件來(lái)完成。
獲得的信息更加可靠功能分支覆蓋信息從參考模型中獲取,要比從激勵(lì)數(shù)據(jù)中獲取更可靠。如果采用定義激勵(lì)數(shù)據(jù)的方法,測(cè)試人員不易發(fā)現(xiàn)由于激勵(lì)模塊的錯(cuò)誤而導(dǎo)致的問(wèn)題。
測(cè)試點(diǎn)的增刪、變更更加靈活。
圖1是現(xiàn)有的一種測(cè)試分析方法。
圖2是本發(fā)明邏輯測(cè)試的功能覆蓋率分析方法的主流程圖。
圖3是本發(fā)明中的proc調(diào)用關(guān)系樹(shù)的示意圖。
圖4是本發(fā)明中的探測(cè)點(diǎn)樹(shù)的示意圖。
具體實(shí)施例方式
本發(fā)明主要通過(guò)分析測(cè)試過(guò)程中RM的功能分支覆蓋情況來(lái)反映邏輯的功能分支覆蓋情況,從而判斷激勵(lì)數(shù)據(jù)是否充分。
如圖2所示,是本發(fā)明邏輯測(cè)試的功能覆蓋率分析方法的主流程圖。在測(cè)試之前,測(cè)試人員需要根據(jù)需求規(guī)格在RM中相應(yīng)的功能分支上插入“探針”(步驟S210)。插入“探針”的工作需要手工完成,其他的工作比如測(cè)試點(diǎn)的統(tǒng)計(jì)覆蓋率的計(jì)算以及未覆蓋信息的打印可以通過(guò)自動(dòng)化工具完成。
“探針”實(shí)際上是一個(gè)函數(shù)調(diào)用,每一個(gè)“探針”中包含有一個(gè)表示該功能分支的路徑的變量和執(zhí)行次數(shù)的計(jì)數(shù)器。在測(cè)試用例的測(cè)試過(guò)程中執(zhí)行到“探針”時(shí),調(diào)用統(tǒng)計(jì)函數(shù)把當(dāng)前分支及其描述信息記錄到統(tǒng)計(jì)表中(步驟S220),在本發(fā)明的一個(gè)實(shí)施例中,具體的記錄方法為如果統(tǒng)計(jì)表中沒(méi)有這個(gè)分支,就在統(tǒng)計(jì)表中增加一條記錄,并將計(jì)數(shù)信息添上1;如果統(tǒng)計(jì)表中已有這個(gè)分支,就將這個(gè)分支的計(jì)數(shù)器加1。這個(gè)統(tǒng)計(jì)表記錄了當(dāng)前測(cè)試用例的激勵(lì)數(shù)據(jù)覆蓋功能分支信息。該測(cè)試用例執(zhí)行完畢后,把統(tǒng)計(jì)表的信息打印到這個(gè)測(cè)試用例的日志文件中(步驟S230)。
在所有測(cè)試用例測(cè)試完畢后,逐個(gè)打開(kāi)所有的測(cè)試用例的日志文件,統(tǒng)計(jì)所有測(cè)試用例覆蓋的功能分支得到“已測(cè)功能分支”的集合(步驟S240);然后掃描RM代碼得到“總的功能分支集合”(即探測(cè)點(diǎn)樹(shù))(步驟S250);比較“已測(cè)功能分支”和“總的功能分支”(步驟S260);從而來(lái)獲得該被測(cè)試邏輯中哪些功能尚未覆蓋、覆蓋率為多少等信息(步驟S270)。測(cè)試人員利用這些信息,就可以有目的有針對(duì)的增加測(cè)試用例和測(cè)試數(shù)據(jù),最終達(dá)到所有功能全面覆蓋的目的(步驟S280)。
下面結(jié)合一個(gè)實(shí)例,對(duì)本發(fā)明的邏輯測(cè)試的功能覆蓋分析方法進(jìn)行詳細(xì)說(shuō)明。
一、需求假設(shè)下面我們以用工具命令語(yǔ)言(Tool Command Language,下簡(jiǎn)稱為“TCL語(yǔ)言”)實(shí)現(xiàn)的RM為例,通過(guò)舉例的方式來(lái)說(shuō)明本發(fā)明的具體實(shí)現(xiàn)過(guò)程。對(duì)于其他語(yǔ)言實(shí)現(xiàn)的RM,除了調(diào)用棧的獲取方法不同外,其他方面基本相同。
假設(shè)某個(gè)被測(cè)邏輯的功能需求如下1處理的包長(zhǎng)范圍為64Byte-1500Byte,丟棄小于64Byte和大于1500Byte數(shù)據(jù)包。
2丟棄CRC(循環(huán)冗余校驗(yàn)碼)錯(cuò)誤的數(shù)據(jù)包。
3丟棄除ARP(Address Resolution Protocol,地址解析協(xié)議)、TCP(TransferControl Protocol,傳輸控制協(xié)議)之外的數(shù)據(jù)包。
4對(duì)于ARP進(jìn)行DMAC(目的MAC地址)檢查,如果DMAC不等于廣播地址或本設(shè)備MAC(media access control,媒體存取控制)地址,則直接丟棄。通過(guò)DMAC檢查的ARP包轉(zhuǎn)發(fā)給CPU進(jìn)行處理。
5對(duì)于TCP進(jìn)行DMAC檢查(方法同ARP);進(jìn)行DIP(目的IP地址)檢查,如果DIP不是本設(shè)備IP地址,則丟棄。對(duì)于通過(guò)DMAC檢查和DIP檢查的數(shù)據(jù)包,向CPU轉(zhuǎn)發(fā)。
二、RM的形式對(duì)于該需求假設(shè),其TCL語(yǔ)言格式的RM偽代碼描述如下(圓括號(hào)中的數(shù)字為行號(hào))proc Root{Paket}{ (01)if{包長(zhǎng)小于64Byte }{ (02)
丟棄處理; (03)}elseif{包長(zhǎng)大于1500Byte}{ (04)丟棄; (05)}elseif{Crc錯(cuò)誤}{ (06)丟棄; (07)}elseif{激勵(lì)數(shù)據(jù)是Arp包}{ (08)調(diào)用Arp包處理proc ArpProc;(09)}elseif{激勵(lì)數(shù)據(jù)是Tcp包}{ (10)調(diào)用Arp包處理proc TcpProc;(11)}else{ (12)丟棄; (13)} (14)} (15)proc ArpProc{Paket}{(16)調(diào)用DMAC檢查proc DMAC_CHECK獲得DMAC檢查結(jié)果; (17)if{DMAC檢查結(jié)果沒(méi)有通過(guò)}{ (18)丟棄處理; (19)}else{ (20)向CPU轉(zhuǎn)發(fā);(21)} (22)} (23)proc TcpProc{Paket}{(24)調(diào)用DMAC檢查proc DMAC_CHECK獲得DMAC檢查結(jié)果; (25)調(diào)用DIP檢查proc DIP_CHECK獲得DIP檢查結(jié)果; (26)if{DMAC檢查結(jié)果沒(méi)有通過(guò)}{ (27)丟棄處理; (28)}elseif{DIP檢查結(jié)果沒(méi)有通過(guò)}{ (29)丟棄處理; (30)}else{ (31)向CPU轉(zhuǎn)發(fā);(32)} (33)} (34)proc DMAC_CHECK{Paket}{ (35)if{DMAC等于本設(shè)備MAC地址}{ (36)返回DMAC檢查通過(guò)信息; (37)}elseif{DMAC等于廣播地址}{ (38)返回DMAC檢查通過(guò)信息; (39)}else{ (40)返回DMAC檢查不通過(guò)信息; (41)} (42)} (43)proc DIP_CHECK{Paket}{ (44)if{DIP等于本設(shè)備IP地址}{ (45)返回DIP檢查通過(guò)信息; (46)}else{ (47)返回DIP檢查不通過(guò)信息;(48)
}(49)}(50)由于RM和被測(cè)邏輯是在相同的激勵(lì)下,所以只要RM中的某個(gè)分支執(zhí)行到了,則被測(cè)邏輯的相應(yīng)功能也就必然測(cè)試到了。例如,如果RM的第(3)行執(zhí)行了,說(shuō)明被測(cè)邏輯的激勵(lì)也有小于64Byte的數(shù)據(jù)包;同樣,如果第(9)行、第(11)行執(zhí)行到了,說(shuō)明被測(cè)邏輯曾經(jīng)收到ARP包和TCP包。
三、插入“探針”后的RM的形式為了反映RM中每條路徑在測(cè)試時(shí)是否執(zhí)行以及執(zhí)行的次數(shù),需要在RM中所關(guān)心的路徑上插入“探針”,插入“探針”之后的RM形式如下(尖括號(hào)中的數(shù)字是為測(cè)試功能覆蓋率新增加的內(nèi)容的行號(hào))proc Root{Paket}{(01)獲取當(dāng)前的調(diào)用棧存入變量CallPath; <01>
if{包長(zhǎng)小于64Byte}{ (02)TestPoint″$CallPath->TP01包長(zhǎng)小于64byte″;<02>
丟棄處理; (03)}elseif{包長(zhǎng)大于1500Byte}{ (04)TestPoint″$CallPath->TP02包長(zhǎng)大于1500byte″; <03>
丟棄處理; (05)}elseif{Crc錯(cuò)誤}{ (06)TestPoint″$CallPath->TP03CRC錯(cuò)誤″; <04>
丟棄處理; (07)}elseif{激勵(lì)數(shù)據(jù)是Arp包}{ (08)調(diào)用Arp包處理proc ArpProc進(jìn)行處理;(09)}elseif{激勵(lì)數(shù)據(jù)是Tcp包}{ (10)調(diào)用Arp包處理proc TcpProc進(jìn)行處理;(11)}else{ (12)TestPoint″$CallPath->TP04本邏輯不支持的包類型,丟棄″;<05>
丟棄處理; (13)} (14)}(15)proc ArpProc{Paket}{ (16)獲取當(dāng)前的調(diào)用棧存入變量CallPath; <06>
調(diào)用DMAC檢查proc DMAC_CHECK獲得DMAC檢查結(jié)果;(17)if{DMAC檢查結(jié)果沒(méi)有通過(guò)}{(18)TestPoint″$CallPath->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)″;<07>
丟棄處理; (19)}else{ (20)TestPoint″$CallPath->TP02正常包″; <08>
向CPU轉(zhuǎn)發(fā); (21)}(22)}(23)
proc TcpProc{Paket}{(24)獲取當(dāng)前的調(diào)用棧存入變量CallPath;<09>
調(diào)用DMAC檢查proc DMAC_CHECK獲得DMAC檢查結(jié)果; (25)調(diào)用DIP檢查proc DIP_CHECK獲得DIP檢查結(jié)果; (26)if{DMAC檢查結(jié)果沒(méi)有通過(guò)}{ (27)TestPoint″$CallPath->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)″; <10>
丟棄處理; (28)}elseif{DIP檢查結(jié)果沒(méi)有通過(guò)}{ (29)TestPoint″$CallPath->TP02DIP檢查結(jié)果沒(méi)有通過(guò)″; <11>
丟棄處理; (30)}else{ (31)TestPoint″$CallPath->TP03正常包″; <12>
向CPU轉(zhuǎn)發(fā); (32)} (33)} (34)proc DMAC_CHECK{Paket}{ (35)獲取當(dāng)前的調(diào)用棧存入變量CallPath;<13>
if{DMAC等于本設(shè)備MAC地址}{ (36)TestPoint″$CallPath->TP01DMAC等于本地MAC,DMAC檢查通過(guò)″;<14>
返回DMAC檢查通過(guò)信息; (37)}elseif{DMAC等于廣播地址}{ (38)TestPoint″$CallPath->TP02DMAC等于廣播地址,DMAC檢查通過(guò)″; <15>
返回DMAC檢查通過(guò)信息; (39)}else{ (40)TestPoint″$CallPath->TP03DMAC檢查不通過(guò)″; <16>
返回DMAC檢查不通過(guò)信息 (41)} (42)} (43)proc DIP_CHECK{Paket}{ (44)獲取當(dāng)前的調(diào)用棧存入變量CallPath;<17>
if{DIP等于本設(shè)備IP地址}{(45)TestPoint″$CallPath->TP01DIP檢查通過(guò)″; <18>
返回DIP檢查通過(guò)信息; (46)}else{ (47)TestPoint″$CallPath->TP02DIP檢查不通過(guò)″;<19>
返回DIP檢查不通過(guò)信息; (48)} (49)} (50)在RM中的每一個(gè)需要插入探針的proc中,都要獲取當(dāng)前的調(diào)用路徑并賦給變量CallPath,例如第<1>行因?yàn)槭菂⒖寄P偷摹案眕roc,執(zhí)行后CallPath獲取的調(diào)用路徑為ROOT。對(duì)于第<6>行,因?yàn)锳rpProc在執(zhí)行中一定是被ROOT調(diào)用的,所以執(zhí)行后CallPath的結(jié)果為ROOT->ArpProc。而對(duì)于第<13>行,由于DMAC_CHECK這個(gè)proc可能被ArpProc或TcpProc調(diào)用,所以根據(jù)執(zhí)行時(shí)具體的調(diào)用的情況,可能的返回結(jié)果為ROOT->ArpProc->DMAC_CHECK或ROOT->TcpProc->DMAC_CHECK。將獲取到的調(diào)用路徑賦給“探針”中的變量CallPath。調(diào)用棧的獲取可以通過(guò)TCL的info level命令來(lái)獲取。
每個(gè)“探針”的格式為TestPoint″$CallPath->探針編號(hào)探測(cè)信息描述″;例如第<2>行,就是一個(gè)“探針”。其中,TestPoint為一個(gè)用于測(cè)試點(diǎn)統(tǒng)計(jì)的proc名,該proc統(tǒng)計(jì)當(dāng)前的分支執(zhí)行的次數(shù)。其中的$CallPath用剛才獲得的具體路徑替代。第一次執(zhí)行<2>行時(shí)在統(tǒng)計(jì)表中添加一條統(tǒng)計(jì)信息“1 ROOT->TP01包長(zhǎng)小于64byte”,最前面的1是該分支執(zhí)行次數(shù)的計(jì)數(shù)器,第二次執(zhí)行到該“探針”時(shí),將計(jì)數(shù)加1,統(tǒng)計(jì)表中的信息變?yōu)椤? ROOT->TP01包長(zhǎng)小于64byte”。
同樣,第一次執(zhí)行<14>行時(shí),根據(jù)當(dāng)時(shí)的調(diào)用路徑,在統(tǒng)計(jì)表中添加一條統(tǒng)計(jì)信息“1 ROOT->ArpProc->DMAC CHECK->TP01DMAC等于本地MAC,DMAC檢查通過(guò)”或“1 ROOT->TcpProc->DMAC CHECK->TP01DMAC等于廣播地址,DMAC檢查通過(guò)”;表示該探針探測(cè)到該路徑被執(zhí)行了一次。每次執(zhí)行“探針”時(shí),在統(tǒng)計(jì)表中添加新記錄(第一次執(zhí)行)或?qū)⒂?jì)數(shù)器加1(統(tǒng)計(jì)表中已經(jīng)存在的分支)。
四、“探針”、“探測(cè)點(diǎn)”、“探測(cè)點(diǎn)統(tǒng)計(jì)表”、“探測(cè)點(diǎn)樹(shù)”的概念其中,“探針”如上所述是指在測(cè)試中為統(tǒng)計(jì)RM的各分支執(zhí)行情況而在RM中添加的一條語(yǔ)句,這條語(yǔ)句的格式為TestPoint″$CallPath->探針編號(hào)探測(cè)信息描述″;“探測(cè)點(diǎn)”的概念為“具體的探測(cè)路徑->探針編號(hào)探測(cè)信息描述″。也就是說(shuō),把探針信息中的調(diào)用路徑變量具體化之后,這個(gè)探針信息就是一個(gè)一個(gè)“探測(cè)點(diǎn)”。一個(gè)“探針”對(duì)應(yīng)一個(gè)或多個(gè)“探測(cè)點(diǎn)”。
例如,第<2>行這個(gè)“探針”對(duì)應(yīng)的“探測(cè)點(diǎn)”為“ROOT->TP01包長(zhǎng)小于64byte”;而第<15>行的探針根據(jù)DMAC CHECK是由ArpProc調(diào)用還是由TcpProc調(diào)用的不同情況,可能對(duì)應(yīng)以下兩個(gè)“探測(cè)點(diǎn)”之一“ROOT->ArpProc->DMAC CHECK->TP01DMAC等于本地MAC,DMAC檢查通過(guò)”或“ROOT->TcpProc->DMAC CHECK->TP01DMAC等于廣播地址,DMAC檢查通過(guò)”。
具體在測(cè)試過(guò)程中執(zhí)行的是“探針”,統(tǒng)計(jì)的是“探測(cè)點(diǎn)”?!疤綔y(cè)點(diǎn)統(tǒng)計(jì)表”統(tǒng)計(jì)了被執(zhí)行了的探測(cè)點(diǎn)以及其執(zhí)行次數(shù)。如果我們關(guān)心的所有探測(cè)點(diǎn)都執(zhí)行到了,那么激勵(lì)數(shù)據(jù)就是充分的。RM中所有的proc構(gòu)成“探測(cè)點(diǎn)樹(shù)”的各個(gè)分支,所有的“探測(cè)點(diǎn)”構(gòu)成了“探測(cè)點(diǎn)樹(shù)”的所有“葉子”。RM中所有的proc和“探測(cè)點(diǎn)”共同構(gòu)成了一個(gè)完整的“探測(cè)點(diǎn)樹(shù)”。
實(shí)際測(cè)試過(guò)程中執(zhí)行了哪些“探測(cè)點(diǎn)”可以通過(guò)“探測(cè)點(diǎn)統(tǒng)計(jì)表”統(tǒng)計(jì)出來(lái),而“探測(cè)點(diǎn)樹(shù)”可以通過(guò)軟件自動(dòng)計(jì)算出來(lái)。這樣,我們就可以比較“探測(cè)點(diǎn)統(tǒng)計(jì)表”和“探測(cè)點(diǎn)樹(shù)”,如果所有的葉子都執(zhí)行了,說(shuō)明我們所關(guān)心的所有路徑都被測(cè)試了,也就說(shuō)明激勵(lì)是充分的;相反如果“探測(cè)點(diǎn)樹(shù)”中的某些“葉子”沒(méi)有被執(zhí)行,這時(shí)我們就要分析以下原因,看看該“探測(cè)點(diǎn)”不被執(zhí)行是否合理,如果有些“葉子”確實(shí)無(wú)法執(zhí)行到,那么測(cè)試也是充分的;如果本應(yīng)執(zhí)行到的“葉子”沒(méi)有被執(zhí)行,則說(shuō)明存在漏測(cè)。
五、“探測(cè)點(diǎn)樹(shù)”的生成。
下面介紹“探測(cè)點(diǎn)樹(shù)”的計(jì)算方法——“兩遍掃描法”。
第一遍掃描,產(chǎn)生“proc表”和每個(gè)proc的探針表。
從RM的第一行開(kāi)始,逐行讀出RM的每一行,結(jié)合TCL語(yǔ)法,利用正則表達(dá)式匹配的辦法我們就可以得出該RM中定義了那些proc,以及每個(gè)proc擁有的探針。
在本例中掃描完一遍后,我們就得到了該RM中所定義的proc的一個(gè)列表——“proc表”,和每個(gè)proc所擁有的探針列表——“探針表”。例如在前面的例子中,“proc表”有以下5條記錄
ROOTArpProcTcpProcDMAC_CHECKDIP_CHECK“探針表”有以下14條記錄ROOT->TP01包長(zhǎng)小于64byteROOT->TP02包長(zhǎng)大于1500byteROOT->TP03CRC錯(cuò)誤ROOT->TP04本邏輯不支持的包類型,丟棄ArpProc->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)ArpProc->TP02正常包TcpProc->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)TcpProc->TP02DIP檢查結(jié)果沒(méi)有通過(guò)TcpProc->TP03正常包DMAC_CHECK->TP01DMAC等于本地MAC,DMAC檢查通過(guò)DMAC_CHECK->TP02DMAC等于廣播地址,DMAC檢查通過(guò)DMAC_CHECK->TP03DMAC檢查不通過(guò)DIP_CHECK->TP01DIP檢查通過(guò)DIP_CHECK->TP02DIP檢查不通過(guò)第二遍掃描,產(chǎn)生proc調(diào)用關(guān)系表。
由于第一遍掃描RM時(shí)已經(jīng)產(chǎn)生了proc表,第二遍掃描RM時(shí)如果發(fā)現(xiàn)RM中某一行中有proc表中的某個(gè)proc,并且滿足TCL的調(diào)用的語(yǔ)法,則就是一個(gè)proc調(diào)用。用正則表達(dá)式很容易獲取proc調(diào)用關(guān)系。
第二編掃描后獲得的proc調(diào)用關(guān)系列表,其內(nèi)容如下ROOT->ArpProcROOT->TcpProcArpProc->DMAC_CHECKTcpProc->DMAC_CHECKTcpProc->DIP_CHECK然后根據(jù)proc列表和proc調(diào)用關(guān)系列表就可以很容易計(jì)算出proc調(diào)用關(guān)系樹(shù)計(jì)算出的proc調(diào)用關(guān)系樹(shù)描述如下ROOTROOT->ArpProcROOT->ArpProc->DMAC_CHECKROOT->TcpProcROOT->TcpProc->DMAC_CHECKROOT->TcpProc->DIP_CHECK其具體形式可如圖3所示,其中,每個(gè)圓圈表示一個(gè)“proc表”記錄,而每條路徑表示一種調(diào)用關(guān)系。
然后根據(jù)proc調(diào)用關(guān)系樹(shù)和探針表就可以生成“探測(cè)點(diǎn)樹(shù)”,生成的方法為,給proc調(diào)用樹(shù)上的每一個(gè)proc都添加上該proc的“探針”,生成的“探測(cè)點(diǎn)樹(shù)”內(nèi)容如下ROOTROOT->TP01包長(zhǎng)小于64byteROOT->TP02包長(zhǎng)大于1500byteROOT->TP03CRC錯(cuò)誤ROOT->TP04本邏輯不支持的包類型,丟棄ROOT->ArpProcROOT->ArpProc->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)ROOT->ArpProc->TP02正常包ROOT->ArpProc->DMAC_CHECKROOT->ArpProc->DMAC_CHECK->TP01DMAC等于本地MAC,DMAC檢查通過(guò)ROOT->ArpProc->DMAC_CHECK->TP02DMAC等于廣播地址,DMAC檢查通過(guò)ROOT->ArpProc->DMAC_CHECK->TP03DMAC檢查不通過(guò)ROOT->TcpProcROOT->TcpProc->TP01DMAC檢查結(jié)果沒(méi)有通過(guò)ROOT->TcpProc->TP02DIP檢查結(jié)果沒(méi)有通過(guò)ROOT->TcpProc->TP03正常包ROOT->TcpProc->DMAC_CHECKROOT->TcpProc->DMAC_CHECK->TP01DMAC等于本地MAC,DMAC檢查通過(guò)ROOT->TcpProc->DMAC_CHECK->TP02DMAC等于廣播地址,DMAC檢查通過(guò)ROOT->TcpProc->DMAC_CHECK->TP03DMAC檢查不通過(guò)ROOT->TcpProc->DIP_CHECKROOT->TcpProc->DIP_CHECK->TP01DIP檢查通過(guò)ROOT->TcpProc->DIP_CHECK->TP02DIP檢查不通過(guò)這其實(shí)就是探測(cè)點(diǎn)樹(shù)的文本形式描述。其樹(shù)形結(jié)構(gòu)請(qǐng)參照?qǐng)D4所示,其中每一個(gè)小橫線就表示該proc的一個(gè)“探針”。
六、測(cè)試的過(guò)程。
具體測(cè)試的過(guò)程如下(1)根據(jù)需求規(guī)格,在RM中相應(yīng)路徑上插入“探針”。
(2)測(cè)試執(zhí)行。每個(gè)測(cè)試用例執(zhí)行過(guò)程中所命中的“探測(cè)點(diǎn)”都會(huì)自動(dòng)計(jì)入“當(dāng)前測(cè)試用例的探測(cè)點(diǎn)統(tǒng)計(jì)表”,執(zhí)行完畢后將“當(dāng)前測(cè)試用例的探測(cè)點(diǎn)統(tǒng)計(jì)表”統(tǒng)計(jì)到的信息(執(zhí)行了的“探測(cè)點(diǎn)”以及執(zhí)行的次數(shù))打印到當(dāng)前測(cè)試用例的執(zhí)行日志文件中。
(3)生成總的“探測(cè)點(diǎn)統(tǒng)計(jì)表”。在所有測(cè)試用例執(zhí)行完畢后,用軟件去統(tǒng)計(jì)每個(gè)測(cè)試用例的探測(cè)點(diǎn)覆蓋信息。統(tǒng)計(jì)方法是依次打開(kāi)每個(gè)測(cè)試用例的執(zhí)行日志文件,從中讀出探測(cè)點(diǎn)統(tǒng)計(jì)信息,然后進(jìn)行匯總即可。匯總后生成總的“探測(cè)點(diǎn)統(tǒng)計(jì)表”。在匯總的過(guò)程中打印出每個(gè)測(cè)試用例所新增加的“探測(cè)點(diǎn)”和重復(fù)測(cè)到的“探測(cè)點(diǎn)”。如果某個(gè)測(cè)試用例新增加的“探測(cè)點(diǎn)”和重復(fù)測(cè)到的“探測(cè)點(diǎn)”都為0,則說(shuō)明該測(cè)試用例的激勵(lì)中沒(méi)有我們所期望的激勵(lì)數(shù)據(jù),是一個(gè)無(wú)效的測(cè)試用例;如果某個(gè)測(cè)試用例新增加的“探測(cè)點(diǎn)”為0而重復(fù)測(cè)到的“探測(cè)點(diǎn)”不為0,則說(shuō)明該測(cè)試用例所測(cè)到的“測(cè)試點(diǎn)”以前都測(cè)試過(guò)了,該測(cè)試用例屬于重復(fù)測(cè)試用例;一個(gè)測(cè)試用例只有它新增加的“探測(cè)點(diǎn)”不為0才是有價(jià)值的。利用該信息可以剔除一些意義不大的測(cè)試用例。
(4)生成“探測(cè)點(diǎn)樹(shù)”。掃描RM文本,生成“探測(cè)點(diǎn)樹(shù)”,該“樹(shù)”是“探測(cè)點(diǎn)”的全集。
(5)對(duì)比該“探測(cè)點(diǎn)樹(shù)”與總的“探測(cè)點(diǎn)統(tǒng)計(jì)表”,計(jì)算覆蓋率,打印相應(yīng)信息。將“探測(cè)點(diǎn)樹(shù)”中的各個(gè)“探測(cè)點(diǎn)”的執(zhí)行情況打印出來(lái)。如果某個(gè)“探測(cè)點(diǎn)”執(zhí)行次數(shù)為0,則給出警告信息供測(cè)試人員分析是否存在漏測(cè)。
七、“探針”還可以用作測(cè)試信息的統(tǒng)計(jì)在探針的描述信息中插入變量還可用以統(tǒng)計(jì)調(diào)試信息。例如在描述信息中插入包長(zhǎng)變量就可以統(tǒng)計(jì)出所收到的各種長(zhǎng)度的數(shù)據(jù)包的數(shù)量。因?yàn)榘L(zhǎng)不同導(dǎo)致探測(cè)點(diǎn)的描述信息不同,而在統(tǒng)計(jì)過(guò)程中只有調(diào)用路徑、探針編號(hào)、描述信息完全相同,才被認(rèn)為是同一個(gè)探測(cè)點(diǎn)。在探測(cè)點(diǎn)的描述信息中插入各種變量,就可以統(tǒng)計(jì)出在測(cè)試中實(shí)際出現(xiàn)的各個(gè)變量取值的組合情況。
例如,如果在根proc中插入探針TestPoint″$CallPath->TP05PktLen=$PktLen″;則當(dāng)實(shí)際收到的包長(zhǎng)是100時(shí),在統(tǒng)計(jì)表中添加″1 ROOT->TP05PktLen=100″;當(dāng)又收到包長(zhǎng)為200時(shí),在統(tǒng)計(jì)表中添加″1 ROOT->TP05PktLen=200″;當(dāng)再次收到包長(zhǎng)為100時(shí),在統(tǒng)計(jì)表將第一條的計(jì)數(shù)器加1
″2 ROOT->TP05PktLen=100″。
利用這種方法可以很方便的統(tǒng)計(jì)出收到的各種包長(zhǎng)的數(shù)量。
同樣,在探針中插入多個(gè)變量時(shí),可以統(tǒng)計(jì)出在測(cè)試過(guò)程中出現(xiàn)的這多個(gè)變量的各種組合情況。
在上述實(shí)施例中,是以采用TC1語(yǔ)言編寫的參考模型來(lái)對(duì)本發(fā)明進(jìn)行說(shuō)明,其不是為了限定本發(fā)明,在本發(fā)明的其他實(shí)施例中,也可以在Verilong、VHDL、VB、C/C++等語(yǔ)言編寫的參考模型中用類似的方法來(lái)實(shí)現(xiàn)。其實(shí)現(xiàn)方法依具體實(shí)現(xiàn)語(yǔ)言的語(yǔ)法而略有不同,主要是調(diào)用棧的獲取方法不同,諸如TCL語(yǔ)言可以使用“info level”指令來(lái)獲取調(diào)用棧,而其他語(yǔ)言可參考其用戶手冊(cè),該點(diǎn)對(duì)本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)是易于理解的。
本發(fā)明所采用的邏輯測(cè)試的功能覆蓋分析方法,具有如下優(yōu)點(diǎn)操作簡(jiǎn)單與用EXCEL表格定義激勵(lì)數(shù)據(jù)相比,在RM中所關(guān)心的路徑上插入“探針”操作更加容易和方便。其他的工作諸如“探測(cè)點(diǎn)”的統(tǒng)計(jì)、“探測(cè)點(diǎn)樹(shù)”的生成及未覆蓋點(diǎn)的查找打印都是可以通過(guò)軟件來(lái)完成。
獲得的信息更加可靠分支覆蓋信息從RM中獲取,要比從激勵(lì)數(shù)據(jù)中獲取更可靠。如果采用定義激勵(lì)數(shù)據(jù)的方法,測(cè)試人員不易發(fā)現(xiàn)由于激勵(lì)模塊的錯(cuò)誤而導(dǎo)致的問(wèn)題。
測(cè)試點(diǎn)的增刪、變更更加靈活。
權(quán)利要求
1.一種邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,包括如下步驟(a)在參考模型中相應(yīng)的功能分支上插入“探針”;(b)在測(cè)試用例的測(cè)試過(guò)程中執(zhí)行到“探針”時(shí),調(diào)用統(tǒng)計(jì)函數(shù)把當(dāng)前功能分支的探測(cè)點(diǎn)信息記錄到統(tǒng)計(jì)表中;(c)該測(cè)試用例執(zhí)行完畢后,把統(tǒng)計(jì)表的信息打印到該測(cè)試用例的日志文件中;(d)在所有測(cè)試用例測(cè)試完畢后,依次打開(kāi)每個(gè)測(cè)試用例的日志文件,匯總所有測(cè)試用例覆蓋的功能分支的探測(cè)點(diǎn)統(tǒng)計(jì)信息,生成“已測(cè)功能分支”的集合;(e)掃描參考模型代碼,生成探測(cè)點(diǎn)樹(shù);(f)比較“已測(cè)功能分支”的集合及該探測(cè)點(diǎn)樹(shù),獲取功能覆蓋率信息。
2.如權(quán)利要求1所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,每一個(gè)“探針”中包含有一個(gè)表示該功能分支的路徑的變量和執(zhí)行次數(shù)的計(jì)數(shù)器。
3.如權(quán)利要求2所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,所述統(tǒng)計(jì)表記錄了當(dāng)前測(cè)試用例的激勵(lì)數(shù)據(jù)所覆蓋的功能分支信息。
4.如權(quán)利要求1所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,所述探針包含有當(dāng)前函數(shù)的調(diào)用路徑變量,一個(gè)探針可以通過(guò)具體化調(diào)用路徑而對(duì)應(yīng)多個(gè)探測(cè)點(diǎn)。
5.如權(quán)利要求1到4任一項(xiàng)所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,在步驟(b)中進(jìn)一步包括在參考模型中的每一個(gè)需要插入探針的proc中,獲取當(dāng)前的調(diào)用路徑并賦給變量的步驟。
6.如權(quán)利要求2所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,在步驟(b)中進(jìn)一步包括判斷統(tǒng)計(jì)表中是否含有當(dāng)前探測(cè)點(diǎn)的記錄信息;如果在統(tǒng)計(jì)表中沒(méi)有當(dāng)前功能分支的探測(cè)點(diǎn)信息,則在統(tǒng)計(jì)表中增加一條記錄,并將計(jì)數(shù)器置為1;如果統(tǒng)計(jì)表中已有當(dāng)前功能分支的探測(cè)點(diǎn)信息,則將該探測(cè)點(diǎn)信息中的計(jì)數(shù)器加1。
7.如權(quán)利要求1、2、3、4、6任一項(xiàng)所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,所述步驟(e)進(jìn)一步包括(e1)、對(duì)參考模型進(jìn)行第一遍掃描,得到該參考模型中所定義的proc,生成一個(gè)Proc表,以及生成每一proc對(duì)應(yīng)的探針表;(e2)對(duì)參考模型進(jìn)行第二遍掃描,產(chǎn)生proc調(diào)用關(guān)系表,并生成proc調(diào)用關(guān)系樹(shù);(e3)給proc調(diào)用關(guān)系樹(shù)上的每一個(gè)proc都添加上該proc的“探針”,生成探測(cè)點(diǎn)樹(shù)。
8.如權(quán)利要求1所述的邏輯測(cè)試的功能覆蓋率分析方法,其特征在于,進(jìn)一步包括在探針的描述信息中插入一個(gè)或多個(gè)變量來(lái)統(tǒng)計(jì)調(diào)試信息的步驟。
全文摘要
一種邏輯測(cè)試的功能覆蓋率分析方法,包括如下步驟(a)在參考模型中相應(yīng)的功能分支上插入“探針”;(b)在測(cè)試用例的測(cè)試過(guò)程中執(zhí)行到“探針”時(shí),調(diào)用統(tǒng)計(jì)函數(shù)把該探針的描述信息記錄到統(tǒng)計(jì)表中;(c)在當(dāng)前用例執(zhí)行完畢后,把統(tǒng)計(jì)表的記錄有當(dāng)前測(cè)試用例所覆蓋的功能分支的記錄信息打印到該測(cè)試用例的日志文件中;(d)在所有測(cè)試用例測(cè)試完畢后,依次打開(kāi)每個(gè)測(cè)試用例的日志文件,匯總所有測(cè)試用例的功能分支的覆蓋信息,生成“已測(cè)功能分支統(tǒng)計(jì)表”;(e)掃描參考模型代碼,生成探測(cè)點(diǎn)樹(shù);(f)比較該“已測(cè)功能分支統(tǒng)計(jì)表”及該探測(cè)點(diǎn)樹(shù),獲取功能覆蓋率信息。本發(fā)明的邏輯測(cè)試功能覆蓋率分析方法,具有操作簡(jiǎn)單、獲得的信息更加可靠及測(cè)試點(diǎn)的增刪、變更更加靈活的優(yōu)點(diǎn)。
文檔編號(hào)G06F11/36GK1885273SQ200510035490
公開(kāi)日2006年12月27日 申請(qǐng)日期2005年6月21日 優(yōu)先權(quán)日2005年6月21日
發(fā)明者麻遠(yuǎn)聲 申請(qǐng)人:華為技術(shù)有限公司