專利名稱:一種基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測(cè)試領(lǐng)域,具體來(lái)說(shuō),涉及一種基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法。
背景技術(shù):
在軟件測(cè)試、ASIC驗(yàn)證過(guò)程中,需獲得代碼覆蓋率及功能覆蓋率的數(shù)據(jù)。雖然在該過(guò)程中可以達(dá)到100%的代碼覆蓋率,但僅憑這點(diǎn)尚不能確定所設(shè)計(jì)的被測(cè)試對(duì)象(DUT)已經(jīng)不存在問(wèn)題,因?yàn)楸挥?xùn)練的僅僅是代碼本身,尚不能判斷出是否已輸入了所有的激勵(lì)?是否接收了所有可能的結(jié)果?被測(cè)試對(duì)象的狀態(tài)是否均已被訪問(wèn)?所有的內(nèi)部轉(zhuǎn)換是否都已出現(xiàn)?等等。
針對(duì)這些問(wèn)題,業(yè)界提出了功能覆蓋的概念,功能覆蓋定義為來(lái)自設(shè)備和測(cè)試計(jì)劃規(guī)格的清晰的功能需求。所以功能覆蓋在度量實(shí)現(xiàn)上并不如代碼覆蓋率那么清晰和容易界定,代碼覆蓋率的度量在設(shè)計(jì)和測(cè)試激勵(lì)確定以后就唯一確定了,而功能覆蓋率的度量則因功能覆蓋率代碼的不同而不同。
在功能覆蓋率度量的實(shí)現(xiàn)上,由于功能覆蓋率來(lái)自于功能需求,目前功能需求(測(cè)試點(diǎn))都以文檔的方式來(lái)描述,因此,對(duì)于功能覆蓋率的度量方法,自然就想到在文檔上標(biāo)明功能點(diǎn),并輔之以相應(yīng)的測(cè)試用例,當(dāng)一個(gè)測(cè)試用例通過(guò)了,就表示該測(cè)試用例對(duì)應(yīng)的功能點(diǎn)被覆蓋了,于是在文檔上進(jìn)行標(biāo)記,最后測(cè)試人員根據(jù)文檔的標(biāo)記情況來(lái)統(tǒng)計(jì)整個(gè)測(cè)試項(xiàng)目的覆蓋率情況。
因此,對(duì)于功能覆蓋率的度量,在操作上,也可以利用EDA工具來(lái)對(duì)被測(cè)對(duì)象定義的功能覆蓋率進(jìn)行自動(dòng)的執(zhí)行和統(tǒng)計(jì),其一般是使用可執(zhí)行的語(yǔ)言描述功能需求的行為,再由仿真工具在仿真時(shí)自動(dòng)判斷所描述的功能需求是否覆蓋。
但在實(shí)際的驗(yàn)證過(guò)程中,要達(dá)到已定義的功能覆蓋率,按上述的實(shí)現(xiàn)方法,一般采用根據(jù)已定義好的功能覆蓋率目標(biāo),對(duì)要產(chǎn)生的激勵(lì)施加約束,通過(guò)隨機(jī)來(lái)達(dá)到目的。這需要編寫(xiě)大量的代碼,耗費(fèi)較大的編程工作。這種方法存在有如下的不足之處1、對(duì)單個(gè)輸入?yún)?shù)具有豐富的約束方式,但對(duì)多個(gè)參數(shù)之間的相互關(guān)系約束卻沒(méi)有很好的方式。而實(shí)際的功能覆蓋率目標(biāo)往往定義的是多個(gè)參數(shù)的組合情況。
2、針對(duì)功能覆蓋率目標(biāo)的隨機(jī)激勵(lì)產(chǎn)生需要編寫(xiě)較多的約束代碼,沒(méi)有專門(mén)針對(duì)組合、序列的約束方式,要達(dá)到功能覆蓋率目標(biāo)比較困難。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于,提供一種基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其可以對(duì)組合、序列情況提供專門(mén)的約束手段,在不需要增加任何約束的情況下,工具能根據(jù)功能覆蓋率目標(biāo),自動(dòng)產(chǎn)生隨機(jī)激勵(lì),直接完成功能覆蓋率目標(biāo)的覆蓋。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案在于提供一種基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法,其特征在于,包括定義一個(gè)激勵(lì)的數(shù)據(jù)結(jié)構(gòu)及測(cè)試對(duì)象;定義各類(lèi)別的功能覆蓋率,所述功能覆蓋率包括基本測(cè)試對(duì)象、組合測(cè)試對(duì)象及構(gòu)成序列的測(cè)試對(duì)象的功能覆蓋率;對(duì)組合測(cè)試對(duì)象設(shè)置組合約束,對(duì)構(gòu)成序列的測(cè)試對(duì)象設(shè)置序列約束;產(chǎn)生激勵(lì),對(duì)于組合測(cè)試對(duì)象首先生成正交組合,再產(chǎn)生其他組合;對(duì)于構(gòu)成序列的測(cè)試對(duì)象,自動(dòng)按其序列來(lái)產(chǎn)生激勵(lì)。在本發(fā)明的基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法中,進(jìn)一步包括根據(jù)功能覆蓋率目標(biāo)自動(dòng)施加組合或序列約束,產(chǎn)生隨機(jī)激勵(lì)。
在本發(fā)明的基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法中,進(jìn)一步包括所述組合約束和序列約束直接面向功能覆蓋率定義施加約束,或針對(duì)功能覆蓋率目標(biāo)任意定義。
在本發(fā)明的基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法中,對(duì)于組合測(cè)試對(duì)象生成正交組合的步驟中進(jìn)一步包括根據(jù)測(cè)試對(duì)象,建立相應(yīng)正交表,每個(gè)正交表中均包括參數(shù)數(shù)目、水平值和試驗(yàn)次數(shù);為某種測(cè)試需求,采用“匹配算法”,找出一種與該測(cè)試需求最接近的正交表;匹配到合適的正交表后,確定正交表中的所需要的試驗(yàn)數(shù)據(jù);并產(chǎn)生相應(yīng)的測(cè)試向量。
在本發(fā)明的基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法中,所述正交表包括含有單一的水平值的“單一型”正交表、含有兩種水平值的“混合2型”正交表及含有三種水平值的“混合3型”正交表。
實(shí)施本發(fā)明的基于功能覆蓋率的隨機(jī)激勵(lì)自動(dòng)產(chǎn)生的方法,具有以下有益效果本發(fā)明提供了新的組合約束和序列約束方式,使得隨機(jī)激勵(lì)的約束方式更加靈活,更容易達(dá)到功能覆蓋率的目標(biāo)。同時(shí),根據(jù)功能覆蓋率的目標(biāo),工具可以自動(dòng)完成隨機(jī)激勵(lì)的產(chǎn)生,大大簡(jiǎn)化了用戶編寫(xiě)約束代碼的工作量,使得隨機(jī)激勵(lì)的產(chǎn)生能夠向目標(biāo)收斂,增強(qiáng)了測(cè)試用例的有效性。
圖1是本發(fā)明中一種集成有功能覆蓋率度量模型的驗(yàn)證平臺(tái)示意圖;圖2是本發(fā)明中測(cè)試點(diǎn)的分解過(guò)程示意圖;圖3是本發(fā)明中功能覆蓋率度量模型中各個(gè)要素之間的關(guān)系示意圖。
具體實(shí)施例方式
如圖1所示,是本發(fā)明中一種集成有功能覆蓋率度量模型的驗(yàn)證平臺(tái)示意圖。功能覆蓋率統(tǒng)計(jì)模塊是其中最為重要的模塊,在此模塊中實(shí)現(xiàn)了本發(fā)明中的功能覆蓋率度量模型;在驗(yàn)證平臺(tái)的主控臺(tái)產(chǎn)生激勵(lì)和結(jié)果分析過(guò)程中,通過(guò)事件觸發(fā)功能覆蓋率統(tǒng)計(jì)模塊工作。
本發(fā)明中的功能覆蓋率統(tǒng)計(jì)是基于測(cè)試點(diǎn)(Testcase)的,測(cè)試點(diǎn)的分解過(guò)程如圖2所示。其中度量了一些基本要素,如測(cè)試對(duì)象(Object)及段(Segment)等等。
從被測(cè)試對(duì)象(DUT)的需求規(guī)格出發(fā)逐漸往下分解,首先根據(jù)需求規(guī)格分解出驗(yàn)證特性(Feature),即具有同一特征的規(guī)格的集合,然后在驗(yàn)證特性中分解測(cè)試點(diǎn)(Testcase),最后根據(jù)測(cè)試點(diǎn)來(lái)設(shè)計(jì)具體的測(cè)試用例(Test)。注意測(cè)試點(diǎn)和測(cè)試用例的關(guān)系是多對(duì)多的關(guān)系,即一個(gè)測(cè)試點(diǎn)可以對(duì)應(yīng)多個(gè)測(cè)試用例(多個(gè)測(cè)試用例可能都測(cè)試到了同一個(gè)測(cè)試點(diǎn)),一個(gè)測(cè)試用例同樣對(duì)應(yīng)多個(gè)測(cè)試點(diǎn)(一個(gè)測(cè)試用例中可能測(cè)試了多個(gè)測(cè)試點(diǎn))。
其中,測(cè)試對(duì)象(Object)其物理意義是邏輯某個(gè)功能處理所涉及到的、有明確物理意義的相關(guān)要素。分為基本(Basic)、組合(Cross)、序列(Sequence)三種類(lèi)型的測(cè)試對(duì)象。在大規(guī)模邏輯測(cè)試中,典型的測(cè)試對(duì)象實(shí)例有單個(gè)有明確物理意義的信號(hào)(如中斷信號(hào));輸入數(shù)據(jù)包中需要關(guān)心的域(如IP包中CRC域);輸入數(shù)據(jù)流抽象的特性參數(shù)(如包長(zhǎng));邏輯內(nèi)部或輸出某種處理;邏輯的某類(lèi)配置。
段(Segment)的物理意義是根據(jù)等價(jià)類(lèi)測(cè)試工程方法定義的,Object的所有可能出現(xiàn)的范圍,每一個(gè)范圍為一個(gè)Segment,當(dāng)Object實(shí)際取值落在某個(gè)已經(jīng)定義的范圍里面時(shí),稱該Segment被命中(Hit)1次;一個(gè)Object中可以包含一個(gè)或多個(gè)Segment,每個(gè)測(cè)試點(diǎn)(Testcase)中可以包含一個(gè)或多個(gè)Segment,其中這些Segment可以屬于不同的Object。
在大規(guī)模邏輯測(cè)試中,典型的Segment實(shí)例有中斷信號(hào)有效、無(wú)效;CRC對(duì)、錯(cuò);包長(zhǎng)長(zhǎng)包、短包、超長(zhǎng)包、超短包、典型長(zhǎng)度包;包過(guò)濾處理的所有路徑路徑1、路徑2、……輸出處理方式0、方式1、……如圖3所示,是本發(fā)明中功能覆蓋率度量模型中各個(gè)要素之間的關(guān)系示意圖。從該圖中可以看出,通過(guò)Segment將兩個(gè)層次聯(lián)系起來(lái)了,Segment是度量功能覆蓋率的基本元素。
下面具體介紹基于測(cè)試點(diǎn)的功能覆蓋率計(jì)算方法。
對(duì)于每個(gè)測(cè)試點(diǎn)(Testcase),在定義時(shí)驗(yàn)證人員會(huì)給一個(gè)重要級(jí)別(如分為高、中、低),每個(gè)級(jí)別對(duì)應(yīng)著一個(gè)權(quán)重(Weight)(如高為5,中為3,低為1),每個(gè)測(cè)試點(diǎn)中包含的Segment都有一個(gè)權(quán)重(Weight)屬性,該值即為所在測(cè)試點(diǎn)重要級(jí)別對(duì)應(yīng)權(quán)重值。通過(guò)對(duì)測(cè)試點(diǎn)定義重要級(jí)別,驗(yàn)證人員可以對(duì)每個(gè)測(cè)試點(diǎn)的重要程度進(jìn)行區(qū)分,可以指導(dǎo)驗(yàn)證人員設(shè)計(jì)測(cè)試用例,決定驗(yàn)證人員的測(cè)試策略。
從圖3可以看出,基于測(cè)試點(diǎn)的層次(下面方框內(nèi))共有四個(gè)層次,分別是段(Segment)、測(cè)試點(diǎn)(Testcase)、特性(Feature)、被測(cè)試對(duì)象(DUT),對(duì)這四個(gè)層次分別計(jì)算覆蓋率情況,具體以得分(Score)量化,得分的取值范圍為0到1之間(包括0和1),得分為1時(shí)稱之為完全覆蓋到或達(dá)到了目標(biāo),得分為0時(shí)稱之為完全沒(méi)有覆蓋到或完全沒(méi)有達(dá)到目標(biāo),介于0和1之間稱之為部分覆蓋到或部分達(dá)到目標(biāo)。
Segment、Testcase、Feature、DUT四個(gè)層次的功能覆蓋率的計(jì)算公式完全一致,都以其包含的Segment的得分(Score)和權(quán)重(Weight)為基礎(chǔ)。對(duì)于Testcase和Feature,還有是否通過(guò)的標(biāo)志(Pass)計(jì)算,對(duì)于DUT而言,還有測(cè)試點(diǎn)通過(guò)率(PassRatio)的計(jì)算。這四個(gè)層次的功能覆蓋率計(jì)算公式分別描述如下層次一Segment的功能覆蓋率Score(Segment)=min(1.00,Hits(Segment)/Goal(Segment))層次二Testcase的功能覆蓋率Score(Testcase)=∑(Score(Segment)*Weight(Segment))/∑(Weight(Segment))Pass(Testcase)=(Score(Tests)=1)?1:0層次三Feature的功能覆蓋率Score(Feature)=∑(Score(Segment)*Weight(Segment))/∑(Weight(Segment))Pass(Feature)=(Score(Tests)=1)?1:0層次四DUT的功能覆蓋率Score(DUT)=∑(Score(Segment)*Weight(Segment))/∑(Weight(Segment))測(cè)試點(diǎn)通過(guò)率PassRatio(Testcase)=(通過(guò)的測(cè)試點(diǎn)數(shù)目)/(測(cè)試點(diǎn)總數(shù))通過(guò)分層次計(jì)算功能覆蓋率(得分),驗(yàn)證人員可以了解到在每個(gè)層次的功能覆蓋情況,根據(jù)功能覆蓋情況可以設(shè)計(jì)特定的測(cè)試用例來(lái)提高功能覆蓋率。
從上面的敘述中可以看出,功能覆蓋率可以通過(guò)三種類(lèi)型的object(測(cè)試對(duì)象)Basic object(基本測(cè)試對(duì)象)、Cross object(組合測(cè)試對(duì)象)、Sequence object(構(gòu)成序列的測(cè)試對(duì)象)來(lái)描述。下面是針對(duì)這三種object的示例。
首先對(duì)Object進(jìn)行定義//定義一個(gè)激勵(lì)的數(shù)據(jù)結(jié)構(gòu)struct Stimulator{bit 3Op{Add,Sub JP}bit 5DataAbit 8DataB}//定義測(cè)試對(duì)象object Stimulator.OpAddSubJPobject Stimulator.DataA0..1516..31object Stimulator.DataB0..6364..127128..191192..255//定義三類(lèi)功能覆蓋率testcase1 type:basic//定義basic objectStimulator.Op(Add,Sub,JP)goal:1testcase2 type:cross//定義cross objectStimulator.Op(Add,Sub,JP)Stimulator.DataA(0..15,16..31)goal:1testcase3 type:sequence //定義sequence objectStimulator.Op(2*Add,4..5*Sub,JP)goal:1在現(xiàn)有的方法中,要達(dá)到上述三種類(lèi)型的功能覆蓋率testcase1、testcase2、testcase3,使用已有的方法需要對(duì)其分別施加約束。
//針對(duì)testcase1的約束testcase1 type:basic//定義basic objectStimulator.Op(Add,Sub,JP)goal:1
keep Stimulator.Op Addkeep Stimulator.Op Subkeep Stimulator.Op JP//針對(duì)testcase2的約束testcase2 type:cross//定義cross objectStimulator.Op(Add,Sub,JP)Stimulator.DataA(0..15,16..31)goal:1keep Stimulator.Op Addkeep Stimulator.DataA 0..15keep Stimulator.Op Addkeep Stimulator.DataA 16..31keep Stimulator.Op Subkeep Stimulator.DataA 0..15keep Stimulator.Op Subkeep Stimulator.DataA 16..31keep Stimulator.Op JPkeep Stimulator.DataA 0..15keep Stimulator.Op JPkeep Stimulator.DataA 16..31//針對(duì)testcase3的約束testcase3 type:sequence //定義sequence objectStimulator.Op(2*Add,4..5*Sub,JP)goal:1keep Stimulator.Op Addkeep Stimulator.Op Addkeep Stimulator.Op Subkeep Stimulator.Op Subkeep Stimulator.Op Subkeep Stimulator.Op Subkeep Stimulator.Op JP上述是針對(duì)功能覆蓋率定義直接施加約束產(chǎn)生激勵(lì)的方法,這種方法需要編寫(xiě)較多的代碼。
當(dāng)然也可以不加約束,通過(guò)完全隨機(jī)的方式產(chǎn)生激勵(lì)。但其最后的覆蓋率目標(biāo)的達(dá)成結(jié)果無(wú)法預(yù)知,某些情況可能永遠(yuǎn)無(wú)法達(dá)到。
而在本發(fā)明中,可以采用EDA工具來(lái)支持下面的組合約束方式和序列約束方式,可以實(shí)現(xiàn)testcase1、testcase2和testcase3的功能覆蓋率目標(biāo)。(注可以將testcase1看作是testcase2的一個(gè)特例)。如下述//針對(duì)testcase2的約束testcase2 type:cross //定義cross objectStimulator.Op(Add,Sub,JP)Stimulator.DataA(0..15,16..31)goal:1//組合約束keep crossStimulator.Op(Add,Sub,JP)Stimulator.DataA(0..15,16..31)//針對(duì)testcase3的約束testcase3 type:sequence //定義sequence objectStimulator.Op(2*Add,4..5*Sub,JP)goal:1//序列約束keep serialStimulator.Op(2*Add,4..5*Sub,JP)針對(duì)testcase2的組合,共有6種組合(Add,Sub,JP)*(0..15,16..31),暫且將這6種組合定義為0..5,首先將這6種組合中的正交組合的編號(hào)放在前面,其余的放在后面,在產(chǎn)生激勵(lì)時(shí),先產(chǎn)生正交組合,再產(chǎn)生其他組合。在組合數(shù)目較少的情況下還看不出很大的意義,當(dāng)組合數(shù)目很龐大時(shí),其有效性將得到很大體現(xiàn)。
針對(duì)testcase3的序列,工具可以自動(dòng)按這種序列來(lái)產(chǎn)生。
其中,所述產(chǎn)生正交組合的過(guò)程包括,首先,根據(jù)測(cè)試的實(shí)際需要,建立相應(yīng)的正交表。
單個(gè)正交表有三個(gè)基本參數(shù)參數(shù)數(shù)目N、水平值M和試驗(yàn)次數(shù)L。在建立正交表時(shí),我們一般建立如下三種正交表。
如果只有單一的水平值,我們稱之為“單一型”正交表,如
L8-2^7水平值為2,參數(shù)數(shù)目為7,試驗(yàn)次數(shù)為8如果有兩種水平值,則稱為“混合2型”正交表,如L36-6^3-3^7水平值一為6,參數(shù)數(shù)目一為3,水平值二為3,參數(shù)數(shù)目二為7,試驗(yàn)次數(shù)為36同樣,對(duì)于三種水平值的情況,則稱為“混合3型”正交表,如L72-4^1-3^24-2^20水平值一為4,參數(shù)數(shù)目一為1,水平值二為3,參數(shù)數(shù)目二為24,水平值三為2,參數(shù)數(shù)目三為20,試驗(yàn)次數(shù)為72不同的參數(shù)數(shù)目和不同的取值數(shù)目對(duì)應(yīng)有不同的正交表。由于不同的正交表沒(méi)有一個(gè)統(tǒng)一的算法,需要事先算出相應(yīng)的正交表,然后根據(jù)實(shí)際需要查找對(duì)應(yīng)的正交表?,F(xiàn)在的問(wèn)題是,可以事先存入的正交表數(shù)目是有限的,不可能事先算出所有可能出現(xiàn)的正交表,這就是說(shuō),對(duì)于某種測(cè)試需求,在查找正交表時(shí),可能查找不到正好適合的正交表,這就需要采用“匹配算法”,對(duì)不同取值數(shù)目的參數(shù)進(jìn)行“合并”,找到一種與該測(cè)試需求最接近的正交表。
這種“匹配算法”可以通過(guò)以下三種算法來(lái)實(shí)現(xiàn)“查找算法(找算法)”、“漲算法”和“湊算法”。
“查找算法”是指查找到水平值相等、參數(shù)數(shù)目大于等于輸入?yún)?shù)數(shù)目的正交表;“漲算法”是指對(duì)水平值進(jìn)行加1的算法;“湊算法”是將兩個(gè)或多個(gè)水平值“湊”在一起,其中最大的水平值作為“湊”后的水平值,同時(shí)將其對(duì)應(yīng)的參數(shù)數(shù)目相加作為“湊”后的參數(shù)數(shù)目。
這三種算法交互使用,共同完成匹配查找。下面以水平值最大為7為例,來(lái)描述這種匹配算法。
找、漲、湊算法“漲”算法指水平值反復(fù)加1,直到水平值達(dá)到7“查找”算法“查找”算法中僅包括“漲”操作,而無(wú)“湊”算法注查找到指水平值相等,參數(shù)數(shù)目大于等于輸入?yún)?shù)數(shù)目A、單一型“查找”算法先在單一型索引表中查找水平值和參數(shù)數(shù)目if(水平值和參數(shù)數(shù)目符合){查找到正確返回;}else//不符合{對(duì)水平值執(zhí)行“漲”算法,直到7,在單一型索引表中進(jìn)行反復(fù)查找;if(查找到){以試驗(yàn)數(shù)目最少的返回;}else//查找不到{查找失敗返回;}}B、混合2型“查找”算法先查找高水平值和參數(shù)數(shù)目if(高水平值和參數(shù)數(shù)目符合){再查找低水平值和參數(shù)數(shù)目;if(查不到){對(duì)低水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){查找到正確返回;}else//查找不到{查找失敗返回;}}else//查到{
查找到正確返回;}}else//不符合{對(duì)高水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){再查找低水平值和參數(shù)數(shù)目if(查不到){對(duì)低水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){查找到正確返回;}else//查找不到{查找失敗返回;}}else//查到{查找到正確返回;}}else//查找不到{查找失敗返回;}}C、混合3型“查找”算法先查找高水平值和參數(shù)數(shù)目if(高水平值和參數(shù)數(shù)目符合){再查找中水平值和參數(shù)數(shù)目;if(查不到){對(duì)中水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){再查找低水平值和參數(shù)數(shù)目if(查不到){對(duì)低水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;
if(查找到){查找到正確返回;}else//查找不到{查找失敗返回;}}else//查到{查找到正確返回;}}else//查找不到{查找失敗返回;}}else//查到{查找到正確返回;}}else//不符合{對(duì)高水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){再查找中水平值和參數(shù)數(shù)目if(查不到){對(duì)中水平值執(zhí)行“漲”算法,直到7,進(jìn)行反復(fù)查找;if(查找到){再查找低水平值和參數(shù)數(shù)目if(查不到){對(duì)低水平值執(zhí)行“漲”算法,進(jìn)行反復(fù)查找;if(查找到){查找到正確返回;}else//查找不到{查找失敗返回;
}}else//查到{查找到正確返回;}}else//查找不到{查找失敗返回;}}else//查到{查找到正確返回;}}else//查找不到{查找失敗返回;}}“湊”算法“湊”指小水平值向大水平值“湊”A、對(duì)于混合2型的“湊”法在混合2型中查找if(查找到){查找到正確返回;}else//未查找到{兩個(gè)相“湊”,在單一型索引表中查找;if(查找到){查找到正確返回;}else//查找不到{查找失敗返回;}}B、對(duì)于混合3型的“湊”法先進(jìn)行兩兩相“湊”,再分別對(duì)每種“湊”的結(jié)果通過(guò)混合2型“查找”算法進(jìn)行查找(要保留“湊”的結(jié)果)。在混合3型中查找if(查找到){查找到正確返回;}else//未查找到{兩兩相“湊”在混合2型中查找;1、湊的結(jié)果1在混合2型中查找;2、湊的結(jié)果2在混合2型中查找;3、湊的結(jié)果3在混合2型中查找;if(查找到){以試驗(yàn)數(shù)目最少的返回;}else//查找不到{三個(gè)相“湊”在單一型索引表中查找if(查找到){查找到正確返回;}{查找失敗返回;}}}C、對(duì)于混合4型的“湊”法進(jìn)行兩兩相“湊”(共6種),“湊”成混合3型,再按混合3型進(jìn)行處理D、對(duì)于混合5型的“湊”法進(jìn)行三三相“湊”(共10種),“湊”成混合3型,再按混合3型進(jìn)行處理E、對(duì)于混合6型的“湊”法進(jìn)行四四相“湊”(共15種),“湊”成混合3型,再按混合3型進(jìn)行處理當(dāng)匹配到合適的正交表后,還需根據(jù)匹配過(guò)程中的“湊”、“漲”的情況確定正交表中哪些試驗(yàn)數(shù)據(jù)是需要的。
其次,對(duì)于每個(gè)參數(shù),將其分為若干個(gè)等效段,每個(gè)等效段作為該參數(shù)的一種取值;當(dāng)選中某個(gè)等效段時(shí),再按隨機(jī)的方式取該段中的某個(gè)具體的值。
最后,在產(chǎn)生測(cè)試向量時(shí),只需指定哪些參數(shù)需要進(jìn)行正交,軟件工具將查找到相應(yīng)的正交表,然后根據(jù)正交表自動(dòng)產(chǎn)生相應(yīng)數(shù)目的測(cè)試向量。比如對(duì)于三參數(shù)三種取值的各種組合(27種),A(A1,A2,A3)×B(B1,B2,B3)×C(C1,C2,C3),軟件自動(dòng)選取其中的9種組合作為測(cè)試向量。
同樣,在定義測(cè)試覆蓋率目標(biāo)時(shí),將正交表定義的組合情況作為覆蓋的首要目標(biāo),命中這些目標(biāo),其覆蓋率得分就高。在本發(fā)明中,在不施加任何約束的情況下,工具還可以根據(jù)功能覆蓋率目標(biāo)自動(dòng)施加上述約束,產(chǎn)生隨機(jī)激勵(lì),其實(shí)現(xiàn)方法同上,所不同的是,當(dāng)這些組合全部產(chǎn)生后,以后的激勵(lì)按完全隨機(jī)的方式來(lái)產(chǎn)生。
上述新增的兩種方法具有獨(dú)立性,組合約束和序列約束可以直接面向功能覆蓋率定義來(lái)施加約束,也可以不針對(duì)功能覆蓋率目標(biāo)任意定義,具有較高的靈活性。
工具自動(dòng)完成的實(shí)現(xiàn)方法是直接按功能覆蓋率目標(biāo)定義來(lái)產(chǎn)生隨機(jī)激勵(lì)的,其針對(duì)性更強(qiáng),目標(biāo)更明確,用戶編程的工作量更小,可以不額外增加任何約束代碼。
權(quán)利要求
1.一種基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其特征在于,包括定義激勵(lì)的數(shù)據(jù)結(jié)構(gòu)及測(cè)試對(duì)象;定義功能覆蓋率,所述功能覆蓋率包括基本測(cè)試對(duì)象、組合測(cè)試對(duì)象及構(gòu)成序列的測(cè)試對(duì)象的功能覆蓋率;對(duì)組合測(cè)試對(duì)象設(shè)置組合約束,對(duì)構(gòu)成序列的測(cè)試對(duì)象設(shè)置序列約束;產(chǎn)生激勵(lì),對(duì)于組合測(cè)試對(duì)象首先生成正交組合,再產(chǎn)生其他組合;對(duì)于構(gòu)成序列的測(cè)試對(duì)象,自動(dòng)按其序列產(chǎn)生激勵(lì)。
2.根據(jù)權(quán)利要求1所述的基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其特征在于,進(jìn)一步包括根據(jù)功能覆蓋率目標(biāo)自動(dòng)施加組合或序列約束,產(chǎn)生隨機(jī)激勵(lì)。
3.根據(jù)權(quán)利要求2所述的基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其特征在于,進(jìn)一步包括所述組合約束和序列約束直接面向功能覆蓋率定義施加約束,或針對(duì)功能覆蓋率目標(biāo)任意定義。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其特征在于,在組合測(cè)試對(duì)象生成正交組合的步驟中進(jìn)一步包括根據(jù)測(cè)試對(duì)象,建立相應(yīng)正交表,每個(gè)正交表中均包括參數(shù)數(shù)目、水平值和試驗(yàn)次數(shù);根據(jù)測(cè)試需求,采用“匹配算法”,找出與該測(cè)試需求最接近的正交表;確定正交表中的所需要的試驗(yàn)數(shù)據(jù),并產(chǎn)生相應(yīng)的測(cè)試向量。
5.根據(jù)權(quán)利要求4所述的基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生方法,其特征在于,所述正交表包括含有單一的水平值的“單一型”正交表、含有兩種水平值的“混合2型”正交表及含有三種水平值的“混合3型”正交表。
全文摘要
本發(fā)明涉及一種基于功能覆蓋率的隨機(jī)激勵(lì)的自動(dòng)產(chǎn)生的方法,包括定義激勵(lì)的數(shù)據(jù)結(jié)構(gòu)及測(cè)試對(duì)象;定義各類(lèi)別的功能覆蓋率,所述功能覆蓋率包括基本測(cè)試對(duì)象、組合測(cè)試對(duì)象及構(gòu)成序列的測(cè)試對(duì)象的功能覆蓋率;對(duì)組合測(cè)試對(duì)象設(shè)置組合約束,對(duì)構(gòu)成序列的測(cè)試對(duì)象設(shè)置序列約束;產(chǎn)生激勵(lì),對(duì)于組合測(cè)試對(duì)象首先生成正交組合,再產(chǎn)生其他組合;對(duì)于構(gòu)成序列的測(cè)試對(duì)象,自動(dòng)按其序列來(lái)產(chǎn)生激勵(lì)。本發(fā)明使隨機(jī)激勵(lì)的約束方式更加靈活,更容易達(dá)到功能覆蓋率的目標(biāo)。同時(shí),根據(jù)功能覆蓋率的目標(biāo),工具可以自動(dòng)完成隨機(jī)激勵(lì)的產(chǎn)生,可簡(jiǎn)化了用戶編寫(xiě)約束代碼的工作量,使得隨機(jī)激勵(lì)的產(chǎn)生能夠向目標(biāo)收斂,增強(qiáng)了測(cè)試用例的有效性。
文檔編號(hào)G06F11/36GK1873625SQ20051003678
公開(kāi)日2006年12月6日 申請(qǐng)日期2005年8月19日 優(yōu)先權(quán)日2005年8月19日
發(fā)明者易敏, 王進(jìn)成, 程智輝, 王萬(wàn)財(cái) 申請(qǐng)人:華為技術(shù)有限公司