0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

螞蟻測試用例智能生成技術(shù)架構(gòu)與實踐

vliwulianw ? 來源:軟件質(zhì)量報道 ? 作者:軟件質(zhì)量報道 ? 2022-10-27 10:14 ? 次閱讀

今年開始,我們看到了越來越多的人開始關(guān)注測試用例自動生成這個領(lǐng)域,包括一些Devops產(chǎn)品也在做用例自動生成方面的工作。這里我主要和大家來介紹下測試用例自動生成這個領(lǐng)域的背景、相關(guān)研究方向、研究難點(diǎn),以及在螞蟻我們是怎么來做測試用例自動生成這件事情的。

1

背景

首先我們來看測試用例自動生成這件事情的背景。隨著業(yè)務(wù)的不斷積累和發(fā)展,工業(yè)界中可以看到大型復(fù)雜系統(tǒng)的數(shù)量是持續(xù)在積累和增長的。在這個過程中,我們對這些復(fù)雜系統(tǒng)的測試和維護(hù)成本是不斷在增加的。不管是開發(fā)同學(xué)還是測試同學(xué),都需要投入大量的時間在測試用例編寫環(huán)節(jié)。我們也經(jīng)常會收到一些同學(xué)的反饋,比如在一次功能迭代過程中,開發(fā)業(yè)務(wù)代碼所需要的時間和開發(fā)測試用例所需要的時間可能會達(dá)到1 : 1。從這里我們可以看出,開發(fā)測試用例環(huán)節(jié)是存在非常大的提效空間的。

在整個快速迭代的背景之下,我們希望能夠通過智能化的手段來解決測試時間的投入,其中單測首當(dāng)其沖。

PART

單測是質(zhì)量保障流程中的第一環(huán),單測階段攔截問題后解決成本最低

d1ee49ce-5588-11ed-a3b6-dac502259ad0.png



圖1 問題修復(fù)成本

從圖1可以看出,在迭代環(huán)節(jié)逐步推進(jìn)的過程中,環(huán)節(jié)越靠后時問題修復(fù)成本越高,因此我們希望把發(fā)現(xiàn)問題的環(huán)節(jié)盡可能提前,單測就是最早的這個階段。在單測階段攔截問題,解決問題的成本是最低的。

PART

單測具備Fast 、 Stable、QuickDiagnosis特性,更適合集成至Devops流水線中進(jìn)行持續(xù)回歸

d210f5f0-5588-11ed-a3b6-dac502259ad0.png

圖2 Google測試金字塔

大家應(yīng)該對Google的測試金字塔比較熟悉,Google測試金字塔中占比最高的是單測用例,達(dá)到了80%,再往上才是集成測試、端到端測試。為什么單測能夠作為大底座這樣的存在呢?主要原因在于單測具備Fast 、 Stable、QuickDiagnosis特性,這些特性使得單測更適合于集成到Devops流水線里面去做持續(xù)回歸,在我們的項目里面更多比例的測用例也應(yīng)該是單元測試用例。

PART

實際研發(fā)流程中單測比例低,面臨開發(fā)成本高、運(yùn)維難等問題

然而,在實際研發(fā)流程中,我們看到更多的并不是一個正金字塔,反而是一個倒金字塔。實際項目中單測用例占比往往很低,更多的測試被推到了集成測試、甚至是聯(lián)調(diào)測試階段。我們發(fā)現(xiàn)造成這種現(xiàn)象的主要原因是單測的開發(fā)成本、運(yùn)維成本普遍很高。如何能夠智能化地提升單測環(huán)節(jié)的效能呢?關(guān)鍵的技術(shù)方向就是去做測試用例的自動生成。

2

相關(guān)研究

測試用例自動生成其實在學(xué)術(shù)界一直是比較熱門的研究方向,這里和大家一起分享下目前學(xué)術(shù)界已有的研究方向和相關(guān)成果。

d246acf4-5588-11ed-a3b6-dac502259ad0.png

圖3 測試用例自動生成相關(guān)研究

