国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

兩個(gè)你可能不需要的酷 Java 框架

開發(fā) 測(cè)試
變異測(cè)試和基于屬性的測(cè)試是 Java 測(cè)試工具包中兩個(gè)相對(duì)小眾的技術(shù)。不建議廣泛采用:它們可以使經(jīng)過良好測(cè)試的代碼更加健壯,但在測(cè)試成熟度較差的項(xiàng)目中浪費(fèi)時(shí)間。

我們都參加過——甚至可能發(fā)表過——演講者特別迷戀某種語言或工具的演講,并且在諸如“簡單地添加此配置鍵或依賴項(xiàng)”之類的短語中過于頻繁地使用該詞。總是推薦一些健康的懷疑來抵消這種熱情,特別是當(dāng)技術(shù)是新的、很少使用的、專業(yè)的或三者的組合時(shí)。

軟件框架永遠(yuǎn)不會(huì)免費(fèi)工作,即使您不支付許可費(fèi)。不熟悉的技術(shù)有一個(gè)學(xué)習(xí)曲線,無論多么溫和。不要告訴我我可以通過“僅”添加一行build.gradle(或二十到pom.xml)來獲得工具 X 的所有好處。特別是應(yīng)始終將測(cè)試工具視為潛在的責(zé)任。他們必須通過相應(yīng)的質(zhì)量提高來證明其總擁有成本是合理的,而這種更高的質(zhì)量必須具有商業(yè)意義。抱歉打消了你的熱情,但你沒有被聘為藝術(shù)家。這樣的等式是不可能用硬數(shù)字來表達(dá)的。常識(shí)必須足夠。

基于屬性的測(cè)試和突變測(cè)試

在這篇文章中,我想討論 Java 測(cè)試工具包中兩種成熟但相對(duì)小眾的技術(shù):使用 Pitest 進(jìn)行突變測(cè)試和使用Jqwik進(jìn)行基于屬性的測(cè)試。我之前寫過關(guān)于PBT和 MT 的文章,帶有開發(fā)人員的帽子和“為技術(shù)而技術(shù)”的心態(tài)。現(xiàn)在,我將戴上 CFO 的預(yù)算批準(zhǔn)帽,并解釋為什么在使用它們之前應(yīng)該三思而后行。但首先,如果您不熟悉這些技術(shù),請(qǐng)進(jìn)行非常簡潔的復(fù)習(xí)。

突變測(cè)試 (MT) 框架對(duì)測(cè)試中的編譯代碼進(jìn)行小而重要的更改(突變)。不用擔(dān)心,這是在內(nèi)存中完成的,不會(huì)觸及源。JVM 仍然可以運(yùn)行新的字節(jié)碼,但如果您有足夠的覆蓋范圍,更改后的行為現(xiàn)在應(yīng)該會(huì)導(dǎo)致至少一個(gè)單元測(cè)試失敗。我們稱之為殺死突變體,用游戲玩家的話說。當(dāng)測(cè)試套件的覆蓋率很高但斷言很差時(shí),MT 尤其具有啟發(fā)性。許多測(cè)試將保持綠色,但 MT 保持綠色是個(gè)壞消息。

基于屬性的測(cè)試 (PBT) 完全不同。它允許您為屬性定義測(cè)試場(chǎng)景,這些屬性是適用于一系列值的真實(shí)語句。“未滿 18 歲者不得入內(nèi)”就是這樣的說法。使用 PBT boolean isAgeAllowed(int age),可以使用介于 0 到 18 之間的隨機(jī)值范圍調(diào)用某些方法。有關(guān)示例,請(qǐng)參見配套 GitLab 項(xiàng)目中的AdmissionCalculatorPropertySuite 。

MT 是一種質(zhì)量驗(yàn)證技術(shù),可在現(xiàn)有測(cè)試中發(fā)現(xiàn)缺失或不完整的斷言。PBT 通過從多個(gè)角度打擊現(xiàn)有測(cè)試來增強(qiáng)現(xiàn)有測(cè)試。在單元/組件/集成/端到端測(cè)試的測(cè)試金字塔譜中,它們位于底部。盡管它們存在差異,但它們有一個(gè)重要的共同點(diǎn):它們是可以使結(jié)構(gòu)良好的代碼庫變得更好的工具,但在測(cè)試成熟度較低的項(xiàng)目中,它們是無用的,即使不是真正有害的。此外,它們對(duì)于有效部署和使用也很重要。

