何金花 張亞紅
(桂林航天工業(yè)學(xué)院 計(jì)算機(jī)科學(xué)與工程系,廣西 桂林 541004)
?
基于繼承性的面向?qū)ο箢?lèi)測(cè)試覆蓋準(zhǔn)則設(shè)計(jì)*
何金花**張亞紅
(桂林航天工業(yè)學(xué)院 計(jì)算機(jī)科學(xué)與工程系,廣西 桂林 541004)
隨著面向?qū)ο筌浖膽?yīng)用越來(lái)越廣泛,面向?qū)ο筌浖夹g(shù)的特征提高了軟件開(kāi)發(fā)的效率,也給軟件測(cè)試帶來(lái)了挑戰(zhàn)。測(cè)試覆蓋準(zhǔn)則是軟件測(cè)試的重要組成部分,可以給軟件測(cè)試提供指導(dǎo)作用。針對(duì)面向?qū)ο罄^承性對(duì)軟件測(cè)試的影響,從繼承方法和繼承屬性兩方面提出了類(lèi)測(cè)試覆蓋準(zhǔn)則。對(duì)這兩類(lèi)覆蓋準(zhǔn)則進(jìn)行了公理化評(píng)估,給出了算法設(shè)計(jì),通過(guò)實(shí)例應(yīng)用分析了執(zhí)行結(jié)果。文中設(shè)計(jì)的覆蓋準(zhǔn)則在設(shè)計(jì)面向?qū)ο鬁y(cè)試用例方面有一定的指導(dǎo)作用。
繼承性;覆蓋準(zhǔn)則;軟件測(cè)試;類(lèi);面向?qū)ο?/p>
軟件測(cè)試是軟件質(zhì)量保證的重要手段,是軟件開(kāi)發(fā)過(guò)程中不可缺少的重要環(huán)節(jié),也是提高軟件可靠性的關(guān)鍵。近年來(lái),面向?qū)ο筌浖_(kāi)發(fā)技術(shù)越來(lái)越成熟,并得到了廣泛應(yīng)用和深入的研究。面向?qū)ο蠹夹g(shù)所獨(dú)有的多態(tài)、繼承、封裝等新特點(diǎn),提高了軟件開(kāi)發(fā)的效率,但其程序設(shè)計(jì)比傳統(tǒng)語(yǔ)言程序設(shè)計(jì)產(chǎn)生錯(cuò)誤的可能性增大[1],給軟件測(cè)試帶來(lái)了前所未有的挑戰(zhàn)。
在進(jìn)行面向?qū)ο筌浖y(cè)試時(shí),如何選擇測(cè)試用例,如何生成測(cè)試用例集,測(cè)試究竟進(jìn)行到什么程度需要停止,這些都可以通過(guò)充分性準(zhǔn)則來(lái)指導(dǎo)[2]。隨著面向?qū)ο鬁y(cè)試技術(shù)的廣泛應(yīng)用,越來(lái)越多的人在研究測(cè)試準(zhǔn)則。測(cè)試覆蓋準(zhǔn)則包括行覆蓋、 分支覆蓋、 類(lèi)覆蓋、路徑覆蓋、狀態(tài)覆蓋、 遷移覆蓋、遷移對(duì)覆蓋、 全謂詞覆蓋、 全序列覆蓋等。文獻(xiàn)[3]給出了軟件單元測(cè)試的覆蓋充分性準(zhǔn)則。文獻(xiàn)[4]給出了UML狀態(tài)圖測(cè)試充分性準(zhǔn)則的公理化評(píng)估,并對(duì)UML狀態(tài)圖上的狀態(tài)覆蓋、 遷移覆蓋、 全謂詞覆蓋、N -遷移覆蓋和循環(huán)分類(lèi)覆蓋進(jìn)行了公理評(píng)估。文獻(xiàn)[5]給出了EFSM規(guī)范測(cè)試的基本遷移覆蓋準(zhǔn)則,并進(jìn)行了公理化評(píng)估。分析了該覆蓋準(zhǔn)則與基本MM路徑覆蓋測(cè)試覆蓋準(zhǔn)則之間的一些對(duì)應(yīng)關(guān)系。
這些研究不夠關(guān)注類(lèi)定義的語(yǔ)義,對(duì)驗(yàn)證和確認(rèn)環(huán)節(jié)也沒(méi)有給予足夠的重視,尤其是面向?qū)ο蠹夹g(shù)所獨(dú)有的多態(tài)、 繼承、 封裝等新特點(diǎn),產(chǎn)生了傳統(tǒng)語(yǔ)言設(shè)計(jì)所不存在的錯(cuò)誤可能性。因此,本文提出一種針對(duì)面向?qū)ο罄^承性的繼承覆蓋準(zhǔn)則,包括繼承方法覆蓋準(zhǔn)則、繼承屬性覆蓋準(zhǔn)則和子類(lèi)完全覆蓋準(zhǔn)則。這些準(zhǔn)則可以在面向?qū)ο筌浖^承關(guān)系類(lèi)圖中應(yīng)用,給面向?qū)ο鬁y(cè)試提供一定的指導(dǎo)作用。
面向?qū)ο罄^承性是指子類(lèi)繼承父類(lèi)的特征,包括重復(fù)使用父類(lèi)的屬性和方法,實(shí)現(xiàn)代碼復(fù)用。一個(gè)子類(lèi)可以不再編寫(xiě)相同的代碼,同時(shí)也可以重新定義一些屬性,重寫(xiě)一些方法。繼承的特征導(dǎo)致理解程序變得困難。在面向?qū)ο鬁y(cè)試中,必須對(duì)子類(lèi)進(jìn)行測(cè)試。顯然,對(duì)重新定義的屬性和方法也是必須測(cè)試的。往往在測(cè)試子類(lèi)時(shí)容易疏漏未重新定義的特征。例如:類(lèi)A有方法X,類(lèi)B是類(lèi)A的子類(lèi),X被繼承,對(duì)方法X的測(cè)試是必須的,并且測(cè)試用例要根據(jù)新的語(yǔ)境來(lái)重新設(shè)計(jì)。
1.1 繼承方法覆蓋準(zhǔn)則
1.1.1 更新方法覆蓋準(zhǔn)則
子類(lèi)的方法有三種:未重定義、重定義、新增方法。后兩種稱為更新方法。最基本最必要的是對(duì)子類(lèi)更新方法的測(cè)試,測(cè)試范圍最小,測(cè)試用例也是最少的。更新方法覆蓋準(zhǔn)則:類(lèi)圖中子類(lèi)的每一個(gè)更新方法都要設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試。不用再測(cè)試從父類(lèi)繼承下來(lái)的方法。
1.1.2 完全方法覆蓋準(zhǔn)則
不僅需要測(cè)試更新方法,還要在子類(lèi)環(huán)境中重新測(cè)試?yán)^承下來(lái)的方法。完全方法覆蓋準(zhǔn)則:對(duì)所有父類(lèi)和子類(lèi)的方法都要設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試。該覆蓋準(zhǔn)則比更新方法覆蓋范圍更廣,測(cè)試用例更多。更新方法覆蓋是完全方法覆蓋的子集。
1.2 繼承屬性覆蓋準(zhǔn)則
1.2.1 更新屬性覆蓋準(zhǔn)則
類(lèi)似于繼承性中的方法,繼承屬性也有三種:未重定義、重定義、新增屬性。更新屬性覆蓋準(zhǔn)則:類(lèi)圖中子類(lèi)的每一個(gè)更新屬性都要設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試。
1.2.2 完全屬性覆蓋準(zhǔn)則
完全屬性覆蓋準(zhǔn)則: 類(lèi)圖中子類(lèi)和父類(lèi)的每一個(gè)屬性都至少設(shè)計(jì)一個(gè)測(cè)試用例來(lái)測(cè)試。該準(zhǔn)則的測(cè)試用例集比更新屬性覆蓋更廣。更新屬性覆蓋是完全屬性覆蓋的子集。
1.3 子類(lèi)完全覆蓋準(zhǔn)則
子類(lèi)完全覆蓋準(zhǔn)則:類(lèi)圖中父類(lèi)和子類(lèi)的每一個(gè)方法和屬性都至少設(shè)計(jì)一個(gè)測(cè)試用例來(lái)測(cè)試。它包含了繼承方法覆蓋和繼承屬性覆蓋的測(cè)試用例集,是繼承類(lèi)測(cè)試覆蓋中最全面的準(zhǔn)則。
1.4 繼承性覆蓋準(zhǔn)則的應(yīng)用
例如:類(lèi)conveyance有三個(gè)子類(lèi)plane、vehicle、ship,子類(lèi)分別繼承conveyance類(lèi)的weight(載重量)屬性和transport(運(yùn)輸)、accelerate(加速)方法。三個(gè)子類(lèi)又有自己特有的屬性和方法,其中vehicle類(lèi)有兩個(gè)子類(lèi)train和automobile,兩種車(chē)輛的行駛方式不一樣,因此都重寫(xiě)了方法run。針對(duì)這個(gè)類(lèi)圖,應(yīng)用以上測(cè)試覆蓋準(zhǔn)則進(jìn)行生成測(cè)試用例指導(dǎo)。類(lèi)圖如圖1所示。
圖1 conveyance類(lèi)圖
1.4.1 繼承方法覆蓋準(zhǔn)則的應(yīng)用
繼承方法覆蓋準(zhǔn)則分為更新方法覆蓋準(zhǔn)則和完全方法覆蓋準(zhǔn)則2種。以vehicle類(lèi)及其子類(lèi)為例來(lái)應(yīng)用。
更新方法覆蓋準(zhǔn)則:(1)vehicle.run(),train.run(),automobile.run()執(zhí)行一遍即可滿足。對(duì)于vehicle類(lèi)僅執(zhí)行vehicle.run()可滿足。對(duì)于train類(lèi)執(zhí)行train.run()可滿足。對(duì)于automobile類(lèi)執(zhí)行automobile.run()可滿足。
完全方法覆蓋準(zhǔn)則:vehicle類(lèi):(2)vehicle.transport(),vehicle .accelerate (),vehicle.run()。train類(lèi):(3)train.transport(),train .accelerate (),train.run()。automobile類(lèi)與train類(lèi)類(lèi)似。
上述分析得出結(jié)論:覆蓋強(qiáng)度從小到大排列依次是:(1)、(2)、(3),基本能達(dá)到測(cè)試覆蓋要求的是:(3)。
1.4.2 繼承屬性覆蓋準(zhǔn)則應(yīng)用
繼承屬性覆蓋準(zhǔn)則分為更新屬性、完全屬性覆蓋準(zhǔn)則2種。以vehicle類(lèi)及其子類(lèi)為例應(yīng)用。
更新屬性覆蓋準(zhǔn)則:vehicle類(lèi):(4)vehicle.model。train類(lèi):(5)train.number,train.locomotive。
完全屬性覆蓋準(zhǔn)則:vehicle類(lèi):(6) vehicle.weight, vehicle.model 。train類(lèi):(7)train.weight, train.model,train.number, train.locomotive。
上述分析得出結(jié)論:(4)是(6)的子集,(5)是(7)的子集。(6)、(7)能達(dá)到滿意的覆蓋要求。
1.4.3 子類(lèi)完全覆蓋準(zhǔn)則應(yīng)用
由于子類(lèi)完全覆蓋準(zhǔn)則包含了繼承方法覆蓋和繼承屬性覆蓋的測(cè)試用例集,是這兩者的并集,所以可得出結(jié)論:vehicle類(lèi)完全方法集(2)和完全屬性集(6)的并集滿足vehicle子類(lèi)完全覆蓋準(zhǔn)則。train類(lèi)完全方法集(3)和完全屬性集(7)的并集滿足train子類(lèi)完全覆蓋準(zhǔn)則。
1.5 覆蓋準(zhǔn)則的評(píng)估和分析
對(duì)以上提出的繼承性類(lèi)測(cè)試覆蓋準(zhǔn)則,包括更新方法覆蓋、完全方法覆蓋、更新屬性覆蓋、完全屬性覆蓋和子類(lèi)完全覆蓋,共5種覆蓋準(zhǔn)則進(jìn)行公理化評(píng)估,常用的公理評(píng)估屬性有[4]:有限可用性,空集不充分性,單調(diào)性,最小固定尺寸性,完全性,代表性。評(píng)估結(jié)果見(jiàn)表1所示(√代表滿足,×代表不滿足)。
表1 測(cè)試覆蓋準(zhǔn)則的公理評(píng)估結(jié)果
通過(guò)評(píng)估可以得出結(jié)論:滿足公理較多的是完全方法覆蓋、完全屬性覆蓋以及子類(lèi)完全覆蓋3類(lèi)準(zhǔn)則。這三類(lèi)覆蓋準(zhǔn)則達(dá)到了對(duì)子類(lèi)的不同等級(jí)的測(cè)試要求,有較好的實(shí)用性。其它兩類(lèi)準(zhǔn)則覆蓋性較差。實(shí)際測(cè)試中往往只達(dá)到了更新方法和更新屬性這兩類(lèi)最基本的覆蓋,所以需要幾個(gè)測(cè)試準(zhǔn)則結(jié)合起來(lái)使用[6]。將這三類(lèi)準(zhǔn)則結(jié)合,滿足了基本的覆蓋,測(cè)試用例集也不是很大。
引入圖的思想來(lái)表示面向?qū)ο箨P(guān)系的表示,用點(diǎn)表示事物,連接兩點(diǎn)之間的線表示關(guān)系。類(lèi)圖中用三層矩形框表示類(lèi),用實(shí)線箭頭來(lái)表示關(guān)聯(lián)[7]。先定義三個(gè)類(lèi):Node類(lèi)和Edge類(lèi),Graph類(lèi), Node類(lèi)用來(lái)存放節(jié)點(diǎn)信息(包括Name、Kind、Attributename[MAXSIZE] 、Attributename[MAXSIZE]),Edge類(lèi)存放類(lèi)圖中繼承信息(包括fatherinfomation和soninformation)。Graph類(lèi)存放類(lèi)圖信息(Nodenumber、Edgenumber、Node[MAXSIZE]、Edge[MAXSIZE])。
根據(jù)公理化評(píng)估結(jié)論,完全屬性覆蓋和完全方法覆蓋比更新屬性覆蓋和更新方法覆蓋更實(shí)用,在測(cè)試時(shí)應(yīng)盡量達(dá)到完全方法和完全屬性覆蓋。本文針對(duì)完全方法覆蓋、完全屬性覆蓋和子類(lèi)完全覆蓋設(shè)計(jì)算法。
2.1 完全方法覆蓋算法
在完全方法覆蓋算法設(shè)計(jì)中,創(chuàng)建棧Fstack用來(lái)存放類(lèi)的方法,創(chuàng)建棧Hstrack用來(lái)存放回溯的類(lèi)節(jié)點(diǎn)。算法如圖2所示。
圖2 完全方法覆蓋算法圖
2.2 完全屬性覆蓋算法
在完全屬性覆蓋算法中,創(chuàng)建棧Sstack用來(lái)存放類(lèi)的屬性,創(chuàng)建棧Hstrack用來(lái)存放回溯的類(lèi)節(jié)點(diǎn)。算法如圖3所示。
圖3 完全屬性覆蓋準(zhǔn)則
2.3 子類(lèi)完全覆蓋算法
子類(lèi)完全覆蓋算法是完全屬性和完全方法覆蓋算法的并集。算法類(lèi)似圖3,定義Nstack棧存放屬性和方法。同時(shí)覆蓋Nstack中的屬性和方法就是滿足子類(lèi)完全覆蓋。
2.4 執(zhí)行結(jié)果及分析
針對(duì)conveyance類(lèi)圖,采用完全方法覆蓋算法以及完全屬性覆蓋算法的運(yùn)行結(jié)果分別見(jiàn)表2和表3。子類(lèi)完全覆蓋算法運(yùn)行結(jié)果即完全方法覆蓋結(jié)果和完全屬性覆蓋結(jié)果的并集。
表2 完全方法覆蓋結(jié)果
表3 完全屬性覆蓋結(jié)果
以上結(jié)果中,方法run()在train類(lèi)和automobile類(lèi)的完全方法和子類(lèi)完全覆蓋中有重復(fù)出現(xiàn),說(shuō)明在子類(lèi)中重寫(xiě)了該方法。weight屬性也是如此。以上結(jié)果數(shù)據(jù)中train為例分析結(jié)果,得到屬性集中屬性元素train.number,train.locomotive為train類(lèi)新增的屬性,train .model為繼承直接父類(lèi)vehicle的屬性,train.weight為祖先父類(lèi)的屬性。train類(lèi)對(duì)屬性的覆蓋滿足子類(lèi)完全覆蓋測(cè)試準(zhǔn)則。train.run()為vehicle類(lèi)重寫(xiě)的方法,train.transport() 、train.accelerate()為繼承祖先父類(lèi)conveyance的方法,train類(lèi)對(duì)方法的覆蓋滿足子類(lèi)完全覆蓋測(cè)試準(zhǔn)則。
通過(guò)以上分析方法可以對(duì)所有類(lèi)進(jìn)行分析,結(jié)果表明:(1)完全屬性覆蓋結(jié)果就是所有父類(lèi)的屬性集。(2)完全方法覆蓋結(jié)果就是所有父類(lèi)的方法集。(3)子類(lèi)完全覆蓋結(jié)果就是所有父類(lèi)的屬性集和方法集。(4)結(jié)果集合中,達(dá)到了相應(yīng)的完全屬性和完全方法覆蓋準(zhǔn)則。
本文在分析現(xiàn)有的面向?qū)ο筌浖y(cè)試覆蓋準(zhǔn)則的基礎(chǔ)上,基于類(lèi)的獨(dú)有特征,給出了基于繼承性的面向?qū)ο箢?lèi)測(cè)試覆蓋準(zhǔn)則,包括更新屬性覆蓋、完全屬性覆蓋、更新方法覆蓋、完全方法覆蓋、子類(lèi)完全覆蓋5類(lèi)準(zhǔn)則,并對(duì)5類(lèi)覆蓋準(zhǔn)則進(jìn)行了公理化評(píng)估,對(duì)滿足公理較多的完全方法覆蓋、完全屬性覆蓋及子類(lèi)完全覆蓋3類(lèi)準(zhǔn)則設(shè)計(jì)了算法,通過(guò)運(yùn)行結(jié)果分析本文設(shè)計(jì)的完全方法覆蓋算法、完全屬性覆蓋算法、子類(lèi)完全覆蓋算法,使其在設(shè)計(jì)測(cè)試用例時(shí)有一定的指導(dǎo)作用。
[1] 董潔,孫惠娟.軟件測(cè)試方法及面向?qū)ο筌浖臏y(cè)試[J].河南科技,2011(9):45-46.
[2] 楊志偉, 吳兵.基于UML狀態(tài)圖的軟件測(cè)試充分性準(zhǔn)則研究[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2013,23(8):43-51.
[3] ZHU H,HAIL P A V,MAY J H R.Softwmm unit test coverage and adequacy[J]. ACM Computing Surveys,1997,29(4):366-427.
[4] 繆淮扣, 費(fèi)立志.UML狀態(tài)圖測(cè)試充分性準(zhǔn)則的公理化評(píng)估[J].上海大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,13(5):489-496.
[5] 王曉峰.面向?qū)ο筌浖?EFSM規(guī)范測(cè)試覆蓋準(zhǔn)則比較[J].清華大學(xué)學(xué)報(bào) (自然科學(xué)版), 2011, 51( S1):1445-1450.
[6] 康嵐蘭.面向?qū)ο蟮能浖y(cè)試方法研究[J].計(jì)算機(jī)時(shí)代,2011(10):46-48.
[7] 康維.基于UML模型的類(lèi)簇級(jí)測(cè)試用例生成方法研究[D].長(zhǎng)沙:中南大學(xué),2009.
(責(zé)任編輯 陳葵晞)
廣西教育廳科研項(xiàng)目《基于類(lèi)語(yǔ)義的點(diǎn)態(tài)網(wǎng)狀軟件測(cè)試技術(shù)研究》(2013LX173);2013年廣西教育廳科研項(xiàng)目《面向?qū)ο髷?shù)據(jù)庫(kù)在本體存儲(chǔ)中的應(yīng)用研究》(2013LX172);廣西高校機(jī)器人與焊接技術(shù)重點(diǎn)實(shí)驗(yàn)室主任基金項(xiàng)目《基于安川焊接機(jī)器人的厚板多層多道焊接研究》(JQR2015ZR02);桂林航天工業(yè)學(xué)院科研項(xiàng)目《基于類(lèi)語(yǔ)義的點(diǎn)態(tài)網(wǎng)狀軟件測(cè)試技術(shù)研究》(X12Z006)、《基于小波變換的圖像邊緣檢測(cè)算法研究》(X11Z028)。
TP311.5
A
2095-4859(2016)03-0322-05
**作者簡(jiǎn)介:何金花,女,湖南瀏陽(yáng)人。講師,碩士。研究方向:軟件工程,軟件測(cè)試。