您好,登錄后才能下訂單哦!
作為一個軟件測試培訓(xùn)講師,主要側(cè)重在白盒測試培訓(xùn)方面,尤其對C++test比較擅長。最近發(fā)現(xiàn)市面上跳出一款Wings工具,據(jù)說1分鐘可以自動生成100萬行測試代碼,性能方面大大超越C++ test,就想著抽空來實(shí)際的對比看看是不是在吹牛。這兩天索性閉關(guān)好好研究一下。試用下來,發(fā)現(xiàn)Wings的創(chuàng)造團(tuán)隊(duì)真的是非常有才,邏輯非常清楚。我又掐指大致框算一下,整體研發(fā)工作量肯定不小,突破了很多技術(shù)天花板。所以,在開寫之前,首先向Wings創(chuàng)造團(tuán)隊(duì)表達(dá)我真摯的敬意,畢竟在這樣浮躁的社會環(huán)境下,能靜下心來研究創(chuàng)新算法的人太少了。
長話短說,現(xiàn)在把Wings和我熟悉的C++ test做一個對比分析,如果有不對的地方歡迎大家拍磚,也借此機(jī)會轉(zhuǎn)達(dá)想要認(rèn)識Wings開發(fā)團(tuán)隊(duì)的誠懇。
首先Wings與c++ test都是用于生成單元測試驅(qū)動框架的工具。兩者差異在于以下幾點(diǎn):
?。?) 基本普通類型,wings與c++ test生成用例大致相同,wings采用隨機(jī)生成一組或者多組數(shù)值,而c++ test依據(jù)臨界值生成固定的隨機(jī)數(shù)。
例如:c++ test:生成五組測試函數(shù),每個測試函數(shù)分別取最大值,最小值,-1,0,1
Wings:從json中取值,json中的值先隨機(jī)生成,也可以用戶自己修改。
例如:
C++ test針對基本類型:
Wings針對基本類型:
?。?) 數(shù)組類型
數(shù)組作為函數(shù)參數(shù)使用時,分為固定長度和非固定長度。
Wings指針數(shù)組類型:
(1)一維數(shù)組類型
(2)二維數(shù)組類型
(3)三維數(shù)組類型
(3) 指針類型
Wings:json文件生成不定長度的數(shù)組,驅(qū)動運(yùn)行的時候可以根據(jù)文件中用戶設(shè)定的數(shù)組進(jìn)行靈活的取值,二級指針也可以根據(jù)json中數(shù)組的長度進(jìn)行靈活的賦值,三級指針暫時是取的二級指針的地址。
C++ test:一級指針是生成4種測試函數(shù),前三種賦值長度分別為1,16,256的數(shù)組,最后一種指針賦值0;二級指針三級指針類似,取一級指針,二級指針的地址。
例如:c++ test針對指針類型:
Wings針對指針類型:
(1)一級指針
(2)二級指針
(4) 復(fù)雜類型(結(jié)構(gòu)體類型)
Wings:對結(jié)構(gòu)體的處理相對比較合理,首先針對復(fù)雜類型,wings首先進(jìn)行展開分析,將復(fù)雜類型分解為最簡單的基本類型,然后依次進(jìn)行賦值操。
C++ test:對結(jié)構(gòu)體的處理很簡單,就是直接將結(jié)構(gòu)體定義一下,然后就傳進(jìn)去了,結(jié)構(gòu)體指針或者數(shù)組是取上一級的地址或者初始化0。
例如:c++ test針對復(fù)雜類型:
Wings針對復(fù)雜類型:
將復(fù)雜類型展開分解,依次進(jìn)行賦值操作。
(5) 枚舉類型
Wings:json中隨機(jī)生成枚舉類型里面對應(yīng)的數(shù)值,然后驅(qū)動里面將該數(shù)值轉(zhuǎn)化為枚舉的值賦給函數(shù)參數(shù)。
C++ test:直接隨機(jī)賦上枚舉類型里面所有可能的情況。
例如:c++ test針對枚舉類型
Wings針對枚舉類型:
(6) 聯(lián)合體類型
Wings:對聯(lián)合體的每一項(xiàng)都進(jìn)行默認(rèn)順序賦值,用戶可以根據(jù)需要實(shí)際選擇賦值哪一個,聯(lián)合體的值存在json中
C++ test:聯(lián)合體賦值跟普通類型賦值一樣,聯(lián)合體里面的某一個變量賦值為最大,最小,-1,0,1這五種值,每種都測試一次
例如:c++ test針對聯(lián)合體類型:
總結(jié)對比下來的結(jié)果就是這樣:
wings | C++test | |
---|---|---|
基本類型 | 隨機(jī)賦值 | 最大值,最小值,-1,0,1 |
數(shù)組類型 固定長度 | 依據(jù)具體長度賦值 | 全部按照1、16、256的長度進(jìn)行賦值 |
非固定長度 | 依據(jù)需求動態(tài)賦值 | 全部按照1、16、256的長度進(jìn)行賦值 |
指針類型 基本類型 | 動態(tài)獲取長度,進(jìn)行賦值 | 全部按照1、16、256的長度進(jìn)行賦值 |
復(fù)雜類型 | 采用常規(guī)賦值方式 | 全部按照1、16、256的長度進(jìn)行賦值 |
復(fù)雜類型 | Wings首先將復(fù)雜類型分解為簡單的基本類型,然后依次進(jìn)行賦值 | 不做處理,直接賦值為空 |
枚舉類型 | 隨機(jī)賦值 | 隨機(jī)賦值 |
聯(lián)合體類型 | 隨機(jī)賦值 | 聯(lián)合體里面的某一個變量賦值為最大,最小,-1,0,1這五種值 |
特殊類型 | 利用模板方式,特殊進(jìn)行賦值處理 | 不做處理 |
Wings與c++ test優(yōu)缺點(diǎn)對比:
(1) 從靈活性方面:wings可以依據(jù)需求,修改賦值的次數(shù),c++ test只能夠一次性固定生成幾組值。
(2) 從賦值方式:wings的賦值更加合理,c++ test只能夠生成一個簡單的單元框架,具體的賦值方式,大部分需要測試人員手動去修改驅(qū)動賦值,wings基本上不需要測試人員修改驅(qū)動代碼,只需要依據(jù)需求,修改測試數(shù)據(jù)即可。
(3) 從企業(yè)適用性方面:企業(yè)應(yīng)用一般軟件復(fù)雜性高,因此c++ test由于無法面對復(fù)雜參數(shù)和復(fù)合類型以及嵌套類型產(chǎn)生用例,因?yàn)槠淦髽I(yè)適用性大打折扣,更多時候是產(chǎn)生了測試驅(qū)動的框架而已,而wings則可以面向任意復(fù)雜的應(yīng)用,可完成全部單元測試用例驅(qū)動代碼的生成。
不比不知道,一比嚇一跳。Parasoft C++是美國廠商的產(chǎn)品,占據(jù)市場好多年,很多都是軍工在用。Wings據(jù)說是全自研的,居然性能表現(xiàn)這么好。創(chuàng)新太難了,我也深有體會。衷心希望這樣優(yōu)秀的產(chǎn)品能有更好突破。畢竟這樣用心和認(rèn)真專研的團(tuán)隊(duì),國內(nèi)太少了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。