成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CI做到90%的行覆蓋率,真能發(fā)現(xiàn)BUG嗎?

開(kāi)發(fā) 項(xiàng)目管理
這么多的CASE,花了大量時(shí)間和資源去運(yùn)行,真能發(fā)現(xiàn)BUG嗎?CI做到90%的行覆蓋率,能發(fā)現(xiàn)問(wèn)題嗎?測(cè)試用例越來(lái)越多,刪一些,會(huì)不會(huì)就發(fā)現(xiàn)不了問(wèn)題了?今天,我們談?wù)勅绾卧u(píng)估測(cè)試用例的有效性?

 這么多的CASE,花了大量時(shí)間和資源去運(yùn)行,真能發(fā)現(xiàn)BUG嗎?CI做到90%的行覆蓋率,能發(fā)現(xiàn)問(wèn)題嗎?測(cè)試用例越來(lái)越多,刪一些,會(huì)不會(huì)就發(fā)現(xiàn)不了問(wèn)題了?今天,我們談?wù)勅绾卧u(píng)估測(cè)試用例的有效性?

我們的測(cè)試用例有兩個(gè)比較關(guān)鍵的部分:

1)調(diào)用被測(cè)代碼:例如下面的RuleService.getLastRuleByClientId(ClientId)。2)進(jìn)行結(jié)果Check:例如下面的AssertEqual(OrderId,"ABCD1234")。

  1. TestCaseA 
  2. ... 
  3.   RuleService.createRuleByClientId(ClientId,RuleDO); 
  4.   StringOrderId=RuleService.getLastRuleByClientId(ClientId); 
  5. ... 
  6.    
  7. TestCaseB 
  8. ... 
  9.   RuleService.createRuleByClientId(ClientId,RuleDO); 
  10.   StringOrderId=OrderService.getLastOrderByClientId(ClientId); 
  11.   AssertEqual(OrderId,"ABCD1234"); 
  12. ... 

我們希望一組測(cè)試用例不僅能夠“觸發(fā)被測(cè)代碼的各種分支”,還能夠做好結(jié)果校驗(yàn)。

  • 當(dāng)業(yè)務(wù)代碼出現(xiàn)問(wèn)題的時(shí)候,測(cè)試用例可以發(fā)現(xiàn)這個(gè)問(wèn)題,我們就認(rèn)為這一組測(cè)試用例是有效的。
  • 當(dāng)業(yè)務(wù)代碼出現(xiàn)問(wèn)題的時(shí)候,測(cè)試用例沒(méi)能發(fā)現(xiàn)這個(gè)問(wèn)題,我們就認(rèn)為這一組測(cè)試用例是無(wú)效的。

我們對(duì)測(cè)試用例有效性的理論建模是:

>> 測(cè)試有效性 = 被發(fā)現(xiàn)的問(wèn)題數(shù) / 出現(xiàn)問(wèn)題的總數(shù)

為什么要評(píng)估測(cè)試用例的有效性?

 

測(cè)試用例有效性評(píng)估的方法?

基于故障復(fù)盤(pán)的模式成本太高,我們希望能夠主動(dòng)創(chuàng)造問(wèn)題來(lái)評(píng)估測(cè)試用例的有效性。

我們找到了一種衡量“測(cè)試有效性”的方法,變異測(cè)試(mutation testing):

 

變異測(cè)試的例子

我們用了一組測(cè)試用例(3個(gè)),去測(cè)試一個(gè)判斷分支。而為了證明這一組測(cè)試用例的有效性,我們向業(yè)務(wù)代碼中注入變異。我們把b<100的條件改成了b<=100。 我們認(rèn)為:

  • 一組Success的測(cè)試用例,在其被測(cè)對(duì)象發(fā)生變化后(注入變異后),應(yīng)該至少有一個(gè)失敗。
  • 如果這組測(cè)試用例仍然全部Success,則這組測(cè)試用例的有效性不足。

通過(guò)變異測(cè)試的方式:讓注入變異后的業(yè)務(wù)代碼作為“測(cè)試用例”,來(lái)測(cè)試“測(cè)試代碼”。

我們實(shí)現(xiàn)了多種規(guī)則,可以主動(dòng)的注入下面這些變異:

 

如何優(yōu)雅的評(píng)估測(cè)試有效性?

為了全自動(dòng)的進(jìn)行測(cè)試有效性評(píng)估,我們做了一個(gè)變異機(jī)器人,其主要運(yùn)作是:

  1. 往被測(cè)代碼中寫(xiě)入一個(gè)BUG(即:變異);
  2. 執(zhí)行測(cè)試;
  3. 把測(cè)試結(jié)果和無(wú)變異時(shí)的測(cè)試結(jié)果做比對(duì),判斷是否有新的用例失敗;
  4. 重復(fù)1-3若干次,每次注入一個(gè)不同的Bug;
  5. 統(tǒng)計(jì)該系統(tǒng)的“測(cè)試有效性” 。

 

