楊 羊,何柳柳,尚 穎,李 征
(北京化工大學(xué)信息科學(xué)與技術(shù)學(xué)院,北京 100029)
隨著互聯(lián)網(wǎng)的普及和快速發(fā)展,Web應(yīng)用程序已經(jīng)成為人們?nèi)粘I畹囊徊糠郑瑫r(shí)Web應(yīng)用程序的不穩(wěn)定性或不安全性也常常引發(fā)個(gè)人隱私泄漏甚至高額的經(jīng)濟(jì)損失。早在2000年Ravi等人[1]提到,Web應(yīng)用程序故障在媒體公司的損失為每小時(shí)15萬美金,在信用卡交易市場(chǎng)的損失為每小時(shí)240萬美金,在金融市場(chǎng)的損失為每小時(shí)650萬美金。測(cè)試是保障Web應(yīng)用程序質(zhì)量的有效手段,具有十分重要的意義。
Web應(yīng)用程序具有交互性、動(dòng)態(tài)性和低耦合性等,使得傳統(tǒng)軟件的測(cè)試方法不能對(duì)Web應(yīng)用程序進(jìn)行有效的測(cè)試,如Web應(yīng)用程序的控制流通過用戶的操作交互形成、Web應(yīng)用程序的部分頁面是動(dòng)態(tài)生成的、前后端模塊分別開發(fā)的模式等?;谀P偷臏y(cè)試方法是目前Web應(yīng)用程序測(cè)試中比較普遍采用的方法[2],核心是通過Web應(yīng)用程序建模生成有效的測(cè)試用例來檢測(cè)程序中的錯(cuò)誤或者漏洞。通常,研究者將傳統(tǒng)軟件測(cè)試領(lǐng)域中的建模方法與Web應(yīng)用程序的部分特性結(jié)合建立UML(Uniform Modeling Language)模型[3]、FSM(Finite State Machine)模型[4,5]和EFSM(Extended Finite State Machine)模型[6]等,進(jìn)而生成測(cè)試用例對(duì)Web應(yīng)用程序進(jìn)行測(cè)試。
Offutt等人[7,8]進(jìn)一步提出基于Web應(yīng)用程序表示層建立的原子段模型ASM(Atomic Section Model),根據(jù)服務(wù)器端與客戶端的交互,通過源代碼的解析,識(shí)別原子段、組件及其之間的交互,構(gòu)建模型。該模型可以詳細(xì)描述Web應(yīng)用程序的交互性、動(dòng)態(tài)性和低耦合性。
在基于ASM模型的測(cè)試生成中,通過無效訪問狀態(tài)和無效遷移路徑來擴(kuò)充測(cè)試用例,實(shí)現(xiàn)用戶不可預(yù)期行為的測(cè)試[7]。但是,由于無效訪問狀態(tài)和無效遷移路徑的引入,不可避免地帶來了測(cè)試用例空間爆炸的問題。
本文通過研究ASM模型的構(gòu)建過程和相應(yīng)的測(cè)試用例生成方法,提出基于模型約簡(jiǎn)的測(cè)試用例空間優(yōu)化方法,定義面向ASM模型測(cè)試用例生成的等價(jià)狀態(tài)和等價(jià)遷移,進(jìn)一步提出合并準(zhǔn)則約簡(jiǎn)ASM模型,有效控制無效訪問狀態(tài)和無效路徑數(shù)量,優(yōu)化測(cè)試用例空間。實(shí)驗(yàn)表明,本文所提方法在不影響原子段覆蓋和錯(cuò)誤檢測(cè)效果的基礎(chǔ)上,有效地約減了74.38%的測(cè)試用例空間。
本文組織結(jié)構(gòu)如下:第1節(jié)介紹Web應(yīng)用程序的測(cè)試以及基于ASM模型的測(cè)試方法,第2節(jié)介紹ASM模型及其測(cè)試用例生成方法,第3節(jié)介紹基于ASM模型約簡(jiǎn)方法,第4節(jié)結(jié)合實(shí)例給出相關(guān)實(shí)驗(yàn)分析,第5節(jié)介紹相關(guān)工作,最后進(jìn)行總結(jié)。
Web應(yīng)用程序由完成特定任務(wù)的各種Web組件(Web Components)構(gòu)成,并通過Web將服務(wù)展示給用戶。在實(shí)際的應(yīng)用中,Web應(yīng)用程序的組件包括多個(gè)Servlet、JSP頁面、HTML文件以及圖像文件等。所有這些組件相互協(xié)調(diào)為用戶提供一組完整的服務(wù)。
Web應(yīng)用程序的執(zhí)行過程中,用戶通過客戶端的操作向服務(wù)器端發(fā)送請(qǐng)求(Post),服務(wù)器端對(duì)用戶的請(qǐng)求進(jìn)行響應(yīng),用戶獲得(Get)需要的內(nèi)容。
基于表示層的Web應(yīng)用程序的執(zhí)行,通過組件的遷移,完成用戶的需求。組件的遷移用來描述組件連接或者耦合的形式。根據(jù)Web應(yīng)用程序執(zhí)行形式的不同,組件的遷移類型又可分為五類[7],分別為簡(jiǎn)單跳轉(zhuǎn)遷移、表單鏈接遷移、組件表達(dá)遷移、操作遷移和重定向遷移,其中組件表達(dá)遷移是指組件的執(zhí)行,形成一條從組件到原子段的遷移,是組件到組件內(nèi)的遷移;操作遷移是指用戶通過瀏覽器上的操作(如前進(jìn)、后退和刷新等)形成的組件遷移;重定向遷移指不可控制的服務(wù)器端組件的遷移,如Java Servlet中的重定向方法,對(duì)不同的URL(Uniform Resource Locator)重新生成相同的請(qǐng)求。
Offutt等人[7]基于Web應(yīng)用程序表示層建立的ASM模型,通過解析源代碼,識(shí)別組件內(nèi)部執(zhí)行邏輯和組件間遷移關(guān)系,其解析的主要對(duì)象是原子段,并通過程序設(shè)計(jì)的跳轉(zhuǎn)或者方法調(diào)用形成ASM模型,對(duì)原子段定義如下。
定義1(原子段(Atomic Section)) 如果一段HTML中的任意一部分被發(fā)送給客戶端,則整個(gè)段都會(huì)被發(fā)送給客戶端,具有這種性質(zhì)的HTML代碼段,稱為原子段。
通過解析源代碼,識(shí)別服務(wù)器端發(fā)送給客戶端的原子段,解析原子段之間的邏輯結(jié)果,形成原子段到組件的描述。ASM模型是兩層模型,底層是組件交互模型CIM(Components Interaction Model),通過對(duì)組件的解析,形成組件內(nèi)部原子段的控制流圖;上層是應(yīng)用遷移圖ATG(Application Transition Graph),通過CIM中原子段以及組件與其他組件的調(diào)用關(guān)系形成組件間的遷移圖。測(cè)試用例主要基于應(yīng)用遷移圖生成,應(yīng)用遷移圖定義如下:
定義2(應(yīng)用遷移圖) ATG是一個(gè)四元組〈Γ,Θ,Σ,α〉。Γ代表Web軟件組件的有限集合,Γ={CIM1,CIM2,…,CIMn};Θ代表Γ中的Web應(yīng)用程序組件間的遷移的集合,Θ=T1∪T2∪…∪Tn,Ti是CIMi的遷移的結(jié)合;Σ是指定義Web應(yīng)用程序狀態(tài)的變量的集合,Σ中的變量是從組件到頁面?zhèn)鬟f的參數(shù);α是起始頁面的集合,α={S1,S2,…,Sn},Si是組件CIMi的起始頁面。
基于圖的測(cè)試方法通常是基于圖生成測(cè)試路徑及測(cè)試數(shù)據(jù)。由于ASM模型中遷移參數(shù)只是客戶端與服務(wù)器端的參數(shù)傳遞,不涉及數(shù)據(jù)層的數(shù)據(jù)傳輸,因此基于ASM模型的測(cè)試用例生成只包括測(cè)試路徑的生成,即基于ASM模型的遷移路徑。
ASM模型中組件之間的遷移,根據(jù)用戶操作的不同,其遷移類型、遷移帶有的信息均不同。通過遷移的定義可以來描述用戶不同操作導(dǎo)致的組件間的遷移,因此對(duì)遷移的定義如下:
定義3(遷移) ASM模型的遷移是指從一個(gè)組件到達(dá)另一個(gè)組件的過程,即遷移ti可描述為源狀態(tài)Source(ti),通過帶有Label(ti)的Type(ti)類型遷移到達(dá)目標(biāo)狀態(tài)Target(ti),即Source(ti)[Label(ti)](Type(ti))Target(ti)。其中,Label(ti)表示遷移帶有的標(biāo)簽;Type(ti)表示遷移類型,遷移的類型包括簡(jiǎn)單跳轉(zhuǎn)遷移、表單鏈接遷移、組件表達(dá)遷移、操作遷移和重定向。
基于ASM模型生成的測(cè)試路徑是ASM模型的遷移路徑,對(duì)遷移路徑的定義如下:
定義4(遷移路徑) ASM模型的遷移路徑是指ASM模型組件連續(xù)遷移序列,即路徑П=t1t2…ti…tn,其中target(ti)=source(ti+1)(1≤i≤n),П∈Θ。
基于圖生成的遷移路徑是可執(zhí)行路徑,即按照程序員設(shè)計(jì)的遷移,用戶按照預(yù)期操作依次形成遷移路徑中的每個(gè)遷移ti。然而,在Web應(yīng)用程序的實(shí)際運(yùn)行過程中,用戶的行為是不可預(yù)期的,如通過瀏覽器的前進(jìn)/后退按鈕實(shí)現(xiàn)Web應(yīng)用程序非預(yù)期遷移。因此,遷移路徑可行不能保證Web應(yīng)用程序沒有錯(cuò)誤。
ATG不能描述Web應(yīng)用程序?qū)嶋H運(yùn)行過程中用戶行為不可預(yù)期的行為,Offutt等人[7]提出的測(cè)試路徑生成方法,在基于ASM模型生成的主要路徑的基礎(chǔ)上,通過擴(kuò)充無效訪問狀態(tài)和無效遷移路徑,形成可以描述用戶不可預(yù)期行為的測(cè)試用例集。
定義5(無效訪問狀態(tài)) 將非起始頁面中不存在自身循環(huán)的狀態(tài)稱為無效訪問狀態(tài)。
無效訪問是根據(jù)用戶在瀏覽器端進(jìn)行的無目的的或者有目的的操作遷移,如輸入非起始頁面的URL地址,從Web應(yīng)用程序的任意中間位置進(jìn)入訪問。
定義6(無效遷移) 若從源狀態(tài)到目標(biāo)狀態(tài)的遷移不存在,且目標(biāo)狀態(tài)為無效訪問狀態(tài),將這類遷移稱為無效遷移。
無效遷移是由于用戶在瀏覽器端的操作導(dǎo)致的遷移,如后退、刷新、前進(jìn)和URL重寫導(dǎo)致的Web應(yīng)用程序組件的遷移。
基于ASM模型的測(cè)試用例生成方法主要包括以下三步:
(1)基于主要路徑覆蓋生成初始測(cè)試用例。
(2)針對(duì)每個(gè)無效訪問狀態(tài)生成基于無效訪問狀態(tài)的無效遷移。
(3)對(duì)(1)中生成的測(cè)試用例,通過添加無效訪問狀態(tài)和無效遷移進(jìn)行擴(kuò)充。具體擴(kuò)充方法為:在以步驟(2)中無效遷移的源狀態(tài)為目標(biāo)狀態(tài)的遷移末尾添加無效遷移,并補(bǔ)充簡(jiǎn)單路徑,進(jìn)而形成從無效訪問狀態(tài)到原目標(biāo)狀態(tài)的全部簡(jiǎn)單路徑,則完成測(cè)試用例的補(bǔ)充。
該測(cè)試用例生成方法,在傳統(tǒng)的基于模型的測(cè)試用例生成方法的基礎(chǔ)上,通過擴(kuò)充無效訪問狀態(tài)和無效遷移路徑,形成覆蓋用戶非預(yù)期行為的測(cè)試用例集。
然而,隨著Web應(yīng)用程序規(guī)模的擴(kuò)大,無效訪問狀態(tài)和無效遷移路徑的增多,不可避免地會(huì)導(dǎo)致測(cè)試用例空間的爆炸。
Web應(yīng)用程序是高內(nèi)聚低耦合的軟件系統(tǒng)。內(nèi)聚性越高,表明組件的設(shè)計(jì)越合理,系統(tǒng)的穩(wěn)定性越高;耦合性越低,說明組件之間的獨(dú)立性越高,Web應(yīng)用程序的質(zhì)量越高[9]。隨著Web應(yīng)用程序規(guī)模的擴(kuò)大,Web應(yīng)用程序的低耦合性和交互性相應(yīng)加強(qiáng),即表現(xiàn)為組件數(shù)目的增多和組件間遷移數(shù)目的增加。
基于Web應(yīng)用程序表示層建立的ASM模型,詳細(xì)描述了Web應(yīng)用程序低耦合下的動(dòng)態(tài)性和交互性。根據(jù)ASM模型的定義,隨著Web應(yīng)用程序規(guī)模的擴(kuò)大,其底層CIM描述單個(gè)組件內(nèi)原子段的動(dòng)態(tài)執(zhí)行過程,不受Web應(yīng)用程序規(guī)模的影響;其上層ATG描述所有組件間的遷移關(guān)系,受Web應(yīng)用程序規(guī)模的直接影響。
基于ASM模型的測(cè)試用例生成方法考慮了用戶非預(yù)期行為,生成的測(cè)試用例數(shù)目隨著Web應(yīng)用程序規(guī)模的擴(kuò)大而增加,導(dǎo)致測(cè)試用例空間的爆炸測(cè)試用例數(shù)增加的原因,一方面是無效訪問狀態(tài)和無效遷移路徑數(shù)目的增加導(dǎo)致可擴(kuò)充數(shù)目變多,另一方面是基于主要路徑覆蓋的測(cè)試用例可擴(kuò)充位置產(chǎn)生的組合眾多。
通常采用基于模型的約簡(jiǎn)或最小化來減少或壓縮狀態(tài)空間[10],以解決狀態(tài)空間爆炸的問題。針對(duì)狀態(tài)模型,基本的解決方案就是合并遷移和狀態(tài)。
根據(jù)ASM模型的定義以及測(cè)試用例生成方法,為了有效避免狀態(tài)空間爆炸問題,在不影響Web應(yīng)用程序測(cè)試效果的基礎(chǔ)上,通過定義等價(jià)狀態(tài)和等價(jià)遷移來對(duì)原模型進(jìn)行約簡(jiǎn),減少了狀態(tài)和遷移數(shù)量,進(jìn)一步來約減測(cè)試用例集,有效地壓縮測(cè)試用例空間。
根據(jù)ASM模型定義的組件之間的遷移,根據(jù)用戶操作的不同,其遷移類型、遷移帶有的信息均有不同。因此,對(duì)于擁有相同源狀態(tài)和目標(biāo)狀態(tài)的遷移,如果遷移類型或者遷移標(biāo)簽不同,則不能作為等價(jià)遷移進(jìn)行合并。
此外,ASM模型的每個(gè)組件都分別實(shí)現(xiàn)獨(dú)自的功能,每條遷移都是根據(jù)用戶在表示層的操作形成的組件的遷移,從同一源狀態(tài)出發(fā)的多個(gè)目標(biāo)狀態(tài)不是都可以作為等價(jià)狀態(tài)合并的狀態(tài)。
因此,對(duì)等價(jià)遷移和等價(jià)狀態(tài)的定義如下:
定義7(等價(jià)遷移) 對(duì)于任意遷移ti和tj,i≠j,若滿足:
(1)Type(ti)=Type(tj);
(2)Label(ti)=Label(tj);
(3)Source(ti)=Source(tj) &&Target(ti)=Target(tj)。
則ti和tj為等價(jià)遷移,記為ti≌tj。
定義8(等價(jià)狀態(tài)) 對(duì)于任意目標(biāo)狀態(tài)Target(ti) 和Target(tj),i≠j,若滿足:
(1)任意遷移tm,滿足Source(tm)≠Target(ti) 或Source(tm)≠Target(tj);
(2)Source(ti)=Source(tj);
(3)Label(ti)=Label(tj)=NULL;
(4)Type(ti)=Type(tj)。
則Target(ti)和Target(tj)是等價(jià)狀態(tài),記為Target(ti)≌Target(tj)。
根據(jù)等價(jià)遷移和等價(jià)狀態(tài)的定義,定義以下兩個(gè)約簡(jiǎn)規(guī)則。
規(guī)則1對(duì)于ASM模型中的任意兩個(gè)遷移ti和tj,i≠j,如果滿足ti≌tj,則合并遷移為t′,其中t′的標(biāo)簽信息為L(zhǎng)abel(ti),遷移類型為Type(ti)。
基于遷移合并對(duì)模型的約簡(jiǎn),模型中任意滿足等價(jià)遷移定義的遷移均可以按照規(guī)則1進(jìn)行遷移合并?;谝?guī)則1對(duì)ASM模型進(jìn)行基于遷移的約簡(jiǎn),其約簡(jiǎn)前后示意圖如圖1所示。
Figure 1 Schematic of transitions merging圖1 遷移合并示意圖
規(guī)則2對(duì)于ASM模型中的任意兩個(gè)目標(biāo)狀態(tài)Target(ti)和Target(ti),i≠j,如果滿足Target(ti)≌Target(tj),則合并狀態(tài)為s′,到達(dá)s′的遷移為ti和tj。
基于狀態(tài)對(duì)模型的約簡(jiǎn),只適用于ASM模型的終止?fàn)顟B(tài)?;谝?guī)則2對(duì)模型進(jìn)行基于狀態(tài)的約簡(jiǎn),其約簡(jiǎn)前后的示意圖如圖2所示。
規(guī)則1約定如何合并從源狀態(tài)到目標(biāo)狀態(tài)的多條相同遷移。合并后的模型,沒有引入新的遷移和新的狀態(tài),則不會(huì)產(chǎn)生新的無效訪問狀態(tài)和無效遷移路徑。遷移的合并,使得從源狀態(tài)到目標(biāo)狀態(tài)的遷移數(shù)量有效減少了,但是從源狀態(tài)到目標(biāo)狀態(tài)的遷移關(guān)系不產(chǎn)生影響。因此,基于約簡(jiǎn)后模型生成的測(cè)試用例與原有測(cè)試用例是等價(jià)的,并且通過減少遷移的數(shù)量,減少了無效遷移的數(shù)量,最終實(shí)現(xiàn)無效遷移路徑數(shù)量的減少。
Figure 2 Schematic of states merging圖2 狀態(tài)合并示意圖
規(guī)則2約定如何合并一個(gè)源狀態(tài)經(jīng)過相同的操作到達(dá)的多個(gè)目標(biāo)狀態(tài)。合并后的模型,從源狀態(tài)出發(fā)的遷移,沒有引入新的遷移類型和標(biāo)簽,引入的新狀態(tài)是原有狀態(tài)的合并狀態(tài),從而引入新的遷移。新的遷移與原有遷移,是遷移標(biāo)簽和類型相同的遷移,并且滿足相同的源狀態(tài)和相同的目標(biāo)狀態(tài)(原目標(biāo)狀態(tài)是新目標(biāo)狀態(tài)的一個(gè)子集),因此新的遷移可以視為是與原有遷移的等價(jià)遷移。根據(jù)規(guī)則1的約定,基于等價(jià)遷移的模型約簡(jiǎn)生成的測(cè)試用例與原有測(cè)試用例是等價(jià)的,因此基于等價(jià)狀態(tài)的模型約簡(jiǎn)生成的測(cè)試用例與原有測(cè)試用例也是等價(jià)的。并且,通過狀態(tài)的合并實(shí)現(xiàn)了無效訪問狀態(tài)數(shù)和無效遷移路徑數(shù)的減少,有效壓縮了測(cè)試用例空間。
依據(jù)規(guī)則1和規(guī)則2對(duì)ASM模型的約簡(jiǎn)是一個(gè)迭代的過程?;诘葍r(jià)狀態(tài)的狀態(tài)合并,產(chǎn)生新的等價(jià)遷移,進(jìn)一步基于等價(jià)遷移進(jìn)行合并,實(shí)現(xiàn)ASM模型的最小化,可以最大化約簡(jiǎn)測(cè)試用例空間。
為了驗(yàn)證ASM模型約簡(jiǎn)后,基于ASM模型對(duì)Web應(yīng)用程序測(cè)試的有效性,本文提出如下研究問題,并通過實(shí)驗(yàn)進(jìn)行驗(yàn)證。
RQ1:約簡(jiǎn)后的ASM模型對(duì)測(cè)試用例空間的壓縮效果如何?
RQ2:約簡(jiǎn)后的ASM模型對(duì)Web應(yīng)用程序的原子段覆蓋率有何影響?
RQ3:約簡(jiǎn)后的ASM模型生成的測(cè)試用例對(duì)Web應(yīng)用程序測(cè)試的影響如何?
本文以中醫(yī)藥物質(zhì)管理系統(tǒng)CTMMS(Chinese Traditional Medicine Management System)為實(shí)驗(yàn)對(duì)象,進(jìn)行ASM模型建立和測(cè)試用例生成研究。
按照ASM模型的定義,解析Web應(yīng)用程序源代碼,自動(dòng)構(gòu)建ASM模型,并使用開源軟件Graphviz[11]繪制狀態(tài)圖。最后,基于狀態(tài)圖實(shí)現(xiàn)測(cè)試用例的自動(dòng)生成。
基于ASM模型的測(cè)試用例生成辦法,通過測(cè)試用例的擴(kuò)充形成循環(huán)測(cè)試路徑,針對(duì)循環(huán)測(cè)試路徑目前沒有工具能夠?qū)崿F(xiàn)測(cè)試用例的自動(dòng)執(zhí)行,因此本研究的實(shí)驗(yàn)結(jié)果通過手動(dòng)分析的方法來評(píng)估約簡(jiǎn)的ASM模型對(duì)原子段覆蓋率和測(cè)試效果的影響。
中醫(yī)藥物質(zhì)管理系統(tǒng)基于J2EE框架,該系統(tǒng)的實(shí)現(xiàn)包括JSP(Java Server Page)和Java Servlet,使用MVC模型,數(shù)據(jù)存儲(chǔ)在SQL Server數(shù)據(jù)庫(kù)中,利用Eclipse for Java EE集成開發(fā)環(huán)境,及CSS+HTML開發(fā)。
中醫(yī)藥物質(zhì)管理系統(tǒng)需要用戶輸入用戶名和密碼進(jìn)行登錄,主要操作包括添加、查詢、修改、刪除等。中醫(yī)藥物質(zhì)的信息都存儲(chǔ)在數(shù)據(jù)庫(kù)里,這個(gè)系統(tǒng)包括11個(gè)JSP頁面和1個(gè)Servlet,其應(yīng)用遷移圖如圖3所示。操作遷移是用戶在瀏覽器端的操作,無法通過源代碼進(jìn)行解析,因此圖3中不包括操作遷移。此外,組件表達(dá)遷移是組件到達(dá)組件內(nèi)部的遷移,由于本研究只涉及ASM模型的上層ATG,因此組件表達(dá)遷移直接描述為從組件到組件的遷移。基于中醫(yī)藥物質(zhì)管理系統(tǒng)的表示層生成的ASM模型上層ATG,其應(yīng)用遷移圖共12個(gè)狀態(tài)、57條遷移。
圖3中,如CTMCLServlet通過(info)信息形成相同的遷移到達(dá)Error.jsp,則從狀態(tài)CTMCLServlet到狀態(tài)Error.jsp共有3條簡(jiǎn)單路徑,均是從CTMCLServlet經(jīng)過(info)信息的提交形成組件表達(dá)遷移。
Figure 3 ATG of the CTMMS圖3 中醫(yī)藥物質(zhì)管理系統(tǒng)應(yīng)用遷移圖
CTMCLServlet是Web應(yīng)用程序的控制層,處理用戶在瀏覽器端的請(qǐng)求,若用戶的請(qǐng)求符合程序設(shè)定的要求,則根據(jù)用戶的請(qǐng)求將相應(yīng)的視圖(.jsp)顯示給用戶。從CTMCLServlet到Error.jsp的遷移是由于用戶在以CTMCLServlet為后繼的遷移中填寫了錯(cuò)誤的信息,CTMCLServlet組件內(nèi)部多個(gè)原子段分別處理不同的請(qǐng)求,按照程序邏輯執(zhí)行的顯示異常,提示Error.jsp。
由于本研究針對(duì)ASM模型的上層ATG進(jìn)行研究,其組件內(nèi)部的程序邏輯是可以采用傳統(tǒng)軟件的測(cè)試方法進(jìn)行測(cè)試,Web應(yīng)用程序表示層均是錯(cuò)誤頁面Error.jsp,對(duì)該遷移進(jìn)行合并,不影響對(duì)Web應(yīng)用程序表示層的測(cè)試。
對(duì)圖3的應(yīng)用遷移圖,根據(jù)遷移合并原則進(jìn)行模型約簡(jiǎn),約簡(jiǎn)后應(yīng)用遷移圖如圖4所示,圖中虛線表示合并后的遷移。
ASM模型測(cè)試用例的生成是通過添加無效狀態(tài)來擴(kuò)充無效訪問路徑,那么無效狀態(tài)的減少,必然能優(yōu)化測(cè)試用例,減少測(cè)試用例的數(shù)量?;诖?,在遷移合并后,判斷模型中是否存在等價(jià)狀態(tài),若存在將其合并。
Figure 4 ATG after transitions merging圖4 遷移合并后的應(yīng)用遷移圖
從圖4可以看出,Rsub.jsp、RMat.jsp和Smed.jsp作為目標(biāo)狀態(tài),也是應(yīng)用遷移圖的終止?fàn)顟B(tài),到達(dá)這些狀態(tài)的遷移均為ε-遷移,并且從源狀態(tài)出發(fā)的遷移類型相同。
MVC模式開發(fā)的Web應(yīng)用程序,其模型、視圖、控制器是分開單獨(dú)執(zhí)行自身任務(wù)的。.jsp文件作為MVC的視圖層,主要負(fù)責(zé)用戶瀏覽及交互,在視圖中沒有業(yè)務(wù)邏輯和數(shù)據(jù)的處理。視圖只是作為一種輸出數(shù)據(jù)并允許用戶操作的顯示界面。
Rsub.jsp、Rmat.jsp和Smed.jsp作為終止?fàn)顟B(tài),由于沒有后繼,不允許用戶進(jìn)行操作,其功能是輸出數(shù)據(jù)給用戶查看。Rsub.jsp、Rmat.jsp和Smed.jsp均是從相同的源狀態(tài)經(jīng)過相同的遷移后到達(dá)的目標(biāo)狀態(tài),但由于上述頁面的功能不同,導(dǎo)致顯示的數(shù)據(jù)結(jié)果不同。從相同源狀態(tài)出發(fā),到達(dá)Rsub.jsp、Rmat.jsp和Smed.jsp的遷移,其源狀態(tài)均為.jsp文件,是視圖層文件,并且從源狀態(tài)到目標(biāo)狀態(tài)的遷移為不存在信息傳遞的簡(jiǎn)單遷移,用戶在源狀態(tài)頁面上的任一簡(jiǎn)單遷移操作,均會(huì)到達(dá)這三個(gè)狀態(tài)中的任意一個(gè),并且這三個(gè)狀態(tài)不存在后繼操作。對(duì)這三個(gè)狀態(tài)進(jìn)行合并,不影響從源狀態(tài)出發(fā)的遷移的測(cè)試。由于這三個(gè)狀態(tài)是終止?fàn)顟B(tài),則該狀態(tài)必然為無效狀態(tài),通過終止?fàn)顟B(tài)的約簡(jiǎn),減少了無效狀態(tài)的數(shù)量,優(yōu)化了測(cè)試用例。
基于等價(jià)狀態(tài)對(duì)圖4的模型進(jìn)行約簡(jiǎn),約簡(jiǎn)后的模型如圖5所示。
Figure 5 Reduction model of the ATG圖5 模型約簡(jiǎn)后的應(yīng)用遷移圖
這一節(jié)主要通過實(shí)驗(yàn)結(jié)果回答三個(gè)研究問題。
4.3.1 測(cè)試用例空間壓縮分析
通過合并等價(jià)狀態(tài)和等價(jià)遷移,對(duì)中醫(yī)藥物質(zhì)管理系統(tǒng)(CTMMS)建立的ASM模型進(jìn)行約簡(jiǎn),對(duì)比結(jié)果如表1所示,其中,狀態(tài)數(shù)減少2個(gè),遷移數(shù)減少24條,測(cè)試用例數(shù)共減少6 036條,有效壓縮了測(cè)試用例空間。
從表1的約減率可以看出,測(cè)試用例約減率74.38% > 狀態(tài)約減率16.67%+遷移約減率42.11%,這是由于對(duì)ASM模型的約簡(jiǎn)不僅減少了遷移數(shù)量和狀態(tài)數(shù)量,而且減少了可擴(kuò)充的無效訪問狀態(tài)的位置數(shù)量,因此測(cè)試用例數(shù)減少率更高。
4.3.2 原子段覆蓋率分析
按照ASM模型的定義,中醫(yī)藥物質(zhì)管理系統(tǒng)(CTMMS)ASM模型的應(yīng)用遷移圖共有12個(gè)組件,其中,11個(gè)組件是Jsp文件,1個(gè)組件是Servlet,各個(gè)組件的組件表達(dá)式和原子段數(shù)如表2所示。
Table 1 Comparison of the number of test cases before and after reduction表1 約簡(jiǎn)前后測(cè)試用例數(shù)比較
Table 2 Component expression of the CTMMS表2 中醫(yī)藥物質(zhì)管理系統(tǒng)組件表達(dá)式
對(duì)中醫(yī)藥物質(zhì)管理系統(tǒng)(CTMMS)的ASM模型約簡(jiǎn)前后的測(cè)試用例原子段數(shù)目進(jìn)行統(tǒng)計(jì)和對(duì)比,如表3所示。模型約簡(jiǎn)前后,其對(duì)原子段的覆蓋率都沒有達(dá)到100%,共有兩個(gè)原子段沒有覆蓋到。為達(dá)到100%的原子段覆蓋率,對(duì)這兩個(gè)原子段進(jìn)行人工分析,分析結(jié)果表明,這兩個(gè)原子段分別涉及查詢中醫(yī)藥標(biāo)準(zhǔn)物質(zhì)時(shí)只輸入名字不輸入編號(hào)和查詢中醫(yī)藥標(biāo)準(zhǔn)物質(zhì)時(shí)既輸入名字又輸入編號(hào)。
Table 3 Statistics of the atomic section coverage表3 原子段覆蓋率統(tǒng)計(jì)
沒有覆蓋到的原因是由于基于表示層建立的ASM模型不涉及數(shù)據(jù)層的傳輸,即實(shí)際的運(yùn)行過程中該原子段需要特殊值傳遞,在其測(cè)試用例生成過程中無法涉及。分析表明,面向這兩個(gè)原子段的基于表示層的測(cè)試不能發(fā)現(xiàn)軟件錯(cuò)誤。
表3分析結(jié)果表明,ASM模型約簡(jiǎn)前后生成的測(cè)試用例集對(duì)原子段覆蓋率幾乎沒有變化。結(jié)合中醫(yī)藥物質(zhì)管理系統(tǒng)的ASM模型的應(yīng)用遷移圖模型約簡(jiǎn)前后的對(duì)比,分析可以得出,合并的狀態(tài)都不包含原子段。因此,ASM模型的約簡(jiǎn)對(duì)Web應(yīng)用程序的原子段覆蓋率幾乎不產(chǎn)生影響。
4.3.3 測(cè)試效果分析
通過對(duì)中醫(yī)藥物質(zhì)管理系統(tǒng)(CTMMS)進(jìn)行手動(dòng)的測(cè)試,共檢測(cè)出3種類型的錯(cuò)誤,分別是頁面為空、軟件異常以及URL重寫導(dǎo)致空記錄。
中醫(yī)藥物質(zhì)管理系統(tǒng)(CTMMS)的ASM模型約簡(jiǎn)前后的測(cè)試效果統(tǒng)計(jì)對(duì)比,如表4所示。從表4中可以得出,基于無效遷移路徑檢測(cè)的錯(cuò)誤率大于基于主要路徑檢測(cè)的錯(cuò)誤率,約簡(jiǎn)前后檢測(cè)到的錯(cuò)誤類型數(shù)相同,且約簡(jiǎn)后由于總路徑數(shù)量減少,錯(cuò)誤檢測(cè)率增大。因此,ASM模型的約簡(jiǎn)規(guī)則在不影響原子段覆蓋率的情況下,使主要路徑和無效路徑數(shù)量減少,錯(cuò)誤檢測(cè)率增大,對(duì)檢測(cè)到的錯(cuò)誤類型的數(shù)量沒有影響。
Table 4 Statistics of test results表4 測(cè)試結(jié)果統(tǒng)計(jì)
2010年,Offutt等人[7]首次提出基于Web應(yīng)用程序的表示層建立ASM模型,并于2014年對(duì)ASM模型的有效性進(jìn)行了評(píng)估[8]?;谛枨笊傻臏y(cè)試用例與基于ASM模型生成的測(cè)試用例的測(cè)試效果對(duì)比結(jié)果顯示,基于ASM模型的測(cè)試方法能夠檢測(cè)到更多的Web應(yīng)用程序錯(cuò)誤。鄭芳等人[12]在此基礎(chǔ)上提出基于依賴分析的測(cè)試用例的優(yōu)化,避免了重復(fù)執(zhí)行全部測(cè)試用例。
ASM模型是通過解析源碼對(duì)Web應(yīng)用程序建模, Cosma等人[13]基于此使用靜態(tài)分析和可視化的方法來理解Web應(yīng)用程序。
隨著新技術(shù)的不斷發(fā)展,對(duì)Web應(yīng)用程序的測(cè)試提出了新的挑戰(zhàn)。如Ajax技術(shù)在Web應(yīng)用程序中的應(yīng)用,使得網(wǎng)頁可以動(dòng)態(tài)更新頁面內(nèi)容,同樣給針對(duì)Web應(yīng)用程序的建模帶來了挑戰(zhàn)。Wang等人[14]基于用戶會(huì)話的分析建立Web應(yīng)用程序的模型。Marchetto等人[15]給出了一種基于Ajax操作的網(wǎng)頁DOM結(jié)構(gòu)變化的建模方法。賀濤等人[16]在FSM模型的基礎(chǔ)上,引入了UML分層模型對(duì)含有Ajax部分的網(wǎng)頁狀態(tài)進(jìn)行建模。與ASM模型相比,它們無法生成完整的測(cè)試用例,但是也為ASM模型的進(jìn)一步優(yōu)化提供了思考的空間。
Web應(yīng)用程序的快速開發(fā),導(dǎo)致其版本快速更新,原有的測(cè)試用例無法在新版本上得到應(yīng)用,Leotta等人[17]基于DOM元素的變更修復(fù)測(cè)試用例,提高了測(cè)試用例的健壯性。
本文提出一種基于ASM模型約簡(jiǎn)的測(cè)試用例優(yōu)化方法。隨著Web應(yīng)用程序規(guī)模的增大,基于ASM模型的測(cè)試用例生成方法,可以測(cè)試用戶的非預(yù)期行為,但是由于無效訪問狀態(tài)和無效遷移的擴(kuò)充,導(dǎo)致測(cè)試用例空間爆炸。本文通過定義基于ASM模型的等價(jià)遷移和等價(jià)狀態(tài)進(jìn)行遷移和狀態(tài)的合并,有效地減少了測(cè)試用例的數(shù)量。實(shí)驗(yàn)結(jié)果分析表明,基于ASM模型約簡(jiǎn)的測(cè)試用例優(yōu)化,極大壓縮了測(cè)試用例空間,在ASM模型約簡(jiǎn)基礎(chǔ)上生成測(cè)試用例,不影響原子段的覆蓋率,也沒有影響檢測(cè)到的錯(cuò)誤數(shù)目。
[1] Ravi K,Marcia R.E-Business 2.0:Roadmap for success[M].Boston:Addison-Wesley Professional,2000.
[2] Lebeau F,Legeard B,Peureux F,et al.Model-based vulnerability testing for web applications[C]∥Proc of the 6th International Conference on Software Testing,Verification and Validation WorkShops (ICSTW),2013:445-452.
[3] Mubin S A,Jantan A H,Abdullah R,et al.UML-based conceptual design approach for modeling complex processes in web application[J].International Journal of Applied Engineering Research,2016,11(6):4579-4585.
[4] Andrews A A,Offutt J,Alexander R T.Testing web applications by modeling with FSMs[J].Software & Systems Modeling,2005,4(3):326-345.
[5] Anand K.Systems and methods for tokenizing user-generated content to enable the prevention of attacks:U.S.Patent 9,313,223[P].2016-04-12.
[6] Shams M,Krishnamurthy D,Far B.A model-based approach for testing the performance of web applications[C]∥Proc of the 3rd International Workshop on Software Quality Assurance,2006:54-61.
[7] Offutt J,Wu Y.Modeling presentation layers of web applications for testing[J].Software & Systems Modeling,2010,9(2):257-280.
[8] Thummala S,Offutt J.An evaluation of the effectiveness of the atomic section model[C]∥Proc of International Conference on Model Driven Engineering Languages and Systems,2014:35-49.
[9] Lemos A L,Daniel F,Benatallah B.Web service composition:A survey of techniques and tools[J].ACM Computing Surveys (CSUR),2016,48(3):1-33.
[10] Hou Gang, Zhou Kuan-jiu,Yong Jia-wei,et al.Survey of state explosion problem in model checking[J].Computer Science,2013,40(6A):77-86.(in Chinese)
[11] Graphviz[CP/OL].[2016-06-01].http://www.graphviz.org/.
[12] Zheng Fang,Zheng Quan.Web application presentation layer test based dependency analysis[J].Computer & Digital Engineering,2011,39(1):163-167.(in Chinese)
[13] Cosma D C,Mihancea P F.Understanding web applications using component based visual patterns[C]∥Proc of the 23rd International Conference on Program Comprehension,2015:281-284.
[14] Wang W,Sampath S,Lei Y,et al.Using combinatorial testing to build navigation graphs for dynamic web applications[J].Software Testing,Verification & Reliability,2016,26(4):318-346.
[15] Marchetto A,Tonella P,Ricca F.State-based testing of Ajax web applications[C]∥Proc of the 1st International Conference on Software Testing,Verification,and Validation,2008:121-130.
[16] He Tao,Miao Huai-kou,Qian Zhong-sheng.Modeling and test case generation for Ajax-based WA[J].Computer Science,2014,41(8):219-223.(in Chinese)
[17] Leotta M,Stocco A,Ricca F,et al.Using multi-locators to increase the robustness of web test cases[C]∥Proc of the 8th International Conference on Software Testing,2015:1-10.
附中文參考文獻(xiàn):
[10] 侯剛,周寬久,勇嘉偉,等.模型檢測(cè)中狀態(tài)爆炸問題研究綜述[J].計(jì)算機(jī)科學(xué),2013,40(6A):77-86.
[12] 鄭芳,鄭全.基于依賴分析的 Web 應(yīng)用表示層測(cè)試方法研究[J].計(jì)算機(jī)與數(shù)字工程,2011,39(1):163-167.
[16] 賀濤,繆淮扣,錢忠勝.基于 Ajax 技術(shù)的 Web 應(yīng)用的建模與測(cè)試用例生成[J].計(jì)算機(jī)科學(xué),2014,41(8):219-223.