PART

模糊測試Fuzzing

Fuzzing的主要思路是通過構(gòu)造大量的測試輸入來去發(fā)現(xiàn)軟件里面存在的問題。2013年AFL工具發(fā)布,AFL首次在Fuzzing里使用了通過插裝獲取代碼覆蓋,從而來引導(dǎo)Fuzzing的方式。隨后以覆蓋率為引導(dǎo)的Fuzzing也被使用到了測試用例自動生成領(lǐng)域。

PART

符號執(zhí)行

符號執(zhí)行是一個程序分析非常經(jīng)典的概念,主要是通過解析程序的執(zhí)行路徑,用符號模擬輸入并獲得輸出。很多研究者也在嘗試通過使用符號執(zhí)行的結(jié)果來進(jìn)行測試用例自動生成。

PART

基于搜索 Search Based Software Testing

Search Based Software Testing的思路是從問題解空間出發(fā),通過一些啟發(fā)式的搜索算法來去解決測試用例生成的問題。SBST的可擴(kuò)展性很高,在整體的算法框架之下,可以隨意切換搜索算法,比如遺傳算法、爬山算法、多目標(biāo)搜索算法等等,都可以很好的融入到這個框架里面來去做這個用例生成。

3

難點(diǎn)和挑戰(zhàn)

當(dāng)我們將已有研究成果去落地到實際系統(tǒng)時,會遇到什么樣的難點(diǎn)和挑戰(zhàn)呢?這里列出了三大類挑戰(zhàn),涵蓋了測試用例自動生成、執(zhí)行、運(yùn)維的整個生命周期。

d2bbc700-5588-11ed-a3b6-dac502259ad0.png



圖4 測試用例自動生成的難點(diǎn)和挑戰(zhàn)

PART

測試用例生成

測試用例生成是最基礎(chǔ)、最核心的環(huán)節(jié)。在實際系統(tǒng)中進(jìn)行測試用例生成通常會面臨復(fù)雜數(shù)據(jù)類型、復(fù)雜語言特性的情況。對于復(fù)雜情況的處理能力決定了生成用例的覆蓋率效果。除了復(fù)雜語法外,斷言生成也是測試用例生成的難點(diǎn)之一。我們的測試用例之所以能夠有效地發(fā)現(xiàn)問題,是因為用例中包含斷言,因此測試用例自動生成需要能夠包括斷言的生成能力。

PART

測試用例執(zhí)行

測試用例生成后,就來到了執(zhí)行這個環(huán)節(jié)。執(zhí)行環(huán)節(jié)最重要的是有一個穩(wěn)定的運(yùn)行環(huán)境。相信大家肯定都會遇到這種場景,測試用例跑不通或者多次運(yùn)行結(jié)果不一致,本質(zhì)都是用例不穩(wěn)定。為了保證用例能夠穩(wěn)定運(yùn)行,是需要去做很多Mock的。比如代碼獲取了當(dāng)前機(jī)器的IP,需要通過對IP的mock來確保無論測試用例跑在哪臺機(jī)器上都能夠得到穩(wěn)定的返回值。用例運(yùn)行穩(wěn)定之后,要考慮運(yùn)行效率和運(yùn)行穩(wěn)定性。系統(tǒng)越復(fù)雜,對應(yīng)測試用例的量級也越高。大規(guī)模單元測試用例的運(yùn)行過程中,需要保證運(yùn)行效率和穩(wěn)定性,才能融入DevOps流水線進(jìn)行持續(xù)回歸。

PART

測試用例運(yùn)維

最后是測試用例的運(yùn)維。測試用例的運(yùn)維包括了:1)存量用例汰換。被測代碼變更后,部分舊的測試用例會失效。比如,被測代碼的某個方法在變更過程中被刪除了,那么涉及到這個方法的測試用例都會失效。對于失效用例,我們需要能夠把它們汰換掉。2)增量用例生成。迭代變更時會有新的代碼進(jìn)來,對于新增的代碼需要能夠觸發(fā)用例生成,將增量用例補(bǔ)充進(jìn)來。3)回歸分析。在歷史存量用例的回歸過程中,會出現(xiàn)用例失敗報錯的情況。針對這些失敗的情況,我們需要進(jìn)行降噪處理過濾掉無效失敗,從而去發(fā)現(xiàn)真正的代碼變更導(dǎo)致的問題。

