1. 程式人生 > >Wings與parasoft c++ test在單元測試用例自動生成能力的比對

Wings與parasoft c++ test在單元測試用例自動生成能力的比對

RoCE 相同 c++ 比較 關心 分享 多少 自己 ×××

作為一個軟件測試培訓講師,主要側重在白盒測試培訓方面,尤其對C++test比較擅長。最近發現市面上跳出一款Wings工具,據說1分鐘可以自動生成100萬行測試代碼,性能方面大大超越C++ test,就想著抽空來×××實彈的對比看看是不是在吹牛。這兩天索性閉關好好研究一下。試用下來,發現Wings的創造團隊真的是非常有才,邏輯非常清楚。我又掐指大致框算一下,整體研發工作量肯定不小,突破了很多技術天花板。所以,在開寫之前,首先向Wings創造團隊表達我真摯的敬意,畢竟在現在的軟件測試發展中,能靜下心來研究創新算法的人太少了。
 
 長話短說,現在把Wings和我熟悉的C++ test做一個對比分析,如果有不對的地方歡迎大家拍磚,也借此機會轉達想要認識Wings開發團隊的誠懇。
 
 首先Wings與c++ test都是用於生成單元測試驅動框架的工具。兩者差異在於以下幾點:
 
 (1) 基本普通類型,wings與c++ test生成用例大致相同,wings采用隨機生成一組或者多組數值,而c++ test依據臨界值生成固定的隨機數。
 
 例如:c++ test:生成五組測試函數,每個測試函數分別取最大值,最小值,-1,0,1
Wings:從json中取值,json中的值先隨機生成,也可以用戶自己修改。
 
 例如:
 C++ test針對基本類型:
 技術分享圖片
 
 Wings針對基本類型:
 技術分享圖片
 (2) 數組類型
 數組作為函數參數使用時,分為固定長度和非固定長度。 
 

  1. 固定長度的數組
    Wings能夠分析出數組的長度,通過獲取固定數組的長度,進行拷貝賦值。
    C++ test通過不關心數組的具體長度為多少,統一初始化為1、16、256的大小,進行賦值。
  2. 非固定長度的數組
    Wings首先給不定長度的數組,分配一定的長度,用戶可修改數組長度的大小wings將依據具體修改的數組長度進行賦值。
    C++ test通過不關心數組的具體長度為多少,統一初始化為1、16、256的大小,進行賦值。
    例如:c++ test針對數組類型:

 技術分享圖片
 
Wings指針數組類型:
(1)一維數組類型
技術分享圖片
(2)二維數組類型
技術分享圖片
(3)三維數組類型
技術分享圖片
(3) 指針類型
 Wings:json文件生成不定長度的數組,驅動運行的時候可以根據文件中用戶設定的數組進行靈活的取值,二級指針也可以根據json中數組的長度進行靈活的賦值,三級指針暫時是取的二級指針的地址。

 C++ test:一級指針是生成4種測試函數,前三種賦值長度分別為1,16,256的數組,最後一種指針賦值0;二級指針三級指針類似,取一級指針,二級指針的地址。
例如:c++ test針對指針類型:
技術分享圖片
 
技術分享圖片
 
技術分享圖片
 
技術分享圖片
 
Wings針對指針類型:
(1)一級指針
技術分享圖片
(2)二級指針
技術分享圖片
(4) 復雜類型(結構體類型)
 Wings:對結構體的處理相對比較合理,首先針對復雜類型,wings首先進行展開分析,將復雜類型分解為最簡單的基本類型,然後依次進行賦值操。
 C++ test:對結構體的處理很簡單,就是直接將結構體定義一下,然後就傳進去了,結構體指針或者數組是取上一級的地址或者初始化0。
例如:c++ test針對復雜類型:
技術分享圖片
 Wings針對復雜類型:
 將復雜類型展開分解,依次進行賦值操作。
技術分享圖片
(5) 枚舉類型
 Wings:json中隨機生成枚舉類型裏面對應的數值,然後驅動裏面將該數值轉化為枚舉的值賦給函數參數。
 C++ test:直接隨機賦上枚舉類型裏面所有可能的情況。
 例如:c++ test針對枚舉類型
 
技術分享圖片
 
 Wings針對枚舉類型:
技術分享圖片
 
(6) 聯合體類型
 Wings:對聯合體的每一項都進行默認順序賦值,用戶可以根據需要實際選擇賦值哪一個,聯合體的值存在json中
 C++ test:聯合體賦值跟普通類型賦值一樣,聯合體裏面的某一個變量賦值為最大,最小,-1,0,1這五種值,每種都測試一次
 例如:c++ test針對聯合體類型:
 
技術分享圖片
 
 總結對比下來的結果就是這樣:

 

             wings C++test
基本類型 隨機賦值 最大值,最小值,-1,0,1
數組類型   固定長度 依據具體長度賦值 全部按照1、16、256的長度進行賦值
       非固定長度 依據需求動態賦值 全部按照1、16、256的長度進行賦值
指針類型   基本類型 動態獲取長度,進行賦值 全部按照1、16、256的長度進行賦值
       復雜類型 采用常規賦值方式 全部按照1、16、256的長度進行賦值
復雜類型 Wings首先將復雜類型分解為簡單的基本類型,然後依次進行賦值 不做處理,直接賦值為空
枚舉類型 隨機賦值 隨機賦值
聯合體類型 隨機賦值 聯合體裏面的某一個變量賦值為最大,最小,-1,0,1這五種值
特殊類型 利用模板方式,特殊進行賦值處理 不做處理

 
Wings與c++ test優缺點對比:
(1) 從靈活性方面:wings可以依據需求,修改賦值的次數,c++ test只能夠一次性固定生成幾組值。
 
(2) 從賦值方式:wings的賦值更加合理,c++ test只能夠生成一個簡單的單元框架,具體的賦值方式,大部分需要測試人員手動去修改驅動賦值,wings基本上不需要測試人員修改驅動代碼,只需要依據需求,修改測試數據即可。
 
(3) 從企業適用性方面:企業應用一般軟件復雜性高,因此c++ test由於無法面對復雜參數和復合類型以及嵌套類型產生用例,因為其企業適用性大打折扣,更多時候是產生了測試驅動的框架而已,而wings則可以面向任意復雜的應用,可完成全部單元測試用例驅動代碼的生成。
 
  不比不知道,一比嚇一跳。Parasoft C++是美國廠商的產品,占據市場好多年,很多都是軍工在用。Wings據說是全自研的,居然性能表現這麽好。創新太難了,我也深有體會。衷心希望這樣優秀的產品能有更好突破。畢竟這樣用心和認真專研的團隊,國內太少了。

Wings與parasoft c++ test在單元測試用例自動生成能力的比對