變異機(jī)器人的優(yōu)點(diǎn):

  1. 防錯(cuò)上線:變異是單獨(dú)拉代碼分支,且該代碼分支永遠(yuǎn)不會(huì)上線,不影響生產(chǎn)。
  2. 全自動(dòng):只需要給出系統(tǒng)代碼的git地址,即可進(jìn)行評(píng)估,得到改進(jìn)報(bào)告。
  3. 高效:數(shù)小時(shí)即可完成一個(gè)系統(tǒng)的測(cè)試有效性評(píng)估。
  4. 擴(kuò)展性:該模式可以支持JAVA以及JAVA以外的多種語(yǔ)系。
  5. 適用性:該方法不僅適用于單元測(cè)試,還適用于其他自動(dòng)化測(cè)試,例如接口測(cè)試、功能測(cè)試、集成測(cè)試。

變異機(jī)器人的使用門(mén)檻:

  1. 測(cè)試成功率:只會(huì)選擇通過(guò)率100%的測(cè)試用例,所對(duì)應(yīng)的業(yè)務(wù)代碼做變異注入。
  2. 測(cè)試覆蓋率:只會(huì)注入被測(cè)試代碼覆蓋的業(yè)務(wù)代碼,測(cè)試覆蓋率越高,評(píng)估越準(zhǔn)確。

高配版變異機(jī)器人

我們正在打造的高配版變異機(jī)器人擁有三大核心競(jìng)爭(zhēng)力:

分鐘級(jí)的系統(tǒng)評(píng)估效率

為了保證評(píng)估的準(zhǔn)確性,100個(gè)變異將會(huì)執(zhí)行全量用例100遍,每次執(zhí)行時(shí)間長(zhǎng)是一大痛點(diǎn)。

高配版變異機(jī)器人給出的解法:

  1. 并行注入:基于代碼覆蓋率,識(shí)別UT之間的代碼覆蓋依賴(lài)關(guān)系,將獨(dú)立的變異合并到一次自動(dòng)化測(cè)試中。
  2. 熱部署:基于字節(jié)碼做更新,減少變異和部署的過(guò)程。
  3. 精準(zhǔn)測(cè)試:基于UT代碼覆蓋信息,只運(yùn)行和本次變異相關(guān)的UT(該方法不僅適用于UT,還適用于其他自動(dòng)化測(cè)試,例如接口測(cè)試、功能測(cè)試、集成測(cè)試)。

學(xué)習(xí)型注入經(jīng)驗(yàn)庫(kù)

為了避免“殺蟲(chóng)劑”效應(yīng),注入規(guī)則需要不斷的完善。

高配版變異機(jī)器人給出的解法:故障學(xué)習(xí),基于故障學(xué)習(xí)算法,不斷學(xué)習(xí)歷史的代碼BUG,并轉(zhuǎn)化為注入經(jīng)驗(yàn)。可學(xué)習(xí)型經(jīng)驗(yàn)庫(kù)目前覆蓋螞蟻金服的代碼庫(kù),明年會(huì)覆蓋開(kāi)源社區(qū)。

兼容不穩(wěn)定環(huán)境

集成測(cè)試環(huán)境會(huì)存在一定的不穩(wěn)定,難以判斷用例失敗是因?yàn)?ldquo;發(fā)現(xiàn)了變異”還是“環(huán)境出了問(wèn)題”,導(dǎo)致測(cè)試有效性評(píng)估存在誤差。

高配版變異機(jī)器人給出的解法:

  1. 高頻跑:同樣的變異跑10次,對(duì)多次結(jié)果進(jìn)行統(tǒng)計(jì)分析,減少環(huán)境問(wèn)題引起的偶發(fā)性問(wèn)題。
  2. 環(huán)境問(wèn)題自動(dòng)定位:接入附屬的日志服務(wù),它會(huì)基于用例日志/系統(tǒng)錯(cuò)誤日志構(gòu)建的異常場(chǎng)景,自動(dòng)學(xué)習(xí)“因環(huán)境問(wèn)題導(dǎo)致的用例失敗”,準(zhǔn)確區(qū)分出用例是否發(fā)現(xiàn)變異。

落地效果如何?

我們?cè)谖浵伣鸱囊粋€(gè)部門(mén)進(jìn)行了實(shí)驗(yàn),得出了這樣的數(shù)據(jù):

 

換言之,幾個(gè)系統(tǒng)的測(cè)試有效性為:系統(tǒng)A 72%,系統(tǒng)B 56%,系統(tǒng)C 70%。

測(cè)試有效性(%) = 1 - 未發(fā)現(xiàn)注入數(shù) / 注入數(shù)

更多的測(cè)試有效性度量手段