4

測試用例智能生成SmartUnit

上面講了測試用例自動生成這項技術(shù)在實際系統(tǒng)中落地會遇到的很多難點(diǎn)和挑戰(zhàn),在這部分就來介紹我們在螞蟻所做的測試用例智能生成產(chǎn)品SmartUnit。

01

產(chǎn)品能力介紹

SmartUnit是智能單元測試用例生成產(chǎn)品,致力于解決單元測試環(huán)節(jié)里測試用例的自動生成執(zhí)行態(tài)化和管理,SmartUnit的產(chǎn)品能力包括了快速提升覆蓋率和智能探測異常。

d319e16e-5588-11ed-a3b6-dac502259ad0.png



圖5 SmartUnit能力大圖

SmartUnit產(chǎn)品提供了三種使用方式,涵蓋Local測試和回歸測試階段:

PART

本地命令行

提供核心能力Jar包,用戶可以通過本地java -jar來執(zhí)行jar包做用例生成。這種使用方式適用于Local測試階段,在開發(fā)同學(xué)寫完代碼后,直接在本地就可以生成用例,進(jìn)行單測驗證。

PART

IDEA插件

IDEA插件與本地命令行一樣,也適用于Local測試。相比于本地命令行,IDEA插件給用戶帶來了操作方式上的便捷。不需要執(zhí)行多條命令,而是僅僅右鍵單擊被測類,即可一鍵生成測試用例。

PART

DevOps組件

為減輕用例運(yùn)維成本,我們提供了DevOps組件。通過DevOps組件,可以跟隨每一次的變更,每一次的PR或者M(jìn)R來去自動觸發(fā)這個組件,自動去做這個用例生成與汰換。下圖展示了我們與螞蟻Devops融合后的流水線全生命周期管理示例。

d3607c82-5588-11ed-a3b6-dac502259ad0.png



圖6 SmartUnit與螞蟻Devops流水線融合

對于SmartUnit這類測試用例自動生成產(chǎn)品,我們認(rèn)為核心評價指標(biāo)應(yīng)該包括五個:

PART

用例覆蓋率

我們不管去怎么做測試這個環(huán)節(jié),最終希望的都是都能夠?qū)Υa有更深度的覆蓋,對代碼有更完整的測試。目前SmartUnit自動生成用例的覆蓋率超過60%,在部分系統(tǒng)上可達(dá)到80%。

PART

用例有效性

用例有效性用于度量用例到底有沒有作用,會不會在代碼變更的情況下出現(xiàn)執(zhí)行失敗。我們度量有效性的方式是基于源碼攻擊,對于源碼進(jìn)行模擬變更,測試用例是否能夠發(fā)現(xiàn)變更。目前SmartUnit自動生成用例的有效性超過60%,高于人工手寫的測試用例。

PART

用例精簡性

單元測試用例一般是精簡的,甚至于是可讀的。只有精簡的用例才能夠合并到代碼庫中持續(xù)進(jìn)行維護(hù)。因此用例的精簡性也是非常重要的指標(biāo)。目前SmartUnit對生成的用例會進(jìn)行以行覆蓋/分支覆蓋為指標(biāo)的精簡,確保保留下來的用例都是對覆蓋率有正向影響的。

PART

用例生成效率

用例生成效率用來評價自動用例生成產(chǎn)品的提效能力,通過自動生成的效率提升,從而提升單測環(huán)節(jié)的效能。

PART

用例執(zhí)行效率

單元測試用例的量級相對會比較大,針對大規(guī)模的單測用例,需要保障用例執(zhí)行效率才不會阻塞CI流水線。面對2~3萬的測試用例量級,SmartUnit可以在30min內(nèi)執(zhí)行完。