讓我們用一個(gè)好的測(cè)試驅(qū)動(dòng)方法的典型例子來詳細(xì)說明。您正在編寫一個(gè)組件,該組件根據(jù)顧客的出生日期計(jì)算入場(chǎng)費(fèi)。幸運(yùn)的是,您的團(tuán)隊(duì)非常注重規(guī)范:

  • 一個(gè)人的年齡必須評(píng)估為非負(fù)值。帶有“出生日期無效”的信號(hào)例外。
  • 4 歲以下的兒童或 90 歲以上的成人不得參加這個(gè)可怕的主題公園游樂設(shè)施。帶有“顧客必須在 4 到 90 歲之間”的信號(hào)例外。
  • 15 歲或以下的入場(chǎng)費(fèi)為 10 歐元,16 歲及以上的入場(chǎng)費(fèi)為 15 歐元。

該代碼是一組簡單的整數(shù)值 if 語句(請(qǐng)?jiān)徫业娜唛L)。完整代碼在這里。

爪哇1 如果(年齡 < 0{2 throw new IllegalArgumentException ( "出生日期 [%s] 無效" . formatted ( dateOfBirth ));3 } else if (年齡 < 4 || 年齡 > 90 ) {4 throw new IllegalArgumentException ( "顧客必須在 4 到 90 歲之間,但是是 [%s]" .formatted ( age ) ); 5 }否則 如果(年齡 < 16{6 返回 10 ;7 }其他{8 返回 15 ;9 }

使用像這樣的簡單代碼很容易實(shí)現(xiàn) 100% 堅(jiān)如磐石的覆蓋率。請(qǐng)參閱入學(xué)計(jì)算器套件。對(duì)業(yè)務(wù)規(guī)則的大多數(shù)更改都會(huì)自動(dòng)導(dǎo)致測(cè)試失敗,但不是全部。讓我們引入一個(gè)新規(guī)則。

65 歲或以上的成年人支付 10 歐元。

因此,兒童和老年人有資格享受折扣。就代碼而言:if (age < 16)變?yōu)閕f (age < 16 || age >= 65)

您所有的單元測(cè)試仍然通過。類、方法、行甚至分支覆蓋率仍然是 100%。測(cè)試說明了真相,但它不再是全部真相,因?yàn)樵谥?65 附近引入了一個(gè)新的、未經(jīng)測(cè)試的邊緣情況。如果您的工作是測(cè)試驅(qū)動(dòng)的,那么您應(yīng)該在添加新條件之前編寫額外的測(cè)試場(chǎng)景。

當(dāng)突變測(cè)試無濟(jì)于事時(shí)

MT能抓住這個(gè)遺漏嗎?是的,它可能已更改age >= 65為age > 65并提醒您沒有測(cè)試來涵蓋這種邊緣情況。但是在實(shí)施更改時(shí),您可以而且應(yīng)該注意到它。您可以正確地爭辯說,生產(chǎn)代碼從來沒有像這個(gè)例子那樣微不足道。當(dāng)您繼承大型代碼庫時(shí),MT 肯定更有助于提高測(cè)試質(zhì)量嗎?以下是我可能不是的原因。

  • 當(dāng)測(cè)試套件的斷言很差時(shí),您不需要 MT 告訴您。在 src/test/java 中對(duì) 'assert' 進(jìn)行全文搜索會(huì)告訴您您需要知道的一切。
  • 您不需要 MT 來檢查測(cè)試覆蓋率。有更有效的工具可以做到這一點(diǎn)。如果發(fā)現(xiàn)大部分代碼,首先,MT 無法產(chǎn)生任何有用的東西,因?yàn)闆]有測(cè)試代碼可以殺死突變體。
  • 像 Pitest 這樣的工具可以生成非常精確但也很詳細(xì)的關(guān)于潛入雷達(dá)的突變體的報(bào)告。如果你有很好的覆蓋范圍但斷言很差,這將是巨大的。這就像一個(gè)所有警告燈同時(shí)閃爍的 747 駕駛艙。知道首先要解決哪個(gè)問題需要判斷。殺死所有的變種人是沒有意義的,因?yàn)?100% 的測(cè)試覆蓋率通常是不值得的。
  • MT 框架為每個(gè)突變體多次運(yùn)行相同的測(cè)試場(chǎng)景,因此被測(cè)代碼應(yīng)該快速執(zhí)行。訪問數(shù)據(jù)庫、文件系統(tǒng)或網(wǎng)絡(luò)會(huì)使突變測(cè)試運(yùn)行速度慢得令人無法接受。同樣,具有長方法和高圈復(fù)雜度的非內(nèi)聚代碼創(chuàng)造了許多引入突變的機(jī)會(huì)。相同的 long 方法將被調(diào)用無數(shù)次。