基于代碼注入的測(cè)試有效性度量,只是其中的一種方法,我們?nèi)粘?huì)用到的方法有這么幾種:

  • 代碼注入:向代碼注入變異,看測(cè)試用例是否能發(fā)現(xiàn)該問(wèn)題
  • 內(nèi)存注入:修改API接口的返回內(nèi)容,看測(cè)試用例是否能發(fā)現(xiàn)該問(wèn)題
  • 靜態(tài)掃描:掃描測(cè)試代碼里是否做了Assert等判斷,看Assert場(chǎng)景與被測(cè)代碼分支的關(guān)系
  • ... 還有更多其他的度量手段

Meet the testcase again

測(cè)試有效性可以作為基石,驅(qū)動(dòng)很多事情向好發(fā)展:

  • 讓測(cè)試用例變得更能發(fā)現(xiàn)問(wèn)題。
  • 讓無(wú)效用例可被識(shí)別、清理。
  • 創(chuàng)造一個(gè)讓技術(shù)人員真正思考如何寫(xiě)好TestCase的質(zhì)量文化。
  • 測(cè)試左移與敏捷的前置條件。
  • ......

寫(xiě)到最后,想起了同事給我講的一個(gè)有趣的人生經(jīng)歷:

“大二期間在一家出版社編輯部實(shí)習(xí),工作內(nèi)容就是校對(duì)文稿中的各種類(lèi)型的錯(cuò)誤。編輯部考核校對(duì)質(zhì)量的辦法是,人為的事先在文稿中加入各種類(lèi)型的錯(cuò)誤,然后根據(jù)你的錯(cuò)誤發(fā)現(xiàn)率來(lái)衡量,并計(jì)算實(shí)習(xí)工資。”

“你干得咋樣?”

“我學(xué)習(xí)了他們的規(guī)則,寫(xiě)了個(gè)程序來(lái)查錯(cuò),拿到了第一個(gè)滿(mǎn)分”

“厲害了...”

“第二個(gè)月就不行了,他們不搞錯(cuò)別字了,搞了一堆語(yǔ)法、語(yǔ)義、中心思想的錯(cuò)誤... 我就專(zhuān)心干活兒了”

“...”

殊途同歸,其致一也。

責(zé)任編輯:武曉燕 來(lái)源: 阿里技術(shù)
相關(guān)推薦

2019-09-25 09:20:41

谷歌代碼開(kāi)發(fā)者

2012-04-10 11:15:36

寬帶普及

2021-10-15 13:47:19

覆蓋率檢測(cè) istanbul 總代碼的比例

2011-11-01 10:10:48

ScriptCover

2022-05-31 09:01:18

SwiftApp 項(xiàng)目

2023-10-27 08:49:00

JCovOpenJDK

2022-10-21 15:29:32

5G網(wǎng)絡(luò)

2021-12-25 22:30:27

Chrome DevTJavaScript調(diào)試工具

2012-04-11 11:21:57

ibmdw

2022-08-25 06:27:39

vivoJaCoCo代碼覆蓋率

2015-11-09 17:56:57

WebPHP函數(shù)覆蓋

2022-03-20 06:55:08

5G網(wǎng)絡(luò)5G覆蓋率5G網(wǎng)絡(luò)建設(shè)

2018-02-27 14:50:20

大數(shù)據(jù)公廁城市

2011-04-25 09:49:20

代碼測(cè)試

2024-04-01 08:26:30

單測(cè)覆蓋率字節(jié)碼

2012-09-21 10:30:56

Linux項(xiàng)目代碼覆蓋率

2024-06-14 12:04:33

2022-07-22 07:38:31

監(jiān)控系統(tǒng)

2016-01-13 10:14:15

WebPHP函數(shù)覆蓋

2022-03-29 11:32:32

單元測(cè)試覆蓋率框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: www成人免费视频 | 超碰免费在线观看 | 日韩午夜激情 | 99re在线| 精品美女视频在线观看免费软件 | 无码日韩精品一区二区免费 | 狠狠久久 | 国产免费一区二区 | 欧美日韩专区 | 中文字幕免费观看 | 二区在线观看 | 国产香蕉视频 | 精品香蕉一区二区三区 | www.色午夜.com | 亚洲视频免费在线 | 精品久久久久香蕉网 | 亚洲欧美一区二区三区在线 | h视频免费在线观看 | 亚洲精品91 | 久久精品欧美一区二区三区不卡 | 国产激情一区二区三区 | 亚洲综合在 | 99re66在线观看精品热 | 午夜成人在线视频 | 久草新视频 | 成人免费视屏 | 在线观看午夜视频 | 国产精品久久性 | 国产欧美视频一区 | 老司机狠狠爱 | 久久久.com | 91精品国产91久久久久久最新 | 欧美成人精品二区三区99精品 | 欧美一区二区三区视频在线播放 | 粉嫩国产精品一区二区在线观看 | 性一交一乱一伦视频免费观看 | 久久精品国产一区二区电影 | 伊人精品久久久久77777 | 国产精品中文字幕在线观看 | 亚洲欧美在线观看 | 午夜寂寞福利视频 |