王 立 新
(安徽建筑大學(xué) 電子與信息工程學(xué)院,安徽 合肥 230022)
?
逆向模型測(cè)試中的測(cè)試用例集生成方法
王 立 新
(安徽建筑大學(xué) 電子與信息工程學(xué)院,安徽 合肥 230022)
簡(jiǎn)要介紹了逆向建模測(cè)試的相關(guān)概念;給出了逆向建模測(cè)試的過程;系統(tǒng)介紹了逆向建模測(cè)試過程中測(cè)試用例生成的方法;提出了一種利用參數(shù)約束關(guān)系的逆向建模測(cè)試用例集精簡(jiǎn)方法,并給出了該方法的相關(guān)實(shí)驗(yàn)數(shù)據(jù)。
逆向建模;軟件測(cè)試;組合覆蓋測(cè)試
對(duì)于開發(fā)時(shí)間較早的現(xiàn)在仍在應(yīng)用的軟件和組件,很多都存在這樣那樣的問題,歸納起來包括:文檔完整性欠缺,存在信息不一致問題,有的軟件還多次打補(bǔ)丁,給軟件使用造成比較多的麻煩。然而,這些歷史遺產(chǎn)又不能完全拋棄,有時(shí)候是需要建立模型的以便于擴(kuò)充功能、修正錯(cuò)誤等,但由于上述問題,要使用一般的正向建立模型的方法是不可行的,這就產(chǎn)生了如何建立模型的問題。
而逆向模型測(cè)試[1]就是從欠缺完整性的文檔,在可能存在不一致的信息中構(gòu)造出測(cè)試用例,再運(yùn)行測(cè)試用例并獲取系統(tǒng)的動(dòng)態(tài)信息,最終構(gòu)建出系統(tǒng)的動(dòng)態(tài)模型,在多次與用戶目標(biāo)需求迭代比較和修正后,獲得系統(tǒng)或組件的模型以及其它信息。
逆向測(cè)試過程一般可分為以下幾個(gè)階段,如圖1所示。
圖1 逆向測(cè)試過程
(1)從使用手冊(cè)、設(shè)計(jì)說明等不完整的文檔中提取測(cè)試用例,這個(gè)步驟是逆向測(cè)試第一步;
(2)測(cè)試這些用例;
(3)獲取運(yùn)行測(cè)試用例過程中的運(yùn)行結(jié)果和動(dòng)態(tài)數(shù)據(jù),存儲(chǔ)于結(jié)果數(shù)據(jù)數(shù)據(jù)庫(kù),為后面的系統(tǒng)分析起支撐作用;
(4)對(duì)測(cè)試的結(jié)果數(shù)據(jù)進(jìn)行梳理并進(jìn)行整理后存儲(chǔ)在庫(kù)中,這是由于動(dòng)態(tài)的狀態(tài)變化數(shù)據(jù)信息很大,需要數(shù)據(jù)庫(kù)來存儲(chǔ)和處理;
(5)處理測(cè)試數(shù)據(jù),獲取初步的系統(tǒng)模型;
(6)根據(jù)現(xiàn)有文檔和所預(yù)測(cè)的初步模型比對(duì),對(duì)初步模型進(jìn)行修正以及精細(xì)化;
(7)對(duì)修正后系統(tǒng)模型進(jìn)行分析,重新從分析結(jié)果中得到新的用例;
(8)這步是在前面步驟之后,用新的用例轉(zhuǎn)(2)再測(cè)試。
多次的迭代測(cè)試之后,修改出錯(cuò)和偏差,逐漸逼近滿足需要的模型和規(guī)格,直至達(dá)到用戶的需求為止。
從逆向建模的測(cè)試過程來看,測(cè)試用例是逆向建模的基礎(chǔ)和關(guān)鍵。但是由于沒有文檔或者文檔不完全,造成了測(cè)試用例的生成困難。因此對(duì)于逆向建模的測(cè)試用例集的獲取就是一個(gè)比較棘手的問題。
一般情況下,根據(jù)逆向工程[2]的步驟,我們可以首先從文檔中獲取相關(guān)的輸入和輸出信息,然后再組織成為測(cè)試用例,這是首先想到的可利用信息,除此之外,我們還可以從多處獲取用于生成測(cè)試用例的信息,比如系統(tǒng)的界面和膠水代碼等。這些信息的獲取就是我們生成初始測(cè)試用例的基礎(chǔ),也是我們精細(xì)化模型的基礎(chǔ)。
我們分析這些信息以后,利用這些信息來組合、進(jìn)行系統(tǒng)或者組件的黑盒測(cè)試是最為方便的。也就是對(duì)系統(tǒng)或組件的輸入信息進(jìn)行組合,然后運(yùn)行系統(tǒng)或組件,考察輸出的信息或者狀態(tài)結(jié)果信息。也即對(duì)輸入信息進(jìn)行組合從而獲取測(cè)試用例集是最為可行和有效的方法。
組合測(cè)試[3]也稱為組合覆蓋測(cè)試,根據(jù)不同的組合參數(shù)數(shù)目k(1≤k≤n),可分為:(a)單參數(shù)覆蓋、(b)雙參數(shù)組合覆蓋、 (c)n維參數(shù)全組合覆蓋等。在組合覆蓋測(cè)試中,全組合覆蓋測(cè)試是最完全和最徹底的。
通常情況下,如輸入?yún)?shù)很少的情況下,那么全組合覆蓋測(cè)試集的測(cè)試用例數(shù)目是可以接受的,但對(duì)于組合參數(shù)數(shù)目較多的情況下,參數(shù)組合爆炸的難題就出現(xiàn)了,很多情況下,就是由于測(cè)試組合用例數(shù)目太大而使得測(cè)試工作不可能完成。
圖2是一個(gè)學(xué)生信息注冊(cè)界面。如果性別2個(gè)選項(xiàng),出生年有46個(gè)選項(xiàng),月份12個(gè)選項(xiàng),日平均30個(gè)選項(xiàng),籍貫34個(gè)選項(xiàng),市(區(qū))平均有12個(gè)選項(xiàng),學(xué)院有7個(gè)選項(xiàng),系平均3個(gè)選項(xiàng),專業(yè)有24個(gè)選項(xiàng),學(xué)籍狀況有3個(gè)選項(xiàng),那么我們初步計(jì)算一下,輸入選項(xiàng)的全組合大概有2.0431595*E10,這時(shí)的情形就是組合爆炸,對(duì)于這樣一個(gè)天文數(shù)字的組合信息,組合測(cè)試不可能進(jìn)行的。
那么為了軟件測(cè)試高效性和可行性,R. Mandl[4]首次提出了雙參數(shù)組合(成對(duì)組合)測(cè)試概念,即對(duì)參數(shù)的所有取值進(jìn)行兩兩組合,在滿足覆蓋準(zhǔn)則要求的情況下,生成元素的兩兩組合覆蓋測(cè)試用例集來測(cè)試軟件。Kuhn D. R.等則發(fā)現(xiàn)大約20 %~40 %的系統(tǒng)或者組件出錯(cuò)或者故障是由某單個(gè)參數(shù)引起的,七成左右的出錯(cuò)或故障由某2個(gè)參數(shù)引起的,而九成以上出錯(cuò)或故障是由2或3個(gè)參數(shù)作用引起的[5];而Cohen[6]、史亮[7]等人也取得了不少的研究成果。成對(duì)組合覆蓋測(cè)試用例集的生成最有名的方法包括AETG[8]、IPO和PSST[9]等。
圖2 學(xué)生學(xué)位審查系統(tǒng)注冊(cè)界面
3.1 無效參數(shù)組合的概念
盡管單參數(shù)覆蓋測(cè)試和成對(duì)組合覆蓋測(cè)試或者三參數(shù)組合覆蓋測(cè)試能以數(shù)目可以接受的測(cè)試用例來測(cè)試待測(cè)的軟件系統(tǒng)或組件,但很多情況下也需要更全面的測(cè)試,也有參數(shù)較多的情況下,成對(duì)組合覆蓋的用例數(shù)目也是不能令人滿意的,于是很多研究者提出了各種精簡(jiǎn)組合測(cè)試用例集的方法。在圖2的界面中,我們可以看到一些參數(shù)組合是不成立的,即不可能用來進(jìn)行測(cè)試的,如1999年2月30日(1999,2,30)就是無效組合,這是因?yàn)樵谙到y(tǒng)或者組件程序內(nèi)部大多已經(jīng)有代碼對(duì)此進(jìn)行約束了,而在一些組合測(cè)試方法中,測(cè)試用例的生成大多數(shù)未考慮有參數(shù)依賴的情況。而在用沒有考慮參數(shù)約束的組合測(cè)試用例集中,就會(huì)包含無效的參數(shù)組合的用例,如果利用輸入?yún)?shù)的約束關(guān)系消除這些測(cè)試用例,可以減少測(cè)試用例集中的用例數(shù),提高測(cè)試的效率,這對(duì)測(cè)試是很有利的。
輸入選取圖2中的性別(男,女)、出生年(1951等46個(gè))、學(xué)籍狀況(在讀、休學(xué)、畢業(yè))、學(xué)院(電信等7個(gè))和專業(yè)(計(jì)算機(jī)科學(xué)與技術(shù)等24個(gè))5個(gè)參數(shù)的情況下,如果生成全組合覆蓋測(cè)試用例,其測(cè)試用例數(shù)目是不可接受。我們采用微軟公司的PICT軟件生成的2維組合用例,盡管輸入?yún)?shù)不多,但最終的成對(duì)組合測(cè)試用例是1584個(gè),這其中含有部分無效的2維輸入?yún)?shù)組合,需要對(duì)其進(jìn)行精簡(jiǎn)。
圖2中,在籍貫的省和市中就存在參數(shù)之間的約束關(guān)系,如選取江蘇省,那么合肥就不能在組合測(cè)試用例中產(chǎn)生,這時(shí)因?yàn)槟K內(nèi)的代碼體現(xiàn)了約束關(guān)系,使得省和省內(nèi)的城市關(guān)聯(lián)起來,在界面的下拉列表中選取了江蘇省后,就不會(huì)在市的下拉列表中出現(xiàn)非江蘇省的城市。同樣,年、月和日的下拉列表中也會(huì)體現(xiàn)約束關(guān)系,如(1999年,2月,29日)、(1999年,2月,30日)和(1999年,2月,31日)等這樣的輸入?yún)?shù)的組合等。那么如果我們輸入的測(cè)試用例中包含(江蘇省,合肥市)或(2月,30日)這樣的組合,那么在界面上輸入不了,也就是不可能進(jìn)行測(cè)試。更進(jìn)一步地說,就是需要我們?cè)趉維參數(shù)組合測(cè)試用例來測(cè)試集生成以后,需要檢查是否包含了無效的參數(shù)組合,如果有的話,需要在測(cè)試用例集中剔除。也即我們可以基于參數(shù)間的約束關(guān)系,能夠不同程度地精簡(jiǎn)測(cè)試用例集。對(duì)于上文中的無效參數(shù)組合也可以用來測(cè)試膠水代碼的正確性,將另文研究。
3.2 輸入?yún)?shù)之間的依賴關(guān)系
那么怎樣找出這些輸入?yún)?shù)之間的約束關(guān)系呢?通過圖2中的輸入?yún)?shù)進(jìn)行了約束關(guān)系的分析,我們選擇了幾個(gè)關(guān)鍵性的輸入?yún)?shù)對(duì)它們進(jìn)行組合測(cè)試,并獲取它們之間的約束關(guān)系。
我們對(duì)輸入?yún)?shù)約束關(guān)系進(jìn)行符號(hào)化標(biāo)記:例如xy表示輸入?yún)?shù)值x約束y參數(shù)值(屬oneone);如x∧yz表示輸入?yún)?shù)值x和y共同約束參數(shù)值z(mì)(屬manyone型);如zx∧y表示輸入?yún)?shù)z約束x和y( 屬onemany);如x∧yz∧w表示x和y值約束輸入?yún)?shù)值z(mì)和w(manymany屬)。
在具體的圖2的界面中,有“南京”“蘇州”和“揚(yáng)州”等城市受到“江蘇”的約束;在出生日期的年月日輸入?yún)?shù)組合上,“日(1-31)”受到“月(1-12)”的一些月份的約束,比如:1-28日在所有的月份都有效,可以成對(duì)組合,但29日不但受到月份為“2”的約束,還受到年份的約束,但30日和31日只是在其它月份出現(xiàn),不會(huì)出現(xiàn)在“2”月份。而2月29日的出現(xiàn),如果認(rèn)定它是合法的,那么還要檢查年份是否是閏年,閏年符合條件a:能被4整除而不能被100整除;b:能被400整除。故月和日組合(2,30)和(2,31)就是無效的成對(duì)組合,年月日組合(2015,2,29 )也是無效的三組合。
3.3 利用約束關(guān)系的精簡(jiǎn)測(cè)試用例集
輸入?yún)?shù)約束關(guān)系可以用來對(duì)k維組合測(cè)試用例集進(jìn)行精簡(jiǎn)。主要有兩種方式:第一種方式是首先生成輸入?yún)?shù)的全組合的集合,此時(shí),這些組合集中有無效參數(shù)的組合,需要逐一檢查剔除,然后根據(jù)覆蓋率的要求,再?gòu)闹袆h除一些組合;
第二種方式是在算法生成k維組合用例的同時(shí),及時(shí)測(cè)校當(dāng)前k維的參數(shù)組合是否含有無效的約束關(guān)系,如包含無效約束,則重新生成k維的參數(shù)組合,如不包含無效組合,則是最終的測(cè)試用例集的一員,直到達(dá)到組合覆蓋率的要求為止。
第一種方式算法條理清晰,實(shí)現(xiàn)起來比較簡(jiǎn)單,但算法的時(shí)間復(fù)雜度較高,特別是輸入?yún)?shù)比較多的情況下,往往時(shí)效上不可接受。第二種方式,需要在檢測(cè)當(dāng)前的參數(shù)組合是否有效的同時(shí),也檢查組合覆蓋率,時(shí)效性相對(duì)較好。
第二種精簡(jiǎn)組合用例方式的算法如下:
(1)根據(jù)輸入?yún)?shù)之間依賴集,生成無效參數(shù)組合集;
(2)生成k維參數(shù)組合;
(3)對(duì)該k維參數(shù)組合進(jìn)行如下步驟:
a.檢測(cè)每個(gè)無效參數(shù)組合是否在該參數(shù)組合中;
b.如果該參數(shù)組合中有無效參數(shù)組合就剔除,并且轉(zhuǎn)(2);
c.否則就把該組合加到測(cè)試用例集中,并且檢查組合覆蓋率是否達(dá)到,如果沒有達(dá)到要求的覆蓋率則轉(zhuǎn)2;否則轉(zhuǎn)4;
(4)程序結(jié)束。
在第2節(jié)的圖2中,包含2個(gè)Text文本框、10個(gè)ComboBox單選下拉列表,還有2個(gè)按鈕,包括:性別,出生年、月、日,籍貫的省、市,學(xué)院、系、專業(yè)和學(xué)籍狀況。出生日期(年月日),省和市(區(qū))的約束關(guān)系在被測(cè)的系統(tǒng)程序中或模塊之間已經(jīng)體現(xiàn),在界面上就不會(huì)輸入這些無效組合。在上述實(shí)驗(yàn)實(shí)例中,我們就參數(shù)之間的約束關(guān)系對(duì)其中6個(gè)輸入控件的參數(shù)值之間進(jìn)行細(xì)致嚴(yán)密的分析,分析出它們之間的約束類型,并且由此能生成k維的輸入?yún)?shù)依賴關(guān)系集。
具體的約束關(guān)系見表1:例如:日期中的日受到月份的約束,日也受到年份的約束;籍貫中的市受到省的約束;不同的系分屬不同的學(xué)院,故系受到學(xué)院的約束;而專業(yè)分屬不同的系來招生管理,因此專業(yè)受到系的約束;學(xué)籍狀況包含在讀、休學(xué)和畢業(yè),一般學(xué)校都有學(xué)生在校修學(xué)的最長(zhǎng)期限,不可能有超過6年還在讀的現(xiàn)象等,因此學(xué)籍狀況受到出生年月日的約束等;當(dāng)前學(xué)歷和出生年月日有約束關(guān)系等。這些約束關(guān)系不僅可以幫助軟件和組件使用者正確地使用,還可以在逆向構(gòu)建模型時(shí),對(duì)組合測(cè)試用例的精簡(jiǎn)起到很大的幫助。
表1 學(xué)籍查詢系統(tǒng)學(xué)生界面的輸入?yún)?shù)約束關(guān)系
我們?cè)谝陨系倪@些約束關(guān)系中,抽出了一些約束關(guān)系,并對(duì)相關(guān)輸入?yún)?shù)進(jìn)行相應(yīng)的取值:(1)性別(S):男,女;(2)出生年(Y): 1951,1952,1953,…,1988,2016; (3)學(xué)籍狀況(SS):在讀,畢業(yè),休學(xué);(4)當(dāng)前學(xué)歷(E):高中,中專,大專,本科,雙學(xué)士,碩士;(5)專業(yè)(P):計(jì)算機(jī)科學(xué)與技術(shù),網(wǎng)絡(luò)工程,土木工程,經(jīng)濟(jì)管理,園林設(shè)計(jì),材料工程,動(dòng)畫設(shè)計(jì),機(jī)械工程,自動(dòng)化,財(cái)務(wù)管理……(專業(yè)24個(gè));(6)學(xué)院(X):電信學(xué)院, 機(jī)電學(xué)院, 材化學(xué)院, 管理學(xué)院, 法政學(xué)院, 數(shù)理學(xué)院, 建筑土木學(xué)院。
在這個(gè)實(shí)例系統(tǒng)界面中,為測(cè)試的高效和方便,利用這些輸入?yún)?shù)的約束關(guān)系,要把全組合測(cè)試用例集和二維組合測(cè)試用例集中包含無效組合的用例剔除出來,實(shí)驗(yàn)結(jié)果如下:
實(shí)驗(yàn)1:全組合測(cè)試用例生成和精簡(jiǎn): 全組合用例數(shù)A:21*461*31*61*241*1=39744 約束關(guān)系數(shù): 4 精簡(jiǎn)后用例數(shù)R:約等于39 744-19 008-5 184=15 552 R/A (%):39.1
實(shí)驗(yàn)2:成對(duì)組合測(cè)試用例生成和精簡(jiǎn): 生成的成對(duì)組合用例數(shù)P:1 584 約束關(guān)系數(shù):4 成對(duì)組合用例集中包含無效參數(shù)組合的用例數(shù):552 不影響覆蓋率而剔除的無效用例數(shù):305 精簡(jiǎn)后用例數(shù)R:1 279 R/P (%):<80.7
上述實(shí)驗(yàn)的測(cè)試用例數(shù)還是比較大的,本實(shí)驗(yàn)只是用來說明用輸入?yún)?shù)的依賴關(guān)系可以精簡(jiǎn)測(cè)試用例集。實(shí)驗(yàn)結(jié)果表明,利用此方法可在測(cè)試用例數(shù)目上,使全組合和二維組合用例集得到不同程度地精簡(jiǎn)。本實(shí)驗(yàn)中,用例集精簡(jiǎn)后的用例數(shù)和精簡(jiǎn)前的用例數(shù)之比分別為39.1%和小于80.7%,這說明該方法具有實(shí)用價(jià)值。
在逆向建模測(cè)試過程中,測(cè)試用例的生成和精簡(jiǎn)是一個(gè)不可回避的問題。在本文中詳細(xì)地?cái)⑹隽送ㄟ^各種方式可以獲得系統(tǒng)和組件的輸入信息,并利用參數(shù)約束關(guān)系來精簡(jiǎn)成對(duì)組合測(cè)試用例集。從實(shí)驗(yàn)數(shù)據(jù)來看,在一些情況下利用輸入?yún)?shù)的約束關(guān)系來精簡(jiǎn)組合測(cè)試用例集的方法是可行的。
[1] BERTOLION A. Software testing research:Achievements,challenges,dreams[C]. New York:Future of Software Engineering,IEEE,2007:85-103.
[2] 劉明. 軟件逆向工程分析技術(shù)研究及應(yīng)用[J].航空計(jì)算技術(shù),2011,41(2):93-95,104.
[3] NORITAKA K,TATSUHIRO T,TOHRU K.A new method for constructing pair-wise covering designs for software testing[J].Information Processing Letters,2002,81(2):85-91.
[4] MANDL R.Orthogonal latin squares:An application of experimental design to compiler testing[J].Communications of the ACM,1985,28(10):1054-1058.
[5] KUHN D R,WALLACE D R.Software fault interactions and implications for software testing[J].IEEE Transactions on Software Engineering,2004,30(6):418-421.
[6] COHEN D,DALAL S R,FREDMAN M L,et al.The AETG system:An approach to testing based on combinatorial design[J].IEEE Transaction on Software Engineering,1997,23(7):437-444.
[7] 史亮.基于解空間樹的組合測(cè)試用例生成[J].計(jì)算機(jī)學(xué)報(bào),2006,29(6):849-857.
[8] TAI K C,YU L.A test generation strategy for pairwise testing[J].IEEE Transactions on Software Engineering,2002,28(1):109-111.
[9] 于秀山,于洪敏.軟件測(cè)試新技術(shù)技術(shù)與實(shí)踐[M].北京:電子工業(yè)出版社,2006:13-17.
Test Case Generation Method in Reverse-model Test
WANG Lixin
(School of Electronic and Information Engineering, Anhui Jianzhu University, Hefei Anhui 230022, China)
Firstly the concept of reverse modeling test is briefly introduced, and then the process of reverse modeling and testing is described. The method of test case generation in the process of reverse modeling is presented, and a reduction method of test suite based on parameter constraint is also given. At last the experimental data of this method are shown.
reverse modeling; software testing; combined coverage testing
2017-03-17
安徽省教育廳自然科學(xué)基金(KJ2011B041);安徽建筑大學(xué)博士及引進(jìn)人才基金資助項(xiàng)目(建院函(2012)33號(hào));安徽省教育廳自然科學(xué)研究重點(diǎn)項(xiàng)目(KJ2016A155)
王立新(1966-),男,安徽合肥人,副教授,博士,主要從事軟件測(cè)試研究。E-mail:wlxhs@ahjzu.edu.cn
TP301.6
A
1004-2237(2017)03-0022-05
10.3969/j.issn.1004-2237.2017.03.005