用 PBT 捕捉未知的邊緣情況

PBT 在捕捉未經(jīng)測(cè)試的業(yè)務(wù)邏輯添加方面做得很好。單元測(cè)試給你真相,但屬性測(cè)試給你全部真相。由于它驗(yàn)證了 4 到 90 之間的所有值,因此它現(xiàn)在會(huì)在達(dá)到 65 到 90 的范圍時(shí)失敗。

爪哇1@財(cái)產(chǎn)2公共 voidany_age_between_four_and_ninety_is_valid ( @ForAll @IntRange ( min = 4 , max = 90 ) int age ) {3 斷言(getAdmissionForAge(年齡))。是積極的();4}

從表面上看,上面看起來像是一個(gè)參數(shù)化的測(cè)試

爪哇1@ParameterizedTest2@ValueSource ( ints = { 4 , 90 })3公共 無效
any_age_between_four_and_ninety_is_valid(整數(shù) 年齡){4... }5

不過,不要被愚弄。上面的單元測(cè)試不測(cè)試“任何年齡”,只測(cè)試我們碰巧知道的邊緣情況。使用 PBT 作為一種霰彈槍方法來殺死你忘記的邊緣情況是很誘人的,但這與它的精神背道而馳。您應(yīng)該從記錄的屬性開始,并將它們轉(zhuǎn)換為可運(yùn)行的測(cè)試用例。指定這些屬性應(yīng)該在測(cè)試和生產(chǎn)代碼之前。

沒有框架可以挽救低標(biāo)準(zhǔn)的測(cè)試

當(dāng)測(cè)試成熟度較差的團(tuán)隊(duì)編寫單元測(cè)試時(shí),通常是為了確認(rèn)生產(chǎn)代碼的作用。給定值 X 和 Y,被測(cè)方法返回 Z,這就是我們所斷言的。用一千個(gè)不同的值(如 PBT 所做的那樣)來打擊它似乎毫無意義。如果你的自動(dòng)化測(cè)試只是像那樣鞏固現(xiàn)狀,那確實(shí)是毫無意義的。您可以從這種方法中獲得的最好的結(jié)果是對(duì)回歸的一些保護(hù)。PBT 和 MT 都不會(huì)幫助您。他們無法揭示實(shí)施中的邏輯判斷失誤,更不用說解釋設(shè)計(jì)時(shí)的錯(cuò)誤了。一開始可能沒有。

MT 和 PBT 在經(jīng)過良好測(cè)試的關(guān)鍵業(yè)務(wù)代碼中具有價(jià)值,其中充滿了 if 語句、開關(guān)和(數(shù)字)邊緣情況,您需要金錢可以買到的所有穩(wěn)健性。相反,如果一個(gè)方法對(duì)任何浮點(diǎn)值的行為都是可預(yù)測(cè)的,那么用隨機(jī)輸入對(duì)其進(jìn)行一千次測(cè)試并不會(huì)給你太多的洞察力。

不要將這些框架用于支持功能,即支持應(yīng)用程序算法核心的代碼:Web 或消息傳遞端點(diǎn)、數(shù)據(jù)庫訪問層、安全層或數(shù)據(jù)傳輸映射邏輯。不要編寫遇到此類代碼的 PBT 場(chǎng)景,并確保 Pitest 忽略這些部分進(jìn)行突變。

