精準(zhǔn)測試從某個(gè)層面來講党远,是賦予了測試用例真正的生命力削解,傳統(tǒng)的測試用例僅僅是一些只能夠依賴人去理解和分析的文本文件而已,在計(jì)算機(jī)和算法層面則沒有存在意義和價(jià)值沟娱。下圖是精準(zhǔn)測試的整體架構(gòu)圖:
大家首先可能會(huì)比較好奇氛驮,“用例魔方”的概念是怎么來的?測試用例魔方是在精準(zhǔn)測試的設(shè)計(jì)济似、開發(fā)和商業(yè)實(shí)踐中自然產(chǎn)生的功能集合的一個(gè)統(tǒng)稱矫废。當(dāng)我們把精準(zhǔn)測試的和用例分析相關(guān)的功能畫成架構(gòu)圖形表示的時(shí)候,它自然而然地看起來就像魔方砰蠢,所謂“魔”則是精準(zhǔn)測試核心算法所賦予的超能力磷脯。
上圖是星云精準(zhǔn)測試系統(tǒng)的總體結(jié)構(gòu)圖,“測試魔方”即分布在左上角區(qū)域娩脾。大家知道精準(zhǔn)測試的核心技術(shù)是測試用例與代碼的追溯關(guān)系的建立赵誓,而在此之上就可以構(gòu)建測試魔方的核心功能區(qū)。如下:
所謂“方”實(shí)際上是代表測試用例的集合柿赊,每個(gè)測試用例用一個(gè)小方塊標(biāo)識俩功,所有測試用例的集合用一個(gè)大方塊。現(xiàn)在來看在精準(zhǔn)測試架構(gòu)下碰声,“用例魔方”所能夠提供的功能(對精準(zhǔn)測試的底層技術(shù)不是很了解的話诡蜓,可以預(yù)先溫習(xí)下《精準(zhǔn)測試框架白皮書》)。精準(zhǔn)測試體系中胰挑,測試用例對應(yīng)的代碼邏輯都可以實(shí)現(xiàn)全自動(dòng)的追溯和存儲(chǔ)蔓罚,因此測試用例就具備了進(jìn)行深入分析的基礎(chǔ)。在精準(zhǔn)測試的用例魔方中瞻颂,目前存在三個(gè)面(隨著后續(xù)功能的增加豺谈,將增加分析的面),即回歸測試用例選取贡这、測試用例聚類分析茬末、測試用最小化,同時(shí)輔之以智能缺陷定位技術(shù)。下面對“用例魔方”做詳細(xì)的說明丽惭,選用的工具為星云精準(zhǔn)測試平臺(tái)ThreadingTest產(chǎn)品系列击奶。
首先介紹回歸測試用例選取。從魔方視圖中可以看到回歸用例選仍鹛汀(主要選取可能影響到的重點(diǎn)用例)柜砾。精準(zhǔn)測試中所謂的回歸測試和自動(dòng)化回歸有很大的差別,我們聽的比較多的自動(dòng)化測試中的回歸其實(shí)是把自動(dòng)化用例重新運(yùn)行的意思换衬,而精準(zhǔn)測試中的回歸測試是通過內(nèi)部算法自動(dòng)選取新版本修改后可能影響到的測試用例痰驱。通過回歸測試用例選取,解決了新版本上線該對哪些用例進(jìn)行測試和重點(diǎn)測試的問題冗疮,這也是敏捷開發(fā)中測試所面臨的最大問題萄唇。下面是回歸測試用例選取的原理圖:
原理介紹:
測試用例A與測試用例B為在版本A中進(jìn)行測試的用例檩帐,其綠圈中A1术幔、A2、A3湃密、B2…等為其測試用例所對應(yīng)的運(yùn)行中采集的函數(shù)信息诅挑。
在版本迭代過程中,版本B也對其測試用例A進(jìn)行了測試泛源,并添加了測試用例C拔妥,精準(zhǔn)測試采集其對應(yīng)的函數(shù)信息。
當(dāng)版本C進(jìn)行迭代發(fā)布時(shí)达箍,精準(zhǔn)測試根據(jù)測試用例A没龙、B、C最后運(yùn)行的版本所對應(yīng)的函數(shù)信息與版本C的版本函數(shù)信息進(jìn)行比較缎玫,根據(jù)變化差異進(jìn)行回歸優(yōu)先級排序硬纤。
① 測試用例A最后運(yùn)行在版本B中赃磨,對應(yīng)的函數(shù)信息為A1筝家、A2、B1邻辉、A3溪王,對比版本C中的函數(shù)無代碼變化,計(jì)算回歸優(yōu)先級值為0值骇。
∮狻② 測試用例B因?yàn)樵诎姹綛中未運(yùn)行,最后運(yùn)行的版本為A吱瘩,版本A的測試數(shù)據(jù)B1芒珠、B2、B3搅裙、C3和版本C中的函數(shù)比對皱卓,得出函數(shù)C3的代碼有變化裹芝,計(jì)算回歸優(yōu)先級值為1。
∧戎③ 測試用例C最后運(yùn)行在B嫂易,對應(yīng)的函數(shù)信息為C1、C2掐禁、C3怜械、A3,和版本C中的函數(shù)比對傅事,得出函數(shù)C3的代碼有變化缕允,函數(shù)C2進(jìn)行了刪除,計(jì)算回歸優(yōu)先級值為3蹭越。
≌媳尽④ 結(jié)果進(jìn)行回歸優(yōu)先級排序,得出測試用例C回歸優(yōu)先級最高優(yōu)先值為3>測試用例B回歸優(yōu)先值為1>測試用例A响鹃,回歸優(yōu)先值0驾霜,不需要回歸。
當(dāng)新版本上線后买置,精準(zhǔn)測試系統(tǒng)會(huì)自動(dòng)給出本次發(fā)布波及到的測試用例列表以及收到波及的程度粪糙。如下圖:
通常測試用例的分類都是人工根據(jù)功能組織進(jìn)行硬性歸類的,在精準(zhǔn)測試體系中忿项,用例魔方中的測試用例為聚類分析蓉冈。由于測試用例都包含有對應(yīng)的內(nèi)部代碼執(zhí)行邏輯,執(zhí)行路徑直接可以通過代碼塊或者函數(shù)進(jìn)行舉例計(jì)算轩触,例如一個(gè)程序總共有10個(gè)函數(shù)寞酿。
“用例魔方”中的聚類結(jié)果具有非常實(shí)用的價(jià)值,體現(xiàn)在以下幾點(diǎn):
1.通過用例聚類結(jié)果怕膛,可以從管理端審核測試執(zhí)行的正確性熟嫩。傳統(tǒng)測試一般由人工執(zhí)行,因此想確認(rèn)測試用例是否本身執(zhí)行有錯(cuò)誤褐捻,或者是否按照預(yù)先設(shè)定的要求執(zhí)行了掸茅,是非常困難的,這也是測試管理的成本一直很高的一個(gè)重要原因柠逞。通過對精準(zhǔn)測試“用例魔方”的聚類結(jié)果分析昧狮,若兩個(gè)功能迥異、本不應(yīng)該分到一起的測試用例被分到了一組板壮,那么產(chǎn)品經(jīng)理或者項(xiàng)目管理者會(huì)非常容易識別出這里面存在測試用例的執(zhí)行錯(cuò)誤逗鸣,并在產(chǎn)品發(fā)布的最后一環(huán),及時(shí)處理。
2.通過“用例魔方”的測試用例聚類結(jié)果這一功能撒璧,可以發(fā)現(xiàn)缺陷分布的密集區(qū)域透葛。因?yàn)榫垲惖囊罁?jù)是用例執(zhí)行對應(yīng)的代碼路徑差異信息,聚類結(jié)果充分而真實(shí)的體現(xiàn)了用例之間的空間感卿樱,結(jié)果非常有意義僚害。缺陷的分布一般是有規(guī)律的:功能相近的用例如果有出現(xiàn)錯(cuò)誤,那么同類型用例出錯(cuò)的概率也更大繁调。所以當(dāng)時(shí)間不充足的情況下萨蚕,可以依據(jù)聚類結(jié)果,每個(gè)用例聚類簇隨機(jī)選幾個(gè)蹄胰。如果沒有bug岳遥,就可以放松對簇內(nèi)其他用例的考察,如果發(fā)現(xiàn)了缺陷裕寨,那么其它簇內(nèi)的用例也需要重點(diǎn)考察浩蓉。
在企業(yè)大量應(yīng)用自動(dòng)化測試場景下,隨著日積月累帮坚,產(chǎn)生了大量的妻往、邏輯重復(fù)的測試用例互艾。通過“用例魔方”的測試用例集最小化算法试和,可以把重復(fù)或者存在包含關(guān)系的用例從用例集中剔除出去。原理非常簡單:假設(shè)兩個(gè)用例纫普,在代碼覆蓋上存在完全包含關(guān)系阅悍,那么被包含的用例就可以從用例集中剔除。算法所依據(jù)的數(shù)據(jù)依然是測試用例與代碼的追溯關(guān)系技術(shù)數(shù)據(jù)昨稼。
“用例魔方”中另外一個(gè)精彩的功能是智能的缺陷定位技術(shù)节视,星云精準(zhǔn)測試提供了3種計(jì)算公式。
通過智能缺陷定位假栓,測試工程師僅需要標(biāo)記用例從功能角度的執(zhí)行狀態(tài)(是否存在缺陷)寻行,再結(jié)合星云精準(zhǔn)測試“用例魔方”自動(dòng)記錄的對應(yīng)程序執(zhí)行的代碼頻譜,就可以對缺陷進(jìn)行代碼級的精準(zhǔn)定位匾荆。
1.源代碼
簡單分析第15行代碼拌蜘,當(dāng)?shù)谑衴<z成立且第十二行x<y不成立且第十四行x<z成立時(shí)即得y<z且x>=y且x<z.此時(shí)可得y<=x<z,中間數(shù)為x,所以此處正確語句應(yīng)為m=x。
2.創(chuàng)建7個(gè)測試用例test1牙丽、test2简卧、test3………..test7并進(jìn)行測試
① test1輸入為3 3 5輸出為3烤芦,預(yù)期輸出為3举娩,符合預(yù)期,此用例記為通過
② test2輸入為1 2 3輸出為2铜涉,預(yù)期輸出為2智玻,符合預(yù)期,此用例記為通過
≤酱③ test3輸入為3 2 1輸出為2尚困,預(yù)期輸出為2,符合預(yù)期链蕊,此用例記為通過
∈绿稹④ test4輸入為5 5 5輸出為5,預(yù)期輸出為5滔韵,符合預(yù)期逻谦,此用例記為通過
⑤ test5輸入為5 3 4輸出為4陪蜻,預(yù)期輸出為4邦马,符合預(yù)期,此用例記為通過
⊙缏簟⑥ test6輸入為2 1 3輸出為1滋将,預(yù)期輸出為2,不符合預(yù)期症昏,此用例記為未通過
∷婷觥⑦ test7輸入為3 2 4輸出為2,預(yù)期輸出為3肝谭,不符合預(yù)期掘宪,此用例記為未通過
3.針對test6、test7提交缺陷攘烛,表明test6與test7輸出與預(yù)期不符
4.打開缺陷分析界面進(jìn)行分析
5.可疑度算法包括如下三種魏滚,可自主選擇
其中aep表示通過且覆蓋到該塊的測試用例的個(gè)數(shù)、anp表示通過且未覆蓋到該塊的測試用例的個(gè)數(shù)坟漱、aef表示未通過且覆蓋到該塊的測試用例的個(gè)數(shù)鼠次、anf表示未通過且覆蓋到該塊的測試用例的個(gè)數(shù)。結(jié)果表示該塊的可疑度芋齿。
6.代碼可視化查看位置
關(guān)聯(lián)源碼之后可根據(jù)代碼可視化定位第十二塊位置腥寇,根據(jù)實(shí)際分析可得第十二塊確實(shí)為缺陷語句,分析過程見第一步沟突。
』拧(大家如果感興趣可以到星云測試的官網(wǎng)上www.teststars.cc 試用。)
精準(zhǔn)測試的精髓在于通過專用測試軟件實(shí)現(xiàn)表層功能和底層代碼的關(guān)聯(lián)惠拭,并且獲取成本很低扩劝。它在測試用例執(zhí)行的過程中庸论,通過軟件示波器以透明方式自動(dòng)獲取兩者的關(guān)聯(lián)關(guān)系。通過精準(zhǔn)測試系統(tǒng)棒呛,使針對用例的深入分析“用例魔方”成為可能聂示。目前精準(zhǔn)測試的核心用例分析算法正在持續(xù)增強(qiáng),“用例魔方”的軟件研發(fā)輔助分析功能簇秒,為軟件測試的智能化鱼喉、專業(yè)化成長,帶來曙光和方向趋观。