本申請(qǐng)要求于2015年6月26日提交的中國(guó)專利申請(qǐng)?zhí)?01510364946.0的優(yōu)先權(quán)。
技術(shù)領(lǐng)域
本公開(kāi)的實(shí)施例涉及軟件測(cè)試領(lǐng)域,并且更具體地,涉及用于測(cè)試代碼的測(cè)試代碼的方法、設(shè)備和計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
軟件測(cè)試指的是在預(yù)設(shè)條件下運(yùn)行軟件產(chǎn)品的代碼,以評(píng)估運(yùn)行結(jié)果是否符合預(yù)期。軟件測(cè)試人員可以通過(guò)設(shè)計(jì)測(cè)試用例來(lái)模擬特定運(yùn)行條件,并且然后利用測(cè)試用例對(duì)軟件產(chǎn)品進(jìn)行測(cè)試。測(cè)試用例可以與軟件產(chǎn)品的代碼中的多個(gè)測(cè)試點(diǎn)(例如,代碼中包括的變量)相關(guān)聯(lián)。在不同的測(cè)試用例中,多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)可以被指派不同的測(cè)試值。
隨著軟件規(guī)模的不斷增大和軟件復(fù)雜性的日益增加,在軟件產(chǎn)品測(cè)試時(shí)需要考慮的測(cè)試點(diǎn)數(shù)量持續(xù)增長(zhǎng),這進(jìn)而導(dǎo)致軟件產(chǎn)品測(cè)試用例的數(shù)量也成指數(shù)增加,加劇了軟件測(cè)試的復(fù)雜度。傳統(tǒng)方案無(wú)法在測(cè)試的覆蓋率和測(cè)試效率之間取得令人滿意的平衡。
技術(shù)實(shí)現(xiàn)要素:
本公開(kāi)的實(shí)施例提供一種測(cè)試軟件產(chǎn)品的代碼的方案。
根據(jù)本公開(kāi)的第一方面,提供了一種測(cè)試代碼的方法。該方法包括標(biāo)識(shí)代碼中的多個(gè)測(cè)試點(diǎn)以及將要被指派多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值。多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)將被指派以兩個(gè)或更多測(cè)試值。 該方法還包括將一個(gè)目標(biāo)測(cè)試用例與測(cè)試用例集進(jìn)行比較。目標(biāo)測(cè)試用例和測(cè)試用例集均與多個(gè)測(cè)試點(diǎn)相關(guān)聯(lián)。該方法進(jìn)一步包括響應(yīng)于確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于測(cè)試用例集中,將目標(biāo)測(cè)試用例排除在測(cè)試用例集之外。這方面實(shí)施例還包括相應(yīng)的計(jì)算機(jī)程序產(chǎn)品。
根據(jù)本公開(kāi)的第二方面,提供了一種用于測(cè)試代碼的設(shè)備。該設(shè)備包括至少一個(gè)處理單元。該至少一個(gè)處理單元被配置為標(biāo)識(shí)代碼中的多個(gè)測(cè)試點(diǎn)以及將要被指派多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值。多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)將被指派以兩個(gè)或更多測(cè)試值。該至少一個(gè)處理單元還被配置為將一個(gè)目標(biāo)測(cè)試用例與測(cè)試用例集進(jìn)行比較。目標(biāo)測(cè)試用例和測(cè)試用例集均與多個(gè)測(cè)試點(diǎn)相關(guān)聯(lián)。該至少一個(gè)處理單元進(jìn)一步被配置為響應(yīng)于確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于測(cè)試用例集中,將目標(biāo)測(cè)試用例排除在測(cè)試用例集之外。
提供發(fā)明內(nèi)容部分是為了簡(jiǎn)化的形式來(lái)介紹對(duì)概念的選擇,它們?cè)谙挛牡木唧w實(shí)施方式中將被進(jìn)一步描述。發(fā)明內(nèi)容部分無(wú)意標(biāo)識(shí)本公開(kāi)的關(guān)鍵特征或主要特征,也無(wú)意限制本公開(kāi)的范圍。
附圖說(shuō)明
通過(guò)結(jié)合附圖對(duì)本公開(kāi)示例性實(shí)施例進(jìn)行更詳細(xì)的描述,本公開(kāi)的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯,其中,在本公開(kāi)示例性實(shí)施例中,相同的參考標(biāo)號(hào)通常代表相同部件。
圖1示出了根據(jù)本公開(kāi)的一個(gè)實(shí)施例的測(cè)試代碼的過(guò)程的流程圖;
圖2示出了根據(jù)本公開(kāi)的一個(gè)實(shí)施例的用于測(cè)試代碼的系統(tǒng)的框圖;
圖3示出了根據(jù)本公開(kāi)的一個(gè)實(shí)施例的用于測(cè)試代碼的設(shè)備的結(jié)構(gòu)框圖;以及
圖4示出了可以用來(lái)實(shí)施本公開(kāi)內(nèi)容的實(shí)施例的示例設(shè)備的示意 性框圖。
具體實(shí)施方式
下面將參考附圖中示出的若干示例實(shí)施例來(lái)描述本公開(kāi)的原理。雖然附圖中顯示了本公開(kāi)的優(yōu)選實(shí)施例,但應(yīng)當(dāng)理解,描述這些實(shí)施例僅是為了使本領(lǐng)域技術(shù)人員能夠更好地理解進(jìn)而實(shí)現(xiàn)本公開(kāi),而并非以任何方式限制本公開(kāi)的范圍。
在常規(guī)的軟件測(cè)試過(guò)程中,可能涉及如下多個(gè)方面的工作:
(1)軟件測(cè)試人員根據(jù)軟件產(chǎn)品的使用情況和功能說(shuō)明并且可以在軟件開(kāi)發(fā)團(tuán)隊(duì)的協(xié)助下,標(biāo)識(shí)出軟件產(chǎn)品的代碼中的測(cè)試點(diǎn)以及與測(cè)試點(diǎn)對(duì)應(yīng)的測(cè)試值。
(2)軟件測(cè)試人員設(shè)計(jì)多個(gè)測(cè)試用例以針對(duì)所有測(cè)試點(diǎn)將所有測(cè)試值進(jìn)行迭代。通常,軟件測(cè)試人員每次將會(huì)針對(duì)特定的測(cè)試點(diǎn)設(shè)計(jì)一個(gè)或多個(gè)測(cè)試用例,以覆蓋該測(cè)試點(diǎn)的測(cè)試值。在這些測(cè)試用例中,其他測(cè)試點(diǎn)可能會(huì)被指派固定的測(cè)試值。
(3)針對(duì)所有測(cè)試點(diǎn)設(shè)計(jì)好的測(cè)試用例集將提供至測(cè)試系統(tǒng),用于測(cè)試軟件產(chǎn)品的代碼。這個(gè)測(cè)試過(guò)程可以在測(cè)試系統(tǒng)上自動(dòng)進(jìn)行。可以依據(jù)每個(gè)測(cè)試用例來(lái)執(zhí)行一次代碼,并且判斷執(zhí)行結(jié)果是否符合預(yù)期。
(4)在測(cè)試過(guò)程完成之后,確定代碼覆蓋率,以便判斷該測(cè)試過(guò)程是否充分。代碼覆蓋率用于度量在本次測(cè)試過(guò)程中軟件產(chǎn)品中的被執(zhí)行的代碼行的數(shù)量。
(5)在集成步驟之后,所有測(cè)試用例被固定下來(lái)并且軟件測(cè)試進(jìn)入維護(hù)模式。之后,除了某些基于確定的代碼缺陷獲得的測(cè)試用例之外,將不再添加新的測(cè)試用例。因此,當(dāng)需要再次測(cè)試該產(chǎn)品時(shí),只有這些已有的測(cè)試用例會(huì)被使用。
發(fā)明人通過(guò)研究發(fā)現(xiàn),上述軟件測(cè)試過(guò)程存在如下問(wèn)題和不足:
(1)由于軟件測(cè)試人員在設(shè)計(jì)測(cè)試用例時(shí)的局限性,多個(gè)測(cè)試用例在用于測(cè)試代碼時(shí)可能會(huì)涉及相同的測(cè)試操作。例如,在針對(duì)特 定測(cè)試點(diǎn)設(shè)計(jì)的多個(gè)測(cè)試用例之中,如果僅該測(cè)試點(diǎn)的測(cè)試值發(fā)生變化而其他測(cè)試點(diǎn)總是被指派相同的測(cè)試值,那么這些測(cè)試點(diǎn)的相同測(cè)試點(diǎn)的組合總是被重復(fù)執(zhí)行。這將會(huì)導(dǎo)致時(shí)間和處理資源過(guò)多浪費(fèi)在對(duì)相同操作的測(cè)試上,使得測(cè)試效率低下。此外,軟件測(cè)試人員總是一次性設(shè)計(jì)出可能的所有測(cè)試用例并且將測(cè)試用例集成到測(cè)試系統(tǒng)中。在每次期望測(cè)試該軟件的代碼時(shí),相同的測(cè)試用例總是被重復(fù)測(cè)試。這也是無(wú)法達(dá)到有效測(cè)試的目的。
(2)代碼覆蓋率雖然是一種用于判斷衡量測(cè)試覆蓋率(測(cè)試性能)的常用指標(biāo),但是在軟件性能測(cè)試、系統(tǒng)測(cè)試等測(cè)試場(chǎng)景下,比代碼覆蓋率更需要被關(guān)注的是涉及軟件產(chǎn)品的不同輸入的交互覆蓋率。這種輸入的交互可以由不同測(cè)試用例中測(cè)試點(diǎn)的不同測(cè)試值的組合來(lái)表示。但是,代碼覆蓋率則無(wú)法衡量這些輸入的交互的覆蓋情況。由于沒(méi)有衡量的指標(biāo),軟件測(cè)試人員將難以在設(shè)計(jì)測(cè)試用例時(shí)將這些不同的輸入交互考慮在內(nèi),并且后期也無(wú)法繼續(xù)改進(jìn)測(cè)試用例,從而可能難以檢測(cè)出代碼中的潛在問(wèn)題。
(3)需要設(shè)計(jì)的軟件測(cè)試用例的數(shù)目將隨著測(cè)試點(diǎn)和對(duì)應(yīng)的測(cè)試值的數(shù)目的增長(zhǎng)而成指數(shù)型增長(zhǎng)。例如,假設(shè)存在P個(gè)測(cè)試點(diǎn)并且其中第i個(gè)測(cè)試點(diǎn)的測(cè)試值數(shù)目是Vi,那么在常規(guī)的測(cè)試過(guò)程中,為了覆蓋所有的測(cè)試值,可能需要設(shè)計(jì)個(gè)測(cè)試用例。這不但增加了測(cè)試人員的工作量,而且也是非常耗費(fèi)時(shí)間和資源的過(guò)程。
(4)在常規(guī)的軟件測(cè)試中,所有測(cè)試用例在集成之后將進(jìn)入回歸測(cè)試用例池中,并且此后幾乎不存在新的測(cè)試用例的添加。這使得后續(xù)對(duì)該代碼的測(cè)試運(yùn)行(例如,在維護(hù)模式中需要再次測(cè)試時(shí))的測(cè)試覆蓋率幾乎變?yōu)殪o態(tài),難以得到進(jìn)一步的改進(jìn)。
(5)與完整測(cè)試運(yùn)行(即,基于全部測(cè)試用例的測(cè)試)相比,可能期望更頻繁地執(zhí)行這些測(cè)試用例的子集(由于時(shí)間和處理資源的局限性)。對(duì)于頻繁執(zhí)行的子集的選擇通常依賴于專家的推薦。然而,這種嚴(yán)重依賴于專家經(jīng)驗(yàn)的測(cè)試用例選擇無(wú)法確保每次測(cè)試運(yùn)行的測(cè)試覆蓋率能夠最大化。而且,在除了被推薦的測(cè)試用例之外的其他 測(cè)試用例往往需要等到完整測(cè)試運(yùn)行(其很少被執(zhí)行)時(shí)才會(huì)被執(zhí)行。這使得頻繁執(zhí)行的測(cè)試運(yùn)行的測(cè)試覆蓋率即使從長(zhǎng)期的角度來(lái)衡量也沒(méi)有得到提升。
鑒于以上問(wèn)題中的一個(gè)或一些問(wèn)題以及鑒于其他潛在問(wèn)題,本公開(kāi)的實(shí)施例提供了一種軟件測(cè)試的方案。在該方案中,在確定用于測(cè)試代碼的測(cè)試用例集時(shí),考慮不同測(cè)試點(diǎn)的各種測(cè)試值的組合,以使得能夠用較少的測(cè)試用例實(shí)現(xiàn)較高的與輸入交互有關(guān)的測(cè)試覆蓋率。
圖1是根據(jù)本公開(kāi)的實(shí)施例的測(cè)試代碼的過(guò)程100的流程圖。過(guò)程100可以由測(cè)試系統(tǒng)來(lái)實(shí)施。理解的是,過(guò)程100還可以包括附加的步驟和/或省略的步驟。此外,步驟之間的順序不限于圖1中所示出的順序,任何其他可行的順序(包括并行執(zhí)行)均在本公開(kāi)的范圍之內(nèi)。
在步驟110,標(biāo)識(shí)軟件產(chǎn)品的代碼中的多個(gè)測(cè)試點(diǎn)以及將要被指派多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值。本文中所使用的術(shù)語(yǔ)“測(cè)試點(diǎn)”指的是在代碼中定義的可以被賦值的變量或語(yǔ)句。測(cè)試值指的是可能被指派相應(yīng)的測(cè)試點(diǎn)的值。在一些實(shí)施例中,測(cè)試點(diǎn)和對(duì)應(yīng)的測(cè)試值的確定可以由用戶(例如,軟件測(cè)試人員)基于測(cè)試場(chǎng)景、使用情況、代碼的功能說(shuō)明和/或軟件開(kāi)發(fā)人員的協(xié)助來(lái)確定并且向測(cè)試系統(tǒng)輸入。備選地或附加地,也可以由測(cè)試系統(tǒng)自動(dòng)分析代碼,以給出將要用于測(cè)試的測(cè)試點(diǎn)與測(cè)試值的推薦。用戶可以通過(guò)選擇并且確認(rèn)這些推薦來(lái)向系統(tǒng)標(biāo)識(shí)測(cè)試點(diǎn)和測(cè)試值。
所標(biāo)識(shí)的多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)將被指派兩個(gè)或更多測(cè)試值。也就是說(shuō),測(cè)試值的數(shù)目大于測(cè)試用例的數(shù)目。由此,可能需要基于這些測(cè)試點(diǎn)和測(cè)試值生成多個(gè)測(cè)試用例。在一些實(shí)施例中,可以存儲(chǔ)多個(gè)測(cè)試點(diǎn)、多個(gè)測(cè)試值以及它們之間的對(duì)應(yīng)關(guān)系,以便后續(xù)使用。例如,可以將多個(gè)測(cè)試點(diǎn)和對(duì)應(yīng)的測(cè)試值以表格的形式存儲(chǔ)。當(dāng)然,還可以以其他方式進(jìn)行存儲(chǔ),只需要能夠標(biāo)識(shí)出測(cè)試點(diǎn)和測(cè)試值之間的對(duì)應(yīng)關(guān)系即可。假設(shè)從代碼中標(biāo)識(shí)出四個(gè)測(cè)試點(diǎn)A、B、C和D并且每個(gè)測(cè)試點(diǎn)均具有三個(gè)不同的測(cè)試值(僅為了方便,實(shí)際上 每個(gè)測(cè)試點(diǎn)的測(cè)試值的數(shù)目可以不同),那么這些測(cè)試點(diǎn)與測(cè)試值的對(duì)應(yīng)關(guān)系可以由表1示出。
表1:測(cè)試點(diǎn)-測(cè)試值對(duì)應(yīng)表
接下來(lái),在步驟120,將目標(biāo)測(cè)試用例與測(cè)試用例集進(jìn)行比較。在本公開(kāi)的實(shí)施例中,為了獲得用于測(cè)試代碼的測(cè)試用例集,可以判斷某個(gè)測(cè)試用例(目標(biāo)測(cè)試用例)是否能夠存在于測(cè)試用例集中。目標(biāo)測(cè)試用例與測(cè)試用例集的比較將在以下詳細(xì)描述。
在本公開(kāi)的實(shí)施例中,目標(biāo)測(cè)試用例與測(cè)試用例集中的測(cè)試用例均與多個(gè)測(cè)試點(diǎn)相關(guān)聯(lián)。在不同的測(cè)試用例中,多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)可以被指派不同的測(cè)試值。假設(shè)從代碼中標(biāo)識(shí)出P個(gè)測(cè)試點(diǎn)并且第i個(gè)測(cè)試點(diǎn)的測(cè)試值具有Vi個(gè)值,那么一個(gè)測(cè)試用例可以被表示為:
TC={(TPi,TVj):1<=i<=P,1<=j(luò)<=Vi} (1)
其中TC表示一個(gè)測(cè)試用例,TPi表示該測(cè)試用例中測(cè)試點(diǎn)且i將從1到P進(jìn)行取值,TVj表示在該測(cè)試用例中該測(cè)試點(diǎn)TPi對(duì)應(yīng)的測(cè)試值且該測(cè)試值可以從該測(cè)試點(diǎn)的Vi個(gè)測(cè)試值中任選的第j個(gè)值。例如,基于以上表1的示例中的測(cè)試點(diǎn)和測(cè)試值,一個(gè)測(cè)試用例可以被表示為T(mén)C={A1、B2、C1、D1},其中測(cè)試點(diǎn)A被指派它的第一個(gè)測(cè)試值A(chǔ)1,測(cè)試點(diǎn)B被指派它的第二個(gè)測(cè)試值B2并且以此類推。
在一些實(shí)施例中,測(cè)試用例集中可以已經(jīng)包括多個(gè)測(cè)試用例。這些測(cè)試用例可以是由軟件測(cè)試人員以常規(guī)的方式手動(dòng)設(shè)計(jì)的測(cè)試用例。在這些情況中,目標(biāo)測(cè)試用例可以是從該測(cè)試用例集中取出的測(cè)試用例。
在另外一些實(shí)施例中,還可以自動(dòng)地基于所標(biāo)識(shí)的測(cè)試點(diǎn)和測(cè)試值來(lái)生成測(cè)試用例。具體地,可以通過(guò)隨機(jī)地從多個(gè)測(cè)試值為多個(gè)測(cè)試點(diǎn)指派測(cè)試值來(lái)生成目標(biāo)測(cè)試用例。在一些實(shí)施例中,在生成測(cè)試用例時(shí)還需要考慮一些測(cè)試值的組合約束。例如,可能存在一些約束指示某些測(cè)試點(diǎn)的某些測(cè)試值必需同時(shí)存在于一個(gè)測(cè)試用例中或者不能夠同時(shí)存在于一個(gè)測(cè)試用例中等等。在生成新的測(cè)試用例的實(shí)施例中,測(cè)試用例集中可以首先不包括任何測(cè)試用例,并且然后通過(guò)自動(dòng)生成一個(gè)目標(biāo)測(cè)試用例并且判斷所生成的目標(biāo)測(cè)試用例是否能夠存在于該測(cè)試用例集中來(lái)不斷的擴(kuò)大該測(cè)試用例集。
在某些實(shí)施例中,在步驟120對(duì)目標(biāo)測(cè)試用例與測(cè)試用例集的比較,可以是目標(biāo)測(cè)試用中測(cè)試點(diǎn)的測(cè)試值的組合與測(cè)試用例集中存在的測(cè)試值的組合的比較。在一些實(shí)施例中,可以存在測(cè)試值的多種類型的組合。不同數(shù)目的測(cè)試點(diǎn)的測(cè)試值的組合可以被稱為不同類型的組合。例如,對(duì)于測(cè)試用例TC={A1、B2、C1、D1}而言,可以考慮每?jī)蓚€(gè)測(cè)試點(diǎn)的測(cè)試值的各個(gè)組合(例如,(A1、B2)、(A1、C1)、(A1、D1)、(B2、C1)和(C1、D1)),每三個(gè)測(cè)試點(diǎn)的各個(gè)組合((A1、B2、C1)、(A1、C1、D1)、(A1、B2、D1)和(A1、C1、D1))或者更多測(cè)試點(diǎn)的組合。測(cè)試點(diǎn)的測(cè)試值的不同組合可以反映出該軟件產(chǎn)品在實(shí)際使用中可能對(duì)應(yīng)的不同用戶交互場(chǎng)景。
如本文中所使用的,t個(gè)測(cè)試點(diǎn)對(duì)應(yīng)的測(cè)試值的組合可以被稱為t階組合,其中t可以大于1并且小于總的測(cè)試點(diǎn)數(shù)目。對(duì)于給定的多個(gè)測(cè)試點(diǎn)和多個(gè)測(cè)試值,它們的t階組合的數(shù)目是固定的。通常期望用于測(cè)試代碼的測(cè)試用例能夠盡可能的覆蓋所有這些t階組合或者至少覆蓋2階組合。
例如,假設(shè)代碼中標(biāo)識(shí)出P個(gè)測(cè)試點(diǎn)并且第i個(gè)測(cè)試點(diǎn)的測(cè)試值 具有Vi個(gè)值,這些測(cè)試點(diǎn)與測(cè)試值的t階組合的總數(shù)目可以通過(guò)如下公式來(lái)計(jì)算:
其中Ct(1,...,P)表示t階組合的總數(shù)目,Vj表示第j個(gè)測(cè)試點(diǎn)的測(cè)試值的數(shù)目,并且其中:
C0(j,...,P)=C0=1(1≤j≤P+1) (3)
例如,對(duì)于上文給出的表1中所示的4個(gè)測(cè)試點(diǎn)和每個(gè)測(cè)試點(diǎn)3個(gè)測(cè)試值,基于以上公式(2)和(3),可以確定它們的2階組合的總數(shù)目為:
在本公開(kāi)的實(shí)施例中,期望測(cè)試用例集中的測(cè)試點(diǎn)的測(cè)試值的組合能夠涵蓋較多的各階組合。因此,在步驟130中,響應(yīng)于確定目標(biāo)測(cè)試用例中被指派多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于測(cè)試用例集中,將目標(biāo)測(cè)試用例排除在測(cè)試用例集之外。也就是說(shuō),通過(guò)確定目標(biāo)測(cè)試用例是否能夠使得測(cè)試用例集存在的組合的數(shù)目增加來(lái)判斷目標(biāo)測(cè)試用例是否存在于該測(cè)試用例集中。如果目標(biāo)測(cè)試用例的組合均存在于測(cè)試用例集中,則說(shuō)明該目標(biāo)測(cè)試用例無(wú)法為測(cè)試用例集增加新的組合,那么可以將該測(cè)試用例排除出該測(cè)試用例集。
假設(shè)對(duì)于以上表1中所示的4個(gè)測(cè)試點(diǎn)和每個(gè)測(cè)試點(diǎn)3個(gè)測(cè)試值,測(cè)試用例集中已經(jīng)存在如下表2所示的七個(gè)測(cè)試用例。
表2:測(cè)試用例集
這個(gè)測(cè)試用例集中包括的2階組合如以下表3所示:
表3:表2的測(cè)試用例集的2階組合
假如需要判斷表2中的目標(biāo)測(cè)試用例7應(yīng)當(dāng)保存在測(cè)試用例集中還是應(yīng)當(dāng)被排除在測(cè)試用例集中,則可以確定測(cè)試用例7的2階組合中的每個(gè)組合是否均存在于其余6個(gè)測(cè)試用例組成的測(cè)試用例集所包括的組合中。根據(jù)表3可以看出,測(cè)試用例7的每個(gè)2階組合((A1、B1)、(A1,C2)、(A1,D2)、(B1,C2)、(B1,D2)、(C2,D2))在之前6個(gè)測(cè)試用例的集合所包括的組合中均已經(jīng)出現(xiàn)。因此,可以確定將測(cè)試用例7排除出該測(cè)試用例集。
以上給出了基于2階組合來(lái)確定是否排除目標(biāo)測(cè)試用例的示例。 在一些實(shí)施例中,還可以附加地或者備選地以基于更高階的組合來(lái)確定是否排除目標(biāo)測(cè)試用例。例如,可以確定測(cè)試用例7的所有3階組合是否均存在測(cè)試用例集中的3階組合中。在一些實(shí)施例中,可以由用戶來(lái)設(shè)置基于哪些類型的組合來(lái)對(duì)目標(biāo)測(cè)試用例和測(cè)試用例集進(jìn)行比較。也就是說(shuō),可以由用戶設(shè)置一個(gè)或多個(gè)階數(shù)t。在一些實(shí)施例中,階數(shù)t可以是默認(rèn)的,例如被設(shè)置為2。
通常,如果目標(biāo)測(cè)試用例的至少一個(gè)低階組合(例如2階組合)不存在于測(cè)試用例集中,那么可以直接確定它的至少一個(gè)高階組合(例如3階組合)也不會(huì)存在于測(cè)試用例集中。但是,如果它的所有低階組合均存在于測(cè)試用例集中,則如果需要的話可以繼續(xù)確定它的每個(gè)高階組合(例如3階或者更高階組合)是否均存在于測(cè)試用例集中。在一些實(shí)施例中,如果低階組合均存在于測(cè)試用例集的情況中、但是至少一個(gè)高階組合不存在于該集合中,則可以不將該目標(biāo)測(cè)試用例排除出測(cè)試用例集。例如,對(duì)于以上表2中的測(cè)試用例7,雖然它的所有2階組合均存在于其余6個(gè)測(cè)試用例的集合中(如表3所示),但是至少它的三階組合(A1、B1、C2)并未存在于其他測(cè)試用例集中,則可以將測(cè)試用例7保留在該測(cè)試用例集中。
在一些實(shí)施例中,如上文所述,用于比較的測(cè)試用例集可以包括用戶已經(jīng)設(shè)計(jì)的多個(gè)測(cè)試用例或者可以是空集。在已經(jīng)存在的多個(gè)測(cè)試用例的集合的情況中,可以逐個(gè)取出目標(biāo)測(cè)試用例,并且將其與剩余的測(cè)試用例集進(jìn)行比較以確定是否應(yīng)當(dāng)將該目標(biāo)測(cè)試用例移除。如果目標(biāo)測(cè)試用例的t階(例如2階和/或更高階)組合均存在于測(cè)試用例集中,則將該目標(biāo)測(cè)試用例從該測(cè)試用例集中移除。
對(duì)于測(cè)試用例集是空集并且可以自動(dòng)生成測(cè)試用例的情況,第一個(gè)測(cè)試用例可以與t階組合的空集進(jìn)行比較并且因而可以被直接添加至測(cè)試用例集中。隨后生成的目標(biāo)測(cè)試用例的測(cè)試點(diǎn)的測(cè)試值的t階組合可能已經(jīng)存在于測(cè)試用例集中,那么就新生成的目標(biāo)測(cè)試用例將不會(huì)被添加到測(cè)試用例集中。
在一些實(shí)施例中,如果確定目標(biāo)測(cè)試用例的測(cè)試點(diǎn)的測(cè)試值的t 階組合可能已經(jīng)存在于測(cè)試用例集,可以將該測(cè)試用例指示給用戶(例如軟件測(cè)試人員)以供確認(rèn)。然后,響應(yīng)于用戶的確認(rèn),將該目標(biāo)測(cè)試用例排除出測(cè)試用例集。
在一些實(shí)施例中,如果確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的至少一個(gè)組合不同于測(cè)試用例集中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每個(gè)組合,則可以將目標(biāo)測(cè)試用例添加到測(cè)試用例集中。例如,如果目標(biāo)測(cè)試用例為T(mén)C={A1、B3、C2、D2},可以確定測(cè)試點(diǎn)A和B在該測(cè)試用例中的測(cè)試值的組合是(A1、B3)并且根據(jù)表3中測(cè)試用例1至6的2階組合集可以看出,測(cè)試點(diǎn)A和B的測(cè)試值組合(A1、B3)不同于測(cè)試用例集中這個(gè)測(cè)試點(diǎn)的任何測(cè)試值組合。因此,目標(biāo)測(cè)試用例為T(mén)C={A1、B3、C2、D2}可以被添加到表2的測(cè)試用例集中,例如作為該集合中的測(cè)試用例7。
在一些實(shí)施例中,在確定出目標(biāo)測(cè)試用例能夠向測(cè)試用例集增加新的組合的情況下,還可以基于對(duì)目標(biāo)測(cè)試用例的用戶選擇來(lái)將目標(biāo)測(cè)試用例添加到測(cè)試用例集中。例如,可以將目標(biāo)測(cè)試用例推薦給用戶以供選擇,并且響應(yīng)于用戶的選擇來(lái)將其添加至測(cè)試用例集中。
備選地或附加地,還可以基于測(cè)試用例集中包括的測(cè)試值的不同組合的數(shù)目或者包括的已有測(cè)試用例的數(shù)目來(lái)確定是否將目標(biāo)測(cè)試用例添加到測(cè)試用例集中。在一些實(shí)施例中,可以設(shè)置目標(biāo)的組合數(shù)目(例如2階組合的目標(biāo)或者更高階組合的目標(biāo))或者可以設(shè)置目標(biāo)的測(cè)試用例的數(shù)目。當(dāng)測(cè)試用例集中的不同組合的數(shù)目或者測(cè)試用例的數(shù)目尚未達(dá)到目標(biāo)時(shí),才將目標(biāo)測(cè)試用例添加到該集合中。通常,可以基于預(yù)定的測(cè)試目標(biāo)、測(cè)試系統(tǒng)的運(yùn)行能力、每輪測(cè)試運(yùn)行的處理資源、或者預(yù)定的運(yùn)行時(shí)間來(lái)約束目標(biāo)測(cè)試用例的數(shù)目或者測(cè)試值的目標(biāo)組合數(shù)目。
通過(guò)利用過(guò)程100,可以使得所獲得的測(cè)試用例集能夠覆蓋更多的可能的組合。在一些實(shí)施例中,可以使用測(cè)試用例集來(lái)測(cè)試代碼,并且可以將測(cè)試用例集中包括的測(cè)試值的不同組合的數(shù)目作為衡量本輪測(cè)試的性能的度量。具體地,可以比較測(cè)試用例集中包括的測(cè)試 值的不同組合的數(shù)目與多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值的不同組合的總數(shù)目以獲得測(cè)試覆蓋率。在一些實(shí)施例中,可以基于預(yù)定階的組合來(lái)衡量該測(cè)試覆蓋率。例如,可以基于每?jī)蓚€(gè)測(cè)試點(diǎn)的測(cè)試值的2階組合來(lái)衡量該測(cè)試覆蓋率。在另外一些實(shí)施例中,還可以基于多個(gè)不同階數(shù)的組合來(lái)確定多個(gè)的測(cè)試覆蓋率。如本文中所使用的,基于測(cè)試值的組合確定的代碼的測(cè)試覆蓋率可以被稱為測(cè)試覆蓋率或者組合覆蓋率。在一些實(shí)施例中,可以保存測(cè)試用例集的2階或者更高階的組合、例如上文描述的表3列出的組合,以便于方便后續(xù)計(jì)算測(cè)試覆蓋率。
舉例而言,在以上表2的示例中,根據(jù)過(guò)程100,可以從該表2的測(cè)試用例集中排除測(cè)試用例7并且保留其余6個(gè)測(cè)試用例。然后,可以使用這6個(gè)測(cè)試用例來(lái)測(cè)試代碼。根據(jù)表3列出的這6個(gè)測(cè)試用例的2階組合的情況可以看出,這6個(gè)測(cè)試用例包括36個(gè)不同的2階組合。基于公式(4)確定出表1的示例中的4個(gè)測(cè)試點(diǎn)以及它們的相應(yīng)測(cè)試值應(yīng)當(dāng)存在總共54個(gè)不同的2階組合。因此,在使用所保留的6個(gè)測(cè)試用例來(lái)測(cè)試代碼的情況中,本次測(cè)試的2階測(cè)試覆蓋率可以是36/54=2/3。當(dāng)然還可以相應(yīng)地計(jì)算3階或者更高階測(cè)試覆蓋率。
由此可見(jiàn),對(duì)于已經(jīng)存在的測(cè)試用例集(例如由軟件測(cè)試人員設(shè)計(jì)的測(cè)試用例集)而言,使用過(guò)程100可以從該集合中排除具有冗余的t階組合的測(cè)試用例,從而使得能夠使用較少的測(cè)試用例獲得同樣的組合測(cè)試覆蓋率。
備選地,在可以自動(dòng)生成測(cè)試用例的情況中,可以盡可能地生成能夠給出較大的測(cè)試覆蓋率(例如,約70%、90%或者100%的2階測(cè)試覆蓋率)的測(cè)試用例集。例如,在以上表2的示例中,如果已經(jīng)生成測(cè)試用例1至6,并且確定測(cè)試用例7不能被添加到該集合中,則可以繼續(xù)生成新的測(cè)試用例,以覆蓋更多的2階組合。在一個(gè)示例中,可以繼續(xù)生成如下的三個(gè)測(cè)試用例并且將三個(gè)測(cè)試用例添加到測(cè)試用例集中,從而達(dá)到100%的2階測(cè)試覆蓋率。
表4:新增的測(cè)試用例
在表4的示例中,所生成的測(cè)試用例7至9中的每個(gè)測(cè)試用例可以與測(cè)試用例集中包括的組合進(jìn)行比較,以便確定其是否能夠向該集合中增加新的組合(例如2階組合)。如果確定一個(gè)測(cè)試用例至少能夠向該測(cè)試用例集中添加至少一個(gè)新的組合,則可以將其添加到測(cè)試用例集中。
應(yīng)當(dāng)理解的是,表2(除去其中的測(cè)試用例7)結(jié)合表4組成的測(cè)試用例集能夠覆蓋四個(gè)測(cè)試點(diǎn)(A、B、C和D)以及它們相應(yīng)的三個(gè)測(cè)試值的全部54個(gè)2階組合。但是,實(shí)際在生成測(cè)試用例的過(guò)程中,可能難以準(zhǔn)確地確定出如表4所示的三個(gè)測(cè)試用例以正好彌補(bǔ)測(cè)試用例集中的組合缺失,特別是當(dāng)所標(biāo)識(shí)的測(cè)試點(diǎn)和測(cè)試值的數(shù)目較大時(shí)。因此,為了達(dá)到目標(biāo)的組合數(shù)目或者測(cè)試覆蓋率,實(shí)際上可能需要生成更多的測(cè)試用例。
如以上所提及的,由于處理資源等的限制,每一輪的代碼測(cè)試所能運(yùn)行的測(cè)試用例的數(shù)目可能是有限的。因此,可能需要通過(guò)設(shè)置目標(biāo)的組合數(shù)目或者測(cè)試覆蓋率、或者通過(guò)設(shè)置測(cè)試用例數(shù)目來(lái)約束測(cè)試用例集。也就是說(shuō),每個(gè)測(cè)試用例集包括的測(cè)試用例的數(shù)目可能是有限的。在一些情況中,即使獲得的測(cè)試用例集中的2階組合的覆蓋率較高、例如最高達(dá)到100%,但是該測(cè)試用例集中的更高階組合(例如3階組合或者4階組合)的覆蓋率可能也并未達(dá)到期望的水平。
另一方面,對(duì)于給定的測(cè)試點(diǎn)和測(cè)試值,可以存在的較大數(shù)目的不同測(cè)試用例。例如,存在P個(gè)測(cè)試點(diǎn)并且每個(gè)測(cè)試點(diǎn)的測(cè)試值數(shù)目 均是V(僅為了方便,實(shí)際上每個(gè)測(cè)試點(diǎn)的測(cè)試值的數(shù)目可以不同),那么可能存在最多VP個(gè)不同測(cè)試用例(在不考慮測(cè)試值之間的相互約束的情況下)。每個(gè)測(cè)試用例集無(wú)法涵蓋所有這些測(cè)試用例。
為了能夠進(jìn)一步提高各階組合的覆蓋率并且還為了能夠測(cè)試可能的更多的不同測(cè)試用例,在一些實(shí)施例中,在過(guò)程100中,如果確定目標(biāo)測(cè)試用例中被指派多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于測(cè)試用例集中,則可以將目標(biāo)測(cè)試用例與另外的測(cè)試用例集進(jìn)行比較。如果確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的至少一個(gè)組合不同于另外的測(cè)試用例集中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每個(gè)組合,可以將目標(biāo)測(cè)試用例添加到另外的測(cè)試用例集中。也就是說(shuō),可以所生成的目標(biāo)測(cè)試用例如果無(wú)法被添加到當(dāng)前的測(cè)試用例集中,則可以在一個(gè)或者多個(gè)其他測(cè)試用例集中被繼續(xù)使用。
如上文所述,目標(biāo)測(cè)試用例通過(guò)隨機(jī)地為測(cè)試點(diǎn)指派測(cè)試值來(lái)生成。通過(guò)這樣的方式,如果一個(gè)測(cè)試用例集無(wú)法滿足更高的測(cè)試覆蓋率或者無(wú)法包括更多的不同測(cè)試用例,但是還可以基于其他測(cè)試用例集來(lái)繼續(xù)測(cè)試代碼。在一些實(shí)施例中,當(dāng)存在多個(gè)測(cè)試用例集時(shí),可以隨機(jī)從多個(gè)測(cè)試用例集中選擇一個(gè)、一些或者全部測(cè)試用例集來(lái)測(cè)試代碼。從長(zhǎng)期的角度來(lái)看,多個(gè)測(cè)試用例集的使用使得各階的測(cè)試覆蓋率得到提升并且覆蓋了更多不同的測(cè)試用例。
在一些實(shí)施例中,如果需要頻繁且快速地測(cè)試代碼的應(yīng)用場(chǎng)景,也可以隨機(jī)地從多個(gè)測(cè)試用例集中選擇一個(gè)或多個(gè)而不是全部測(cè)試用例集來(lái)測(cè)試代碼。由于在測(cè)試用例集的生成過(guò)程中已經(jīng)使得測(cè)試用例集中的測(cè)試用例能夠獲得較大的組合測(cè)試覆蓋率,因此即使每次僅運(yùn)行全部測(cè)試用例集中的一部分測(cè)試用例集,也能夠獲得較高的測(cè)試覆蓋率。這相對(duì)于依賴人工選擇部分測(cè)試用例的方式而言,更能夠確保每次測(cè)試運(yùn)行的有效性。
上文參考某些示例實(shí)施例討論了基于測(cè)試用例集來(lái)對(duì)代碼的測(cè)試。在本公開(kāi)的一些實(shí)施例,為了進(jìn)一步促進(jìn)代碼的測(cè)試,還可以借 助測(cè)試點(diǎn)的接口函數(shù)來(lái)測(cè)試代碼。具體地,當(dāng)確定所標(biāo)識(shí)的測(cè)試點(diǎn)之后,可以基于測(cè)試點(diǎn)生成與多個(gè)測(cè)試點(diǎn)對(duì)應(yīng)的多個(gè)接口函數(shù)。當(dāng)所選用的測(cè)試用例集確定之后,可以其包括的相應(yīng)測(cè)試用例中多個(gè)測(cè)試點(diǎn)的測(cè)試值作為多個(gè)接口函數(shù)的輸入。然后在代碼運(yùn)行時(shí),通過(guò)調(diào)用這些接口函數(shù)來(lái)運(yùn)行代碼,以獲得代碼運(yùn)行的結(jié)果。在傳統(tǒng)的代碼測(cè)試過(guò)程中,軟件測(cè)試人員需要針對(duì)每個(gè)測(cè)試用例編寫(xiě)或以自動(dòng)的方式生成對(duì)應(yīng)的可執(zhí)行腳本以用于測(cè)試代碼。因此,在測(cè)試用例數(shù)量過(guò)多的時(shí)候,測(cè)試過(guò)程將會(huì)消耗更多的時(shí)間。然而,通過(guò)設(shè)計(jì)接口函數(shù),可以方便地處理不同的測(cè)試用例而不需要花費(fèi)大量的時(shí)間用于測(cè)試用例的腳本化。
在一些實(shí)施例中,可能通過(guò)測(cè)試過(guò)程查找到代碼的缺陷。具體地,對(duì)于每個(gè)測(cè)試用例而言,均可以對(duì)應(yīng)一個(gè)預(yù)期結(jié)果。如果使用該測(cè)試用例運(yùn)行代碼之后的結(jié)果與預(yù)期結(jié)果不一致,則說(shuō)明該測(cè)試用例對(duì)應(yīng)于缺陷。在這種情況下,可以記錄該缺陷對(duì)應(yīng)的測(cè)試用例并且將該測(cè)試用例告知用戶。用戶可以基于報(bào)告的測(cè)試用例確定出應(yīng)當(dāng)修改代碼。在一些情況下,代碼的修改可能導(dǎo)致一個(gè)或多個(gè)新測(cè)試點(diǎn)以及可以被指派這些測(cè)試點(diǎn)的新的測(cè)試值,或者還可能導(dǎo)致已有的測(cè)試點(diǎn)的新測(cè)試值。在這些情況中,仍然可以依照過(guò)程100繼續(xù)生成目標(biāo)測(cè)試用例,并且確定目標(biāo)測(cè)試用例是否能夠進(jìn)一步被包括在測(cè)試用例集中。
不同于傳統(tǒng)測(cè)試過(guò)程中僅能夠已知的單個(gè)新的測(cè)試用例增加到測(cè)試用例集中,通過(guò)過(guò)程100,目標(biāo)測(cè)試用例的增加仍然考慮了不同測(cè)試點(diǎn)(已有的測(cè)試點(diǎn)與新的測(cè)試點(diǎn))的不同測(cè)試值的組合,從而可以獲得更多的測(cè)試用例來(lái)實(shí)現(xiàn)較好的測(cè)試覆蓋率。因此,基于新的測(cè)試點(diǎn)或者測(cè)試值產(chǎn)生的新的組合可以被增加到測(cè)試用例集中,以便下一次繼續(xù)基于新的測(cè)試用例集來(lái)測(cè)試代碼。由此可見(jiàn),過(guò)程100不僅有利于在軟件測(cè)試初始時(shí)期獲得較好的測(cè)試覆蓋率和有效的測(cè)試,并且還能夠有利于后續(xù)產(chǎn)品維護(hù)階段持續(xù)實(shí)現(xiàn)覆蓋率和測(cè)試效率的提升。
在一個(gè)示例中,通過(guò)代碼測(cè)試,用戶發(fā)現(xiàn)了一個(gè)產(chǎn)品缺陷并且確定除了原先的A、B、C三個(gè)測(cè)試點(diǎn)之外還應(yīng)當(dāng)增加新的測(cè)試點(diǎn)D,并且測(cè)試點(diǎn)D具有三個(gè)測(cè)試值D1、D2和D3?;谛碌臏y(cè)試點(diǎn),可以繼續(xù)依據(jù)過(guò)程100生成對(duì)應(yīng)的測(cè)試用例集,如以下表5所示。從表5可以,該測(cè)試用例集中能夠?qū)y(cè)試點(diǎn)D的多個(gè)測(cè)試值與先前的測(cè)試點(diǎn)的測(cè)試值之間的各種組合考慮在內(nèi)。
表5:新增測(cè)試點(diǎn)之后的測(cè)試用例集
圖2是根據(jù)本公開(kāi)的實(shí)施例的用于測(cè)試代碼的系統(tǒng)200的結(jié)構(gòu)框圖。系統(tǒng)200僅是用于實(shí)現(xiàn)一些實(shí)施例的代碼測(cè)試過(guò)程的系統(tǒng)的具體示例。應(yīng)當(dāng)理解的是,系統(tǒng)200可以包括更多或更少的功能塊。
如圖2所示,系統(tǒng)200包括測(cè)試標(biāo)識(shí)器201,用于從待測(cè)試的代碼中標(biāo)識(shí)出測(cè)試點(diǎn)和測(cè)試值。在202中,可以存儲(chǔ)所標(biāo)識(shí)的測(cè)試點(diǎn)和測(cè)試值可以被制作成測(cè)試點(diǎn)與測(cè)試值對(duì)應(yīng)表,并且還可以用于存儲(chǔ)這些測(cè)試點(diǎn)的測(cè)試值的不同組合表?;跍y(cè)試點(diǎn)與測(cè)試值對(duì)應(yīng)表,測(cè)試用例生成器205可以生成測(cè)試用例,并且將生成的測(cè)試用例放入測(cè)試用例集206中。測(cè)試用例生成器205在生成測(cè)試用例時(shí)還參考測(cè)試要 求207。測(cè)試要求207可以包括例如對(duì)于測(cè)試值的組合的約束。例如,測(cè)試要求207可以規(guī)定某些測(cè)試點(diǎn)的特定測(cè)試值應(yīng)當(dāng)或者不應(yīng)當(dāng)出現(xiàn)在同一個(gè)測(cè)試用例中。
測(cè)試用例移除器215可以確定是否應(yīng)當(dāng)從測(cè)試用例集中移除某個(gè)測(cè)試用例。對(duì)于測(cè)試用例的移除可以基于該測(cè)試用例是否能夠像測(cè)試用例集增加新的t階組合(t可以大于等于2并且小于所標(biāo)識(shí)的測(cè)試點(diǎn)的數(shù)目)來(lái)確定。在一些實(shí)施例中,確定要被刪除的測(cè)試用例可以存儲(chǔ)在測(cè)試用例移除報(bào)告216中以便提供給用戶。
所獲得的測(cè)試用例集206可以被提供至測(cè)試運(yùn)行器208中用于測(cè)試代碼。在一些實(shí)施例中,所標(biāo)識(shí)的測(cè)試點(diǎn)可以被提供至測(cè)試開(kāi)發(fā)203中以便于開(kāi)發(fā)與這些測(cè)試點(diǎn)對(duì)應(yīng)的測(cè)試點(diǎn)接口函數(shù)204。測(cè)試運(yùn)行器208可以調(diào)用這些接口函數(shù),并且將相應(yīng)的測(cè)試用例中執(zhí)行的測(cè)試點(diǎn)的測(cè)試值用作這些接口函數(shù)的輸入。通過(guò)這些接口函數(shù),可以快速地執(zhí)行代碼的測(cè)試。代碼運(yùn)行的結(jié)果可以被存儲(chǔ)到測(cè)試報(bào)告209中。在一些實(shí)施例中,測(cè)試報(bào)告209可以包括每個(gè)測(cè)試用例的運(yùn)行結(jié)果以及該測(cè)試用例的預(yù)期結(jié)果。
為了分析在每次測(cè)試運(yùn)行中是否發(fā)現(xiàn)代碼的缺陷,測(cè)試報(bào)告209可以被提供至缺陷分析器210中。缺陷分析器210通過(guò)對(duì)測(cè)試報(bào)告209進(jìn)行分析,可以將可能的缺陷存儲(chǔ)在缺陷報(bào)告212并且在需要的時(shí)候?qū)⑵涮峁┙o用戶。在一些實(shí)施例中,如果缺陷分析器210分析出應(yīng)當(dāng)繼續(xù)測(cè)試產(chǎn)品的代碼中的新的測(cè)試點(diǎn)和對(duì)應(yīng)的測(cè)試值或者已有的測(cè)試點(diǎn)的新的測(cè)試值211,則可以將這些信息合并至202中的測(cè)試點(diǎn)與測(cè)試值對(duì)應(yīng)表,以便于測(cè)試用例生成器205使用這些信息繼續(xù)生成新的測(cè)試用例。
在一些實(shí)施例中,測(cè)試覆蓋率分析器213還可以依據(jù)所存儲(chǔ)的測(cè)試值組合表202、測(cè)試用例生成器205生成的測(cè)試用例以及測(cè)試用例移除器215移除的測(cè)試用例來(lái)確定每次測(cè)試運(yùn)行的測(cè)試覆蓋率。測(cè)試覆蓋率分析器213還可以生成測(cè)試覆蓋率報(bào)告214用于提供給用戶。
在以上的實(shí)施例中,系統(tǒng)200被描述為根據(jù)自動(dòng)生成的測(cè)試用例 來(lái)執(zhí)行測(cè)試過(guò)程。在進(jìn)一步的實(shí)施例中,還可以將已經(jīng)被設(shè)計(jì)的測(cè)試用例結(jié)合至系統(tǒng)200中。系統(tǒng)200然后可以基于已有的測(cè)試用例來(lái)執(zhí)行代碼測(cè)試過(guò)程。例如,已有的測(cè)試用例可以被添加至測(cè)試用例集206中。在這種情況下,系統(tǒng)200的各個(gè)功能塊可以繼續(xù)執(zhí)行以上所述的操作。
圖3是根據(jù)本公開(kāi)的實(shí)施例的用于測(cè)試代碼的設(shè)備300的結(jié)構(gòu)框圖。如圖所示,該設(shè)備300包括:測(cè)試標(biāo)識(shí)器310,被配置為標(biāo)識(shí)所述代碼中的多個(gè)測(cè)試點(diǎn)以及將要被指派多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值。多個(gè)測(cè)試點(diǎn)中的至少一個(gè)測(cè)試點(diǎn)將被指派以兩個(gè)或更多測(cè)試值。設(shè)備300還包括測(cè)試用例比較器320,被配置為將一個(gè)目標(biāo)測(cè)試用例與測(cè)試用例集進(jìn)行比較。目標(biāo)測(cè)試用例和測(cè)試用例集均與多個(gè)測(cè)試點(diǎn)相關(guān)聯(lián)。設(shè)備300進(jìn)一步包括測(cè)試用例確定器330,被配置為響應(yīng)于確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于測(cè)試用例集中,將目標(biāo)測(cè)試用例排除在測(cè)試用例集之外。
在一些實(shí)施例中,設(shè)備300可以進(jìn)一步包括測(cè)試用例生成器,被配置為通過(guò)隨機(jī)地從多個(gè)測(cè)試值為多個(gè)測(cè)試點(diǎn)指派測(cè)試值來(lái)生成目標(biāo)測(cè)試用例。
在一些實(shí)施例中,目標(biāo)測(cè)試用例存在于測(cè)試用例集中。測(cè)試用例確定器330可以被配置為從測(cè)試用例集中移除目標(biāo)測(cè)試用例。
在一些實(shí)施例中,測(cè)試用例確定器330可以進(jìn)一步被配置為響應(yīng)于確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的至少一個(gè)組合不同于測(cè)試用例集中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每個(gè)組合,將目標(biāo)測(cè)試用例添加到測(cè)試用例集中。
在一些實(shí)施例中,測(cè)試用例確定器330可以進(jìn)一步被配置為基于以下各項(xiàng)中的至少一項(xiàng)來(lái)將目標(biāo)測(cè)試用例添加到測(cè)試用例集中:對(duì)目標(biāo)測(cè)試用例的用戶選擇,測(cè)試用例集中包括的測(cè)試值的不同組合的數(shù)目,以及測(cè)試用例集中包括的已有測(cè)試用例的數(shù)目。
在一些實(shí)施例中,設(shè)備300可以進(jìn)一步包括:代碼測(cè)試器,被配 置為使用測(cè)試用例集來(lái)測(cè)試代碼,以及覆蓋率確定器,被配為比較測(cè)試用例集中包括的測(cè)試值的不同組合的數(shù)目與多個(gè)測(cè)試點(diǎn)的多個(gè)測(cè)試值的不同組合的總數(shù)目以獲得測(cè)試覆蓋率。
在一些實(shí)施例中,代碼測(cè)試器可以進(jìn)一步被配置為:生成與多個(gè)測(cè)試點(diǎn)對(duì)應(yīng)的多個(gè)接口函數(shù),將測(cè)試用例集中的相應(yīng)測(cè)試用例中多個(gè)測(cè)試點(diǎn)的測(cè)試值作為多個(gè)接口函數(shù)的輸入,以及調(diào)用多個(gè)接口函數(shù)來(lái)運(yùn)行代碼。
在一些實(shí)施例中,以上測(cè)試用例集是第一測(cè)試用例集,并且測(cè)試用例確定器330可以進(jìn)一步被配置為:響應(yīng)于確定目標(biāo)測(cè)試用例中被指派多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每種組合均存在于第一測(cè)試用例集中,將目標(biāo)測(cè)試用例與第二測(cè)試用例集進(jìn)行比較;響應(yīng)于確定目標(biāo)測(cè)試用例中被指派給多個(gè)測(cè)試點(diǎn)中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的至少一個(gè)組合不同于第二測(cè)試用例集中至少兩個(gè)測(cè)試點(diǎn)的測(cè)試值的每個(gè)組合,將目標(biāo)測(cè)試用例添加到第二測(cè)試用例集中;以及隨機(jī)地從第一測(cè)試用例集和第二測(cè)試用例集中選擇至少一個(gè)測(cè)試用例集來(lái)測(cè)試代碼。
圖4示出了可以用來(lái)實(shí)施本公開(kāi)內(nèi)容的實(shí)施例的示例設(shè)備400的示意性框圖。設(shè)備400可以用于實(shí)現(xiàn)圖2的用于測(cè)試代碼的系統(tǒng)和/或圖3的用于測(cè)試代碼的設(shè)備300。如圖所示,設(shè)備400包括中央處理單元(CPU)401,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(ROM)402中的計(jì)算機(jī)程序指令或者從存儲(chǔ)單元408加載到隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)403中的計(jì)算機(jī)程序指令,來(lái)執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在RAM 403中,還可存儲(chǔ)設(shè)備400操作所需的各種程序和數(shù)據(jù)。CPU401、ROM 402以及RAM 403通過(guò)總線404彼此相連。輸入/輸出(I/O)接口405也連接至總線404。
設(shè)備400中的多個(gè)部件連接至I/O接口405,包括:輸入單元406,例如鍵盤(pán)、鼠標(biāo)等;輸出單元407,例如各種類型的顯示器、揚(yáng)聲器等;存儲(chǔ)單元408,例如磁盤(pán)、光盤(pán)等;以及通信單元409,例如網(wǎng)卡、調(diào)制解調(diào)器、無(wú)線通信收發(fā)機(jī)等。通信單元409允許設(shè)備400通 過(guò)諸如因特網(wǎng)的計(jì)算機(jī)網(wǎng)絡(luò)和/或各種電信網(wǎng)絡(luò)與其他設(shè)備交換信息/數(shù)據(jù)。
處理單元401執(zhí)行上文所描述的各個(gè)方法和處理,例如過(guò)程100,可由。例如,在一些實(shí)施例中,過(guò)程100可被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序,其被有形地包含于機(jī)器可讀介質(zhì),例如存儲(chǔ)單元408。在一些實(shí)施例中,計(jì)算機(jī)程序的部分或者全部可以經(jīng)由ROM 402和/或通信單元409而被載入和/或安裝到設(shè)備400上。當(dāng)計(jì)算機(jī)程序加載到RAM 403并由CPU 401執(zhí)行時(shí),可以執(zhí)行上文描述的過(guò)程100的一個(gè)或多個(gè)步驟。
本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,上述本公開(kāi)的方法的各個(gè)步驟可以通過(guò)通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本公開(kāi)不限制于任何特定的硬件和軟件結(jié)合。
應(yīng)當(dāng)理解,盡管在上文的詳細(xì)描述中提及了設(shè)備的若干裝置或子裝置,但是這種劃分僅僅是示例性而非強(qiáng)制性的。實(shí)際上,根據(jù)本公開(kāi)的實(shí)施例,上文描述的兩個(gè)或更多裝置的特征和功能可以在一個(gè)裝置中具體化。反之,上文描述的一個(gè)裝置的特征和功能可以進(jìn)一步劃分為由多個(gè)裝置來(lái)具體化。
以上所述僅為本公開(kāi)的可選實(shí)施例,并不用于限制本公開(kāi),對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本公開(kāi)可以有各種更改和變化。凡在本公開(kāi)的精神和原則之內(nèi),所作的任何修改、等效替換、改進(jìn)等,均應(yīng)包含在本公開(kāi)的保護(hù)范圍之內(nèi)。