這些資源密集型框架只有在您將顯著算法正確地隔離為可以測(cè)試數(shù)千次而不會(huì)破壞房屋的小類時(shí)才值得。當(dāng)您將邏輯重構(gòu)為可測(cè)試的塊并提高單元測(cè)試的覆蓋率和質(zhì)量時(shí),您甚至可能會(huì)發(fā)現(xiàn)不再需要突變測(cè)試。

PBT 和 MT 是令人著迷的技術(shù),所以一定要看看它們。但它們也是碩士論文的內(nèi)容。他們對(duì)他們有一點(diǎn)學(xué)術(shù)氣息,脫離了質(zhì)量承擔(dān)成本并且必須可以協(xié)商的商業(yè)世界。如果您決定使用它們,請(qǐng)花時(shí)間充分了解它們,不要陷入為測(cè)試而測(cè)試的心態(tài)。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-07-28 08:28:07

JavaScriptswitch開發(fā)

2024-01-26 11:19:36

CIOIT領(lǐng)導(dǎo)者企業(yè)

2014-09-30 16:03:35

iStick容量iPhone

2022-04-21 08:01:34

React框架action

2019-12-31 13:12:14

5G智能手機(jī)操作系統(tǒng)

2022-03-31 06:18:21

WiFi 6EWiFi 6

2017-10-30 10:43:20

CTO技術(shù)職業(yè)

2010-11-23 10:55:47

跳槽

2012-08-23 09:50:07

測(cè)試測(cè)試人員軟件測(cè)試

2022-06-07 17:01:31

UI框架前端

2018-01-29 13:18:42

前端JavaScript

2021-05-26 10:19:01

jreJava應(yīng)用程序

2018-01-17 15:33:14

2019-07-15 08:00:00

AI人工智能

2021-05-07 15:18:26

比特幣禁令監(jiān)管

2017-03-13 13:54:40

戴爾

2018-05-07 14:11:15

RootAndroidXposed

2021-08-04 08:22:53

前端技術(shù)編程

2020-12-07 08:15:11

機(jī)器學(xué)習(xí)人工智能AI

2024-02-22 09:00:00

LogitMat數(shù)據(jù)集算法
點(diǎn)贊
收藏

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

国产偷倩在线播放| 自拍偷拍亚洲综合| 亚洲一区二区三区不卡国产欧美 | 风间由美久久久| 91精品国产一区二区在线观看| 91精品国产综合久久久久久| 宅男深夜国产| 国产日韩欧美精品一区| 免费极品av一视觉盛宴| 久久免费国产| 国产精选一区二区| 香蕉国产精品| 国内精品久久影院| 亚洲校园欧美国产另类| fc2成人免费人成在线观看播放| 九色91在线视频| 亚洲精品一区av| 欧美老年两性高潮| 日本五十路在线| 一区二区三区精品视频在线观看 | 福利在线一区二区| 欧美日韩理论| 成人高h视频在线| 亚洲大奶少妇| 最近2019年好看中文字幕视频 | 日韩高清在线一区| 国产精品 欧美在线| 激情视频亚洲| 亚洲国产精品一区二区久| 国产网站观看9久| 国产精品成人一区二区三区夜夜夜| 欧美色欧美亚洲另类七区| 欧美一区不卡| 国产精品在线看| 亚洲男人都懂第一日本| 午夜伦理精品一区| 国产成人福利av| 欧美黑人xxx| 激情小说亚洲色图| 久久99久久99精品中文字幕| 日本电影在线观看| 亚洲国产成人在线播放| 最新国产露脸在线观看| 欧美岛国在线观看| www.51av欧美视频| 精品调教chinesegay| 久久五月精品中文字幕| 日韩欧美中文字幕公布| 草美女在线观看| 精品国产91乱码一区二区三区| 中文在线手机av| 亚洲大胆美女视频| 日韩欧美一区二区三区免费观看| 九色成人免费视频| 波多野结衣一区| 中文字幕日韩精品一区二区| 麻豆国产精品一区二区三区| 国产高清一区视频| 亚洲一区一卡| 成人污网站在线观看| 91一区二区在线观看| 久久国产亚洲精品无码| 日韩三级免费观看| 亚洲二区在线| √天堂资源地址在线官网| 91精品一区二区| 欧美性猛交xxxx黑人| 天天做天天爱天天综合网 | 国产欧美日韩视频一区二区| 91最新在线视频| av资源站久久亚洲| 色综合中文字幕国产| 奇米影视亚洲| 在线免费激情视频| 按摩亚洲人久久| 狠狠干成人综合网| 黄色大秀av大片| 欧美交受高潮1| 亚洲瘦老头同性70tv| 国产综合精品一区二区三区| 国产成人精品三级麻豆| 91在线视频| 午夜欧美大片免费观看| 国产呦精品一区二区三区网站| 黄色视屏网站在线免费观看| 久久久精品免费| 国产一区二区三区四区五区美女| 黄页视频在线观看| 欧洲美女7788成人免费视频| 精品一区二区三区香蕉蜜桃| 国产精品视频一区二区久久| 欧美黄色成人网| 亚洲欧洲韩国日本视频| 丁香六月激情网| 日韩欧美高清一区| 国产精品外国| 欧美a在线看| 麻豆亚洲一区| 欧美色倩网站大全免费| 亚洲婷婷在线| 污污网址在线观看| 国产精品久久一区主播| 午夜视频一区在线观看| 成人福利一区| 四虎最新地址发布| 日韩美女写真福利在线观看| 亚洲精品国产a久久久久久| 久久99国产成人小视频| 深夜福利在线视频| 狠狠色综合欧美激情| 7777精品伊人久久久大香线蕉的 | 99热播在线观看| 久久久久成人网| 亚洲激情校园春色| 日韩在线观看一区| jizz在线观看中文| 人偷久久久久久久偷女厕| 精品国产成人系列| 国产偷国产偷精品高清尤物| 久久99蜜桃| 国产日本在线视频| 日韩中文字幕免费在线| 日韩电影网在线| 国产呦萝稀缺另类资源| 日本高清久久| 欧美1—12sexvideos| metart日本精品嫩模| 毛片在线视频播放| 嫩草香蕉在线91一二三区| 性高潮久久久久久久久| 国产在线视频一区| 久久久久免费视频| 在线观看欧美日韩国产| 国产一区二区三区在线免费观看| 精品日本高清在线播放| 欧美激情一区三区| 亚洲综合网站在线观看| 国产精品久久久久久久久动漫 | 男男电影完整版在线观看| 色妞一区二区三区| 国产精品亲子伦对白| 国产成人综合在线观看| 国产精品美女久久久久久不卡| 日本人妖在线| 亚洲曰本av电影| 亚洲免费av电影| 成人成人成人在线视频| 九九视频精品免费| 国产精品女同一区二区三区| 亚洲激情在线| 欧美寡妇性猛交xxx免费| 久久久欧美一区二区| 久久久精品黄色| 青草综合视频| 国产美女在线一区| 久久成人精品视频| 色综合咪咪久久| 欧美性极品xxxx娇小| 在线精品视频小说1| 欧美一区二区视频在线观看2022| 日韩色在线观看| 精品国产导航| 青春草在线视频免费观看| 久久精品国产一区二区三区日韩 | 欧美日韩精品在线视频| 午夜精品一区二区三区三上悠亚 | 美女网站免费观看视频| 欧美网站免费观看| 99re99热| 内射国产内射夫妻免费频道| 久久免费视频2| 久久久久久久免费| 91精品综合久久| 精品久久蜜桃| 国产精品xxx在线观看www| 国产乱肥老妇国产一区二| 性色av香蕉一区二区| 欧美伦理91i| 亚洲精品自拍视频| 国产日韩在线视频| 成人一区二区三区中文字幕| 色猫猫成人app| 女性隐私黄www网站视频| 久久久亚洲欧洲日产国码aⅴ| 国产精品国产自产拍高清av| 精品视频免费| 麻豆影院在线| 青青在线免费观看| 2023亚洲男人天堂| 91成人看片片| 国产一区二区h| www.久久东京| 亚洲福利二区| 日韩片电影在线免费观看| 日韩中文字幕不卡视频| 自拍偷自拍亚洲精品播放| 国一区二区在线观看| 欧美精品高清| 91欧洲在线视精品在亚洲| 日韩三级电影网站|