測(cè)試用例生成方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及一種測(cè)試用例生成方法和裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件也成為人們?nèi)粘9ぷ鞑豢苫蛉钡馁Y源。但隨著軟件開發(fā)技術(shù)的發(fā)展,軟件系統(tǒng)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度越來越高,由于軟件故障造成的危害也逐漸得以顯現(xiàn)。軟件質(zhì)量成為制約計(jì)算機(jī)發(fā)展的瓶頸之一。
[0003]面向?qū)ο蟪绦蛟O(shè)計(jì)作為一種具有結(jié)構(gòu)良好和更規(guī)范的編程風(fēng)格,極大地優(yōu)化了數(shù)據(jù)使用的安全性,提高了代碼的重用率,但另一方面也影響了軟件測(cè)試的方法和內(nèi)容,例如:封裝性對(duì)測(cè)試的影響、類的封裝機(jī)制給軟件測(cè)試帶來困難等。由于面向?qū)ο蟮能浖到y(tǒng)在運(yùn)行時(shí)由一組協(xié)調(diào)工作的對(duì)象組成,對(duì)象具有一定的狀態(tài)。所以對(duì)面向?qū)ο蟮某绦驕y(cè)試來說,對(duì)象的狀態(tài)是必須考慮的因素,測(cè)試應(yīng)涉及對(duì)象的初態(tài)、輸入?yún)?shù)、輸出參數(shù)、對(duì)象的終態(tài)。在工作過程中對(duì)象的狀態(tài)可能被修改,產(chǎn)生新的狀態(tài)。
[0004]面向?qū)ο筌浖y(cè)試的基本工作就是創(chuàng)建對(duì)象(包括初始化),向?qū)ο蟀l(fā)送一系列消息然后檢查結(jié)果對(duì)象的狀態(tài),看其是否處于正確的狀態(tài)。但是對(duì)象的狀態(tài)往往是隱蔽的,若類中未提供足夠的存取函數(shù)來表明對(duì)象的實(shí)現(xiàn)方式和內(nèi)部狀態(tài),則測(cè)試者必須增添這樣的函數(shù)。軟件測(cè)試是軟件質(zhì)量保證的重要環(huán)節(jié)之一,在軟件開發(fā)中有著不可替代的重要地位。因此,軟件測(cè)試的工作量很大。據(jù)統(tǒng)計(jì),測(cè)試時(shí)間會(huì)占到總開發(fā)時(shí)間的40%,一些可靠性要求非常高的軟件,測(cè)試時(shí)間甚至占到開發(fā)周期的60%。由于測(cè)試的許多操作和過程是重復(fù)性的,因此在整個(gè)軟件過程中軟件測(cè)試工作可以應(yīng)用自動(dòng)化方法實(shí)現(xiàn)。測(cè)試自動(dòng)化是通過開發(fā)和使用一些測(cè)試工具自動(dòng)測(cè)試軟件系統(tǒng),特別適合于測(cè)試中重復(fù)而繁瑣的活動(dòng),它可以使某些測(cè)試任務(wù)比手工測(cè)試執(zhí)行的效率高,并可以運(yùn)行更多更頻繁的測(cè)試。
[0005]對(duì)程序的新版本可以自動(dòng)運(yùn)行已有的測(cè)試,特別是在頻繁的修改過程中,一系列回歸測(cè)試的開銷應(yīng)是最小的。可以執(zhí)行一些手工測(cè)試?yán)щy或手工無法實(shí)現(xiàn)的測(cè)試,例如對(duì)于系統(tǒng)的并發(fā)測(cè)試,用手工進(jìn)行并發(fā)操作幾乎是不可能的,但自動(dòng)測(cè)試工具可以模擬大量并發(fā)輸入。測(cè)試具有一致性和可重復(fù)性。對(duì)于自動(dòng)重復(fù)的測(cè)試可以重復(fù)多次相同的測(cè)試,如不同的硬件配置、使用不同的操作系統(tǒng)或數(shù)據(jù)庫(kù)等,從而獲得測(cè)試的一致性,這在手工測(cè)試中是很難保證的。一旦一系列測(cè)試已經(jīng)被自動(dòng)化,則可以更快地重復(fù)執(zhí)行,從而縮短了測(cè)試周期,使軟件更快地推向市場(chǎng)。
[0006]近些年來,雖然軟件測(cè)試自動(dòng)化技術(shù)與方法有了很大的發(fā)展,但還遠(yuǎn)沒有成熟,現(xiàn)有的測(cè)試用例自動(dòng)生成技術(shù)還無法滿足當(dāng)前軟件測(cè)試的實(shí)際需要,大量的軟件測(cè)試工程師還淪陷在缺乏理論指導(dǎo)和實(shí)用測(cè)試工具的測(cè)試泥潭中。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供了一種測(cè)試用例生成方法和裝置,解決了測(cè)試用例自動(dòng)生成技術(shù)無法滿足當(dāng)前軟件測(cè)試的實(shí)際需要的問題。
[0008]一種測(cè)試用例生成方法,包括:
[0009]分別確定狀態(tài)集中各個(gè)不同于初始狀態(tài)的非初始狀態(tài)的唯一輸入輸出序列,以所述唯一輸入輸出序列作為對(duì)應(yīng)的非初始狀態(tài)的預(yù)測(cè)消息序列;
[0010]將每一個(gè)所述非初始狀態(tài)的預(yù)測(cè)消息序列置后,測(cè)試消息序列置前,組成的新的序列作為測(cè)試用例;
[0011 ] 將所述測(cè)試用例的UML狀態(tài)圖轉(zhuǎn)換為EDPN圖;
[0012]運(yùn)行所述EDPN圖,生成最終測(cè)試用例。
[0013]優(yōu)選的,分別確定狀態(tài)集中各個(gè)不同于初始狀態(tài)的非初始狀態(tài)的唯一輸入輸出序列具體為:
[0014]使用U1序列方法分別確定狀態(tài)集中各個(gè)不同于初始狀態(tài)的非初始狀態(tài)的唯一輸入輸出序列。
[0015]優(yōu)選的,將所述測(cè)試用例的UML狀態(tài)圖轉(zhuǎn)換為EDPN圖包括:
[0016]將所述UML狀態(tài)圖的團(tuán)點(diǎn)轉(zhuǎn)換為EDPN圖的數(shù)據(jù)地點(diǎn);
[0017]將所述UML狀態(tài)圖的狀態(tài)轉(zhuǎn)換為EDPN圖的EDPN轉(zhuǎn)移;
[0018]將所述UML狀態(tài)圖中與狀態(tài)轉(zhuǎn)移關(guān)聯(lián)的輸出轉(zhuǎn)換為EDPN圖的端口輸入事件地占.
[0019]對(duì)照測(cè)試的類,設(shè)計(jì)所述EDPN圖的樣本場(chǎng)景標(biāo)記。
[0020]優(yōu)選的,運(yùn)行所述EDPN圖,生成最終測(cè)試用例包括:
[0021]當(dāng)觸發(fā)一個(gè)轉(zhuǎn)移時(shí),從該轉(zhuǎn)移的每個(gè)輸入地點(diǎn)分別刪除一個(gè)標(biāo)記,且在該轉(zhuǎn)移的每個(gè)輸出地點(diǎn)增加一個(gè)標(biāo)記。
[0022]優(yōu)選的,被觸發(fā)的轉(zhuǎn)移的所有輸入地點(diǎn)包含一個(gè)以上的標(biāo)記。
[0023]本發(fā)明還提供了一種測(cè)試用例生成裝置,包括:
[0024]預(yù)測(cè)消息序列確定模塊,用于分別確定狀態(tài)集中各個(gè)不同于初始狀態(tài)的非初始狀態(tài)的唯一輸入輸出序列,以所述唯一輸入輸出序列作為對(duì)應(yīng)的非初始狀態(tài)的預(yù)測(cè)消息序列;
[0025]第一測(cè)試用例生成模塊,用于將每一個(gè)所述非初始狀態(tài)的預(yù)測(cè)消息序列置后,測(cè)試消息序列置前,組成的新的序列作為測(cè)試用例;
[0026]轉(zhuǎn)換模塊,用于將所述測(cè)試用例的UML狀態(tài)圖轉(zhuǎn)換為EDPN圖;
[0027]第二測(cè)試用例生成模塊,用于運(yùn)行所述EDPN圖,生成最終測(cè)試用例。
[0028]優(yōu)選的,所述轉(zhuǎn)換模塊包括:
[0029]第一轉(zhuǎn)換單元,用于將所述UML狀態(tài)圖的團(tuán)點(diǎn)轉(zhuǎn)換為EDPN圖的數(shù)據(jù)地點(diǎn);
[0030]第二轉(zhuǎn)換單元,用于將所述UML狀態(tài)圖的狀態(tài)轉(zhuǎn)換為EDPN圖的EDPN轉(zhuǎn)移;
[0031 ] 第三轉(zhuǎn)換單元,用于將所述UML狀態(tài)圖中與狀態(tài)轉(zhuǎn)移關(guān)聯(lián)的輸出轉(zhuǎn)換為EDPN圖的端口輸入事件地點(diǎn);
[0032]第四轉(zhuǎn)換單元,用于對(duì)照測(cè)試的類,設(shè)計(jì)所述EDPN圖的樣本場(chǎng)景標(biāo)記。
[0033]本發(fā)明提供了一種測(cè)試用例生成方法和裝置,分別確定狀態(tài)集中各個(gè)不同于初始狀態(tài)的非初始狀態(tài)的唯一輸入輸出序列,以所述唯一輸入輸出序列作為對(duì)應(yīng)的非初始狀態(tài)的預(yù)測(cè)消息序列,將每一個(gè)所述非初始狀態(tài)的預(yù)測(cè)消息序列置后,測(cè)試消息序列置前,組成的新的序列作為測(cè)試用例,將所述測(cè)試用例的UML狀態(tài)圖轉(zhuǎn)換為EDPN圖,運(yùn)行所述EDPN圖,生成最終測(cè)試用例。實(shí)現(xiàn)了測(cè)試用例的自動(dòng)生成,解決了測(cè)試用例自動(dòng)生成技術(shù)無法滿足當(dāng)前軟件測(cè)試的實(shí)際需要的問題。
【附圖說明】
[0034]圖1為樣本場(chǎng)景的標(biāo)記示意圖;
[0035]圖2為本發(fā)明的實(shí)施例二提供的一種測(cè)試用例生成裝置的結(jié)構(gòu)示意圖;
[0036]圖3為圖2中轉(zhuǎn)換模塊203的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0037]下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
[0038]本發(fā)明的實(shí)施例提供了一種測(cè)試用例生成方法和裝置,其實(shí)現(xiàn)原理如下:
[0039]在運(yùn)用EDPN模型生成測(cè)試用例的過程中,對(duì)EDPN做標(biāo)記,EDPN(P, D,S,In,Out)的一個(gè)標(biāo)記M,是一個(gè)P元組的序列M =〈ml, m2,…mp>,其中:p = k+n, k和η是端口事件集合P和數(shù)據(jù)地點(diǎn)集合D中的元素個(gè)數(shù),P元組中的個(gè)體項(xiàng)表示事件或數(shù)據(jù)地點(diǎn)中的標(biāo)記個(gè)數(shù),個(gè)體項(xiàng)的排列約定為:數(shù)據(jù)地點(diǎn)放在開頭,隨后是輸入地點(diǎn)和輸出地點(diǎn)。一個(gè)EDPN可以有任意數(shù)量的標(biāo)記,每個(gè)標(biāo)記對(duì)應(yīng)附圖中EDPN(網(wǎng)絡(luò))圖的一個(gè)執(zhí)行。EDPN中當(dāng)一個(gè)事件被允許發(fā)生、一個(gè)轉(zhuǎn)移被觸發(fā)時(shí),不應(yīng)該存在相同的輸出地點(diǎn)(不同元素的輸出地點(diǎn)不同),否則難以保證基于規(guī)約的預(yù)期結(jié)果,只要EDPN中一個(gè)轉(zhuǎn)移的每個(gè)輸入地點(diǎn)至少有一個(gè)標(biāo)記,該轉(zhuǎn)移才允許發(fā)生和被觸發(fā),EDPN的每一個(gè)標(biāo)記都是確定的,使得EDPN在執(zhí)行時(shí)存在轉(zhuǎn)移允許發(fā)生和觸發(fā)或者處于事件靜止?fàn)顟B(tài)。
[0040]擬將事件驅(qū)動(dòng)的EDPN模型的較好的耦合性以及與UML狀態(tài)圖類似的支持并發(fā)狀態(tài)的特點(diǎn)運(yùn)用到面向?qū)ο筌浖念悳y(cè)試技術(shù)中,研究解決以上問題的新的面向?qū)ο蟮念悳y(cè)試模型及測(cè)試用例自動(dòng)生成算法。根據(jù)這種算法,我們可以根據(jù)需要使用不同的編程語言來實(shí)現(xiàn)測(cè)試用例的自動(dòng)化生成?;贓DPN的狀態(tài)覆蓋率是類測(cè)試充分性的標(biāo)準(zhǔn)之一,能提高測(cè)試人員對(duì)測(cè)試質(zhì)量的信任度。利用U1法唯一輸入輸出序列(Unique Input OutputSequence, U1S)能唯一的識(shí)別一種狀態(tài),即對(duì)象處在該狀態(tài)時(shí)接收了對(duì)應(yīng)的WOS中的輸入時(shí),所產(chǎn)生的輸出不同于該狀態(tài)集中的任何其它狀態(tài)在接收此輸入時(shí)所產(chǎn)生的輸出,從無限的測(cè)試用例中選出有限的能達(dá)到覆蓋要求的測(cè)試用例。
[0041 ] 首先結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例一進(jìn)行說明。
[0042]本發(fā)明實(shí)施例提供了一種測(cè)試用例生成方法。
[0043]首先,使用U1法為各種輸入輸出狀態(tài)集合的狀態(tài)集中的每一個(gè)不同于初始狀態(tài)的狀態(tài)(以下稱為非初始狀態(tài))找到一個(gè)唯一輸入輸出序列作為預(yù)測(cè)消息序列,然后,為每一個(gè)非初始狀態(tài)找到一條從初始狀態(tài)到該狀態(tài)的測(cè)試消息序列,將每一個(gè)非初始狀態(tài)的預(yù)測(cè)消息序列置后,測(cè)試消息序列置前,組成的新的序列作為測(cè)試用例。
[0044]然后,將UML狀態(tài)圖轉(zhuǎn)換成EDPN圖,轉(zhuǎn)換時(shí)需要將狀態(tài)圖的“團(tuán)點(diǎn)”變成數(shù)據(jù)地點(diǎn),用圓圈表示;狀態(tài)轉(zhuǎn)移變成EDPN轉(zhuǎn)移,用小矩形表示;引起狀態(tài)轉(zhuǎn)移的事件成為端口輸入事件地點(diǎn),用三角形表示;與狀態(tài)轉(zhuǎn)移關(guān)聯(lián)的輸出變成端口輸出事件地點(diǎn),也用三角形表示。對(duì)照測(cè)試的類,列表描述EDPN中的元素,如基于事件驅(qū)動(dòng)的轉(zhuǎn)移、事件靜止?fàn)顟B(tài)、端口輸入輸出的事件等設(shè)計(jì)樣本場(chǎng)景標(biāo)記。樣本場(chǎng)景的標(biāo)記如圖1所示。然后描述樣本場(chǎng)景標(biāo)記,就可以生成一個(gè)測(cè)試用例。
[0045]最后,運(yùn)行EDPN,自動(dòng)生成測(cè)試用例。如附圖1,運(yùn)行EDPN必須遵循:只有當(dāng)一個(gè)轉(zhuǎn)移的所有輸入地點(diǎn)中至少有一個(gè)標(biāo)記(上表中用“I”表示),該轉(zhuǎn)移才允許發(fā)生;當(dāng)觸發(fā)一個(gè)轉(zhuǎn)移時(shí),要從該轉(zhuǎn)移的每個(gè)輸入地點(diǎn)分別刪除一個(gè)標(biāo)記,且在其每個(gè)輸出地點(diǎn)增加一個(gè)標(biāo)記。執(zhí)行時(shí),dl被初始化(步驟m0),網(wǎng)絡(luò)處于事件靜止?fàn)顟B(tài),如果事件tl發(fā)生(步驟ml),si允許發(fā)生,Si被觸發(fā),狀態(tài)被轉(zhuǎn)移到地點(diǎn)d31和d41,如果有輸出端口事件地點(diǎn),則產(chǎn)生相應(yīng)的輸出。此時(shí),d31和d41均增加一個(gè)標(biāo)記,同時(shí)dl的標(biāo)記被刪除。由于在UML狀態(tài)圖中,2是兩個(gè)并發(fā)狀態(tài)3和4,因而3.1和4.1同時(shí)被激活