02

自動生成用例示例

我們說了這么久用例自動生成,這里直觀看一下SmartUnit自動生成用例的樣子。SmartUnit用例包含以下四大部分:

用例注釋:直觀的告訴大家這個用例在測那些被測代碼、使用什么樣的入?yún)ⅰ⑿r炇裁礃拥姆祷刂担?/p>

Mock數(shù)據(jù):單測用例里最為基本的一部分,也是占比最大的一部分。SmartUnit會通過Mock的方式屏蔽掉依賴;

方法調(diào)用:請求被測方法,獲取返回值;

結(jié)果校驗:對方法返回值進(jìn)行Assert。

d3bf22aa-5588-11ed-a3b6-dac502259ad0.png



圖7 SmartUnit自動生成用例示意

03

核心算法和技術(shù)

為了達(dá)成我們在產(chǎn)品能力上的目標(biāo),SmartUnit底層具備完整的核心算法架構(gòu)來確保自動生成用例的覆蓋率、有效性等指標(biāo)水位。下圖是SmartUnit從0到1進(jìn)行用例生成的算法架構(gòu)。

d3e7a4a0-5588-11ed-a3b6-dac502259ad0.png



圖8 SmartUnit算法架構(gòu)

SmartUnit使用動態(tài)多目標(biāo)搜索作為主體算法框架,結(jié)合程序分析、符號執(zhí)行等技術(shù)共同完成從0到1進(jìn)行用例生成。從整體框架上包含環(huán)境構(gòu)建、種子用例生成、單測用例迭代、用例語句生成。

PART

環(huán)境構(gòu)建

通過加載被測類和被測類的依賴,從而構(gòu)建出一套可運(yùn)行環(huán)境。后續(xù)的算法迭代強(qiáng)依賴于環(huán)境構(gòu)建是否成功。

PART

種子用例生成

有了可運(yùn)行環(huán)境后,會進(jìn)行種子用例的生成。種子用例一般比較簡單,只包含一些初始化的對象和調(diào)用。

PART

單測用例迭代

種子用例作為單測迭代的初始狀態(tài)被傳入到真正的用例迭代流程中,在用例迭代流程中對種子不斷地修改、優(yōu)化、迭代,最終產(chǎn)出我們需要的測試用例集。在用例迭代過程中,通過Mock動態(tài)生成算法、最優(yōu)用例數(shù)據(jù)生成算法、最優(yōu)調(diào)用序列算法來對用例的完整性進(jìn)行填充,包括Mock語句和方法調(diào)用語句。最終,需要執(zhí)行用例來確定它的覆蓋效果,根據(jù)覆蓋率效果進(jìn)行最優(yōu)用例選擇。選擇出來的用例作為下一次迭代的種子,一代一代地迭代下去。

整個迭代過程有兩個終止條件。第一個是覆蓋率達(dá)到了預(yù)期的值,第二個是達(dá)到了設(shè)置的時間域值。

PART

用例語句生成

與整個單測用例迭代過程相配合的,是用例語句生成。用例語句生成包括Mock語句、Method調(diào)用語句、Assert語句。其中值得一提的是Assert語句自動生成,在SmartUnit中使用基于Mutate的斷言自動生成算法,這也是目前在學(xué)術(shù)界比較廣泛認(rèn)可的斷言生成方式。

04

落地效果

最后介紹在螞蟻SmartUnit的落地效果。目前SmartUnit已經(jīng)在螞蟻多個BU中使用,接入系統(tǒng)數(shù)據(jù)1000+。

用例覆蓋率維度上,SmartUnit自動生成用例可以達(dá)到60%+的效果,結(jié)合歷史存量用例后平均覆蓋率達(dá)到80%+;

用例有效性維度上,SmartUnit作為底層能力支持了螞蟻內(nèi)部編程活動。針對活動中提交的PR,67%的PR發(fā)現(xiàn)了問題,共發(fā)現(xiàn)34個問題,包括7個有效BUG和27個健壯性問題。

d45728f2-5588-11ed-a3b6-dac502259ad0.png



圖9 SmartUnit落地效果

05

總結(jié)與展望

d46cfcb8-5588-11ed-a3b6-dac502259ad0.png



圖10 總結(jié)與展望

面向未來發(fā)展,SmartUnit的發(fā)力方向包括:算法持續(xù)優(yōu)化、豐富產(chǎn)品形態(tài)、開源共建、SaaS服務(wù)。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 智能化
    +關(guān)注

    關(guān)注

    15

    文章

    4884

    瀏覽量

    55377
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68612
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13624

原文標(biāo)題:螞蟻測試用例智能生成技術(shù)架構(gòu)與實踐

文章出處:【微信號:軟件質(zhì)量報道,微信公眾號:軟件質(zhì)量報道】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    螞蟻集團(tuán)宣布新一輪組織架構(gòu)調(diào)整

    螞蟻集團(tuán)近期迎來了新一輪的組織架構(gòu)調(diào)整,此次調(diào)整由螞蟻集團(tuán)總裁韓歆毅親自宣布,并通過郵件形式向全體員工傳達(dá)。 韓歆毅在郵件中透露,他將于2025年3月1日正式接任螞蟻集團(tuán)首席執(zhí)行官(C
    的頭像 發(fā)表于 12-24 09:35 ?113次閱讀

    是德科技助力三星電子驗證FiRa 2.0安全測距測試用

    是德科技(Keysight Technologies,Inc.)成功助力三星電子,在其Exynos Connect U100芯片組上驗證了FiRa 2.0安全測試用。此次驗證得益于是德科技提供的超寬帶 (UWB)測試解決方案,
    的頭像 發(fā)表于 11-18 10:08 ?187次閱讀

    端到端測試用怎么寫

    編寫端到端測試用是確保軟件系統(tǒng)從頭到尾能夠正常工作的關(guān)鍵步驟。以下是一個詳細(xì)的指南,介紹如何編寫端到端測試用: 一、理解端到端測試 端到
    的頭像 發(fā)表于 09-20 10:29 ?455次閱讀

    TSMaster 測試報告生成器操作指南

    用戶在基于TSMaster軟件開發(fā)測試用時,或需要使用TSMaster生成HTML報告時,需要使用TSMaster測試報告生成器。1Tes
    的頭像 發(fā)表于 08-03 08:21 ?470次閱讀
    TSMaster <b class='flag-5'>測試</b>報告<b class='flag-5'>生成</b>器操作指南

    是德科技獲得5G NR FR1 1024-QAM 解調(diào)測試用的認(rèn)證

    是德科技(Keysight Technologies,Inc.)日前宣布獲得了基于3GPP TS 38.521-4測試規(guī)范的 5G NR FR1 1024-QAM 解調(diào)測試用的認(rèn)證。這些測試
    的頭像 發(fā)表于 07-31 16:46 ?937次閱讀

    鑒源實驗室·ISO 26262中測試用的得出方法-等價類的生成和分析

    標(biāo)準(zhǔn)規(guī)范中給出了單元、集成、系統(tǒng)測試各階段的建議測試使用方法,設(shè)計生成測試用的建議方法包括需求分析、等價類的
    的頭像 發(fā)表于 07-30 15:37 ?514次閱讀
    鑒源實驗室·ISO 26262中<b class='flag-5'>測試用</b><b class='flag-5'>例</b>的得出方法-等價類的<b class='flag-5'>生成</b>和分析

    是德科技獲得窄帶非地面網(wǎng)絡(luò)標(biāo)準(zhǔn)的新測試用驗證

    是德科技(Keysight Technologies,Inc.)日前宣布,該公司針對3GPP Rel-17標(biāo)準(zhǔn)中關(guān)于NB-IoT NTN技術(shù)的新一致性測試用獲得驗證通過。這些測試用
    的頭像 發(fā)表于 07-26 14:13 ?697次閱讀

    螞蟻數(shù)科發(fā)布新一代融合AI風(fēng)控引擎“AIR Engine”

    在數(shù)字化浪潮的推動下,金融科技領(lǐng)域的風(fēng)控技術(shù)正迎來新的突破。近日,螞蟻數(shù)科旗下的蟻盾風(fēng)控團(tuán)隊正式發(fā)布了新一代融合AI風(fēng)控引擎——“AIR Engine(AIFUSERiskEngine)”,該引擎在原有的決策式AI架構(gòu)基礎(chǔ)上,創(chuàng)
    的頭像 發(fā)表于 06-26 18:20 ?1249次閱讀

    LitePoint與三星電子合作支持FiRa 2.0物理層安全測距測試用

    先進(jìn)無線測試解決方案提供商LitePoint與三星電子宣布緊密合作,支持FiRa 2.0物理層(PHY)一致性測試規(guī)范內(nèi)定義的新安全測試用。
    的頭像 發(fā)表于 05-16 11:26 ?570次閱讀

    世界數(shù)字技術(shù)院發(fā)布:生成式AI安全測試標(biāo)準(zhǔn)及大語言模型

    據(jù)悉,上述兩款標(biāo)準(zhǔn)主要針對大型模型與生成式AI應(yīng)用領(lǐng)域的安全檢測設(shè)定了新基準(zhǔn)。參與制定工作的單位有OpenAI、螞蟻集團(tuán)、科大訊飛、谷歌、微軟、英偉達(dá)、百度、騰訊等多家知名企業(yè),其中,《大語言模型安全測試方法》由
    的頭像 發(fā)表于 04-17 16:51 ?1098次閱讀

    DEKRA被CSA指定為Zigbee統(tǒng)一測試工具開發(fā)和優(yōu)化新功能和測試用

    DEKRA德凱被CSA聯(lián)盟(Connectivity Standards Alliance,CSA)指定負(fù)責(zé)為Zigbee統(tǒng)一測試工具(Zigbee Unified Test Harness,ZUTH)開發(fā)和優(yōu)化新功能和測試用
    的頭像 發(fā)表于 04-09 14:10 ?524次閱讀

    螞蟻集團(tuán)新一輪組織架構(gòu)升級

    螞蟻集團(tuán)近日完成了新一輪的組織架構(gòu)升級,旨在進(jìn)一步加速其改革進(jìn)程并推動核心戰(zhàn)略的實施。在這次重要的調(diào)整中,韓歆毅被正式任命為螞蟻集團(tuán)總裁,他將肩負(fù)起全面負(fù)責(zé)數(shù)字支付、數(shù)字互聯(lián)和數(shù)字金融業(yè)務(wù)的重任。
    的頭像 發(fā)表于 03-22 13:58 ?1212次閱讀

    PTCRB的測試用類認(rèn)證等級分類介紹

    PTCRB的測試用類認(rèn)證等級CategoryA/B/EA類項:測試用在商用系統(tǒng)上經(jīng)過完全驗證;必測項且需要結(jié)果為PASSB類項:測試用
    的頭像 發(fā)表于 03-14 16:46 ?402次閱讀
    PTCRB的<b class='flag-5'>測試用</b>類認(rèn)證等級分類介紹

    羅德與施瓦茨通過GCF認(rèn)證一致性測試用加快NTN NB-IoT技術(shù)的推廣

    在最近舉行的一致性協(xié)議組(CAG)#77會議上,羅德與施瓦茨(以下簡稱“R&S”)使用其R&S CMW500無線電通信測試儀成功驗證了工作項目333中的NTN NB-IoT測試用。
    的頭像 發(fā)表于 02-28 18:25 ?1360次閱讀

    是德科技首批3GPP Release 16 16/32測試用獲得批準(zhǔn)

    本次驗證涵蓋單個和多個預(yù)編碼矩陣指示符測試用,主要面向在頻分雙工和時分雙工頻段上運(yùn)行的 16/32 通道發(fā)射機(jī)
    的頭像 發(fā)表于 02-21 14:14 ?432次閱讀