国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java變異測試(殺死突變體)

這篇具有很好參考價(jià)值的文章主要介紹了java變異測試(殺死突變體)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

java變異測試(殺死突變體)

簡介
如果程序產(chǎn)生不同的輸出,則測試輸入可以區(qū)分兩個(gè)程序
對于這個(gè)輸入。 變異測試基于一個(gè)簡單的概念:如果一個(gè)測試套件是擅長將我們的程序與其他類似程序區(qū)分開來,那么很可能要善于找茬。 這樣做的理由是,那么測試可能會被視為試圖將程序與某些程序區(qū)分開來正確的程序。
給定一個(gè)程序 p,一個(gè)突變體是某個(gè)變體 p’ of p.通常,我們通過應(yīng)用突變算子來生成突變體:允許我們轉(zhuǎn)換的規(guī)則程式。 例如,將算術(shù)運(yùn)算符 + 的出現(xiàn)替換為算術(shù)運(yùn)算符 * 的規(guī)則是變異運(yùn)算符。 其他例如在謂詞中將 > 替換為 >=。 通常,我們會產(chǎn)生一個(gè)突變體通過僅應(yīng)用一個(gè)運(yùn)算符的一個(gè)實(shí)例:此類突變體是一階的突變體。
僅使用一階突變體已在兩個(gè)方面得到證明。 首先,它是認(rèn)為如果我們的測試發(fā)現(xiàn)由一階突變體定義的微小差異然后它會發(fā)現(xiàn)由高階突變體定義的更大差異:這稱為耦合效應(yīng)。 其次,也有人認(rèn)為真正的程序員小錯(cuò)誤,因此真正的程序就像正確的一階突變體程序:這被稱為稱職的程序員假設(shè)。 有一些支持這些假設(shè)的經(jīng)驗(yàn)證據(jù),但不可避免地,這些證據(jù)是有限的。
只使用一階突變體的原因是務(wù)實(shí)的:如果我們不將我們限制在一階突變體,那么突變體的總數(shù)是可能是巨大的。 事實(shí)上,即使我們只產(chǎn)生一階突變體,突變測試工具會產(chǎn)生大量的突變體,即使是一小塊代碼。 這是限制突變測試采用的因素之一。

生成突變體
我們通常使用突變計(jì)算運(yùn)算符來生成突變體,例如:
(1) replace + by *
(2) replace a variable x, in an expression, by another variable y
(3) replace a variable x, on the LHS of an assignment, by another variable y
(4) deleting a statement.
如果一個(gè)突變體可以通過一次應(yīng)用一個(gè)突變算子產(chǎn)生,那么它就是一階突變體。通常只使用一階突變體:這限制了生成的突變體的數(shù)量。 如果一個(gè)突變體不是一階突變體,那么它就是一個(gè)高階突變體耦合效應(yīng):如果我們殺死一級突變體,那么我們就會殺死(大多數(shù))高階突變體
有能力的程序員假設(shè):真實(shí)代碼接近正確的(因此類似于正確的一級突變體程序)

突變檢測術(shù)語
我們說測試用例 t 殺死了突變體 p’ of p 如果 p’ 和 p產(chǎn)生不同
給定來自 t 的輸入時(shí)的輸出。 此外,突變體 p’ of p 是等價(jià)的
如果沒有測試輸入殺死 p’. (p’ of p 在句法上與 p 不同)

在突變測試中,我們產(chǎn)生了程序 p 的一組 M 個(gè)突變體。 如果每個(gè)突變體都被 T 殺死,則認(rèn)為測試套件 T 是足夠的:對于每個(gè)(非等價(jià)的)突變體 p’在 M 中,T 中有一些測試用例 t 殺死了 p’. 突變覆蓋率是被殺死的非等價(jià)突變體的百分比通過 T. 我們的目標(biāo)是生成一個(gè)達(dá)到 100% 覆蓋率的測試套件; 那個(gè)滿足相應(yīng)的充分性標(biāo)準(zhǔn)。

尋找殺死突變體的測試輸入
假設(shè)我們在語句 s 處對程序 p 進(jìn)行了變異以形成變異體 p’。 然后為了讓測試輸入殺死 p’,它必須實(shí)現(xiàn)以下目標(biāo);
? 執(zhí)行p’ 的語句s。
? 感染狀態(tài):讓 s 處的突變/變化導(dǎo)致某些變量 v 的值有所不同(可能是程序指針,代表?xiàng)l件的不同值)。
? 將對v 值的更改傳播到輸出??紤]以下示例并將其稱為p。 其中,input(x) 是一段代碼,它接受一個(gè)輸入并將其分配給 x; output(y) 是一段代碼,它輸出 y 的值。

1 . i n p u t ( x ) ;
2 . y=1;
3 . i f ( x>0)
4 . 	x=x ;
	e l s e
5 . 	x=?x ;
6 . x=x+1;
7 . w hil e ( x>0) {
8 . 	y=y?x ;
9 . 	x=x?1;
}
1 0. output ( y ) ;

mutate statement 4:

3 . i f ( x>0)
4 . 	x=y ;
	e l s e
5 . 	x=?x ;
6 . x=x+1;

工具支持
有多種編程語言的工具: For Java, examples include the following(PIT; Major; μJava )
也是一種相對通用的工具,可用于任何具有元模型的語言:
The Wodel tool (and language)

通常產(chǎn)生的突變體數(shù)量使得使用工具支持必不可少。 通常,工具至少會執(zhí)行以下操作:
? 產(chǎn)生突變體。
? 使用給定的測試輸入t 運(yùn)行所有未被殺死的突變體,決定其中哪些被殺死到t。
? 說明哪些突變體尚未被殺死。
工具也可能隨機(jī)生成測試用例。如前所述,通??梢詺⑺涝S多突變體
通過使用隨機(jī)生成的測試輸入。 使這些過程自動(dòng)化相對簡單。 然而,一些突變體更難殺死。 例如,考慮條件 x>c 到 x>=c 的突變,其中 x 是浮點(diǎn)變量。 只有當(dāng)測試輸入將程序帶到這個(gè)條件并且此時(shí) x 取值 c 時(shí),才有可能殺死這個(gè)突變體。 鑒于 x 可以取的大量可能值,可能很難通過隨機(jī)測試殺死這樣的突變體。
因此,通常有一個(gè)不是自動(dòng)化的最后階段:測試人員考慮尚未被殺死的剩余突變體。 這個(gè)最后階段很昂貴,可能是目前阻止突變測試擴(kuò)展到大型系統(tǒng)的主要因素。
雖然許多工具都支持突變測試,但有一個(gè)“經(jīng)典”工具:Mothra。 該工具將變異測試應(yīng)用于 FORTRAN 程序,是第一個(gè)重要的變異測試工具。 您會發(fā)現(xiàn)有很多突變測試工具 - 嘗試一些互聯(lián)網(wǎng)搜索!

使變異測試更有效
突變測試可能需要付出過多的努力。 即使給定一個(gè)小程序,也會產(chǎn)生許多突變體,其中一些是等價(jià)的。 之一問題是我們通常會生成和編譯許多突變體。 這個(gè)問題可以通過生成程序模式來解決:原始程序的參數(shù)化版本,其中添加的參數(shù)值決定哪些突變被“打開”。
除此之外,還有以下主要方法類別
可以使突變測試更有效:
? 使用更少的突變體。
? 自動(dòng)識別等效突變體或減少突變體的數(shù)量產(chǎn)生了等效的突變體。

研究表明,通過選擇標(biāo)準(zhǔn)的適當(dāng)子集突變算子有可能產(chǎn)生更少的突變體,但(可以說)幾乎不會降低這些突變體的有效性。 這種方法稱為選擇性突變。 還表明,從一組可能的突變體中隨機(jī)抽樣也可能是有效的。
已經(jīng)提出了許多限制等效突變問題的方法。 其中包括:
? 使用定理證明器等工具來確定是否剩余突變體是等價(jià)的。
? 使用依賴性分析等方法來避免產(chǎn)生一些保證是等效突變體的突變體。
? 避免或限制使用產(chǎn)生許多等效突變體的操作符。
? 使用簡單的檢查。 特別是,發(fā)現(xiàn)比較編譯后的代碼足以消除一些等效的突變體。

模擬突變測試中的其他標(biāo)準(zhǔn)
一些測試標(biāo)準(zhǔn)可能會在突變測試中被模擬:有可能產(chǎn)生
一組突變體,如果我們殺死所有這些突變體,那么我們就滿足了正在考慮的標(biāo)準(zhǔn)。 在這里我們將看一個(gè)標(biāo)準(zhǔn):100% statementcoverage。
一個(gè)標(biāo)準(zhǔn)的變異運(yùn)算符用產(chǎn)生錯(cuò)誤的新語句替換語句。 因此,為了產(chǎn)生一組突變體來模擬語句覆蓋,我們可以執(zhí)行以下操作:
? 對于程序 p 的每個(gè)語句 s,通過替換 s 產(chǎn)生一個(gè)突變體 ps
通過產(chǎn)生運(yùn)行時(shí)錯(cuò)誤的語句。
? 生成測試以殺死所有非等效突變體。

變異模型
變異測試中的大部分工作都會改變源代碼。 然而,人們對變異模型的興趣越來越大。 顯然,如果我們有一個(gè)可執(zhí)行語言的模型,那么我們可以直接使用突變算子、殺死突變體和等效突變體的概念。 我們還獲得了類似的測試有效性和充分性度量。有許多潛在的好處。 一、經(jīng)常生產(chǎn)模型在代碼之前,因此模型的變異可能導(dǎo)致在代碼生成之前就生成測試。 此類測試用例的早期生成可能會加速軟件開發(fā),并有可能提高代碼質(zhì)量。 此外,模型的突變體可能代表相當(dāng)不同的故障類別,因此終止此類突變體的測試用例可能會發(fā)現(xiàn)為終止代碼而生成的測試用例未發(fā)現(xiàn)的故障。文章來源地址http://www.zghlxwxcb.cn/news/detail-733927.html

到了這里,關(guān)于java變異測試(殺死突變體)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 單元測試(unit testing)到底是什么?

    做開發(fā)的同學(xué)應(yīng)該都聽說過單元測試(unit testing),因?yàn)閷卧獪y試的理解程度不同,所以對單元測試的看法也可能有所不同。本文就來深入講解一下單元測試的概念、作用和是否需要做單元測試。 單元測試(unit testing)是軟件開發(fā)中的一種最低級別的測試方式,對軟件中的

    2024年02月08日
    瀏覽(20)
  • Python 面試:單元測試unit testing & 使用pytest

    calc.py test_calc.py employee.py test_employee.py 輸出為: setupClass setUp test_apply_raise tearDown .setUp test_email tearDown .setUp test_fullname tearDown .teardownClass Ran 3 tests in 0.001s OK employee.py test_employee.py 輸出為: setupClass setUp test_apply_raise tearDown .setUp test_email tearDown .setUp test_fullname tearDown .setUp tearDown

    2024年02月10日
    瀏覽(27)
  • 前端開發(fā)中的單元測試(unit testing)和端到端測試(end-to-end testing)

    前端開發(fā)中的單元測試(unit testing)和端到端測試(end-to-end testing)

    聚沙成塔·每天進(jìn)步一點(diǎn)點(diǎn) 前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個(gè)專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一個(gè)系統(tǒng)而

    2024年02月03日
    瀏覽(50)
  • test-01-java 單元測試框架 junit 入門介紹

    JUnit 是一個(gè)用于編寫可重復(fù)測試的簡單框架。 它是 xUnit 架構(gòu)的一種實(shí)例,專門用于單元測試框架。 What to test? Need Desc Right 結(jié)果是否正確 B 邊界條件是否滿足 I 能反向關(guān)聯(lián)嗎 C 有其他手段交叉檢查嗎 E 是否可以強(qiáng)制異常發(fā)生 P 性能問題 CalculatorTest 類包含了一個(gè)測試方法 test

    2024年02月04日
    瀏覽(41)
  • springboot項(xiàng)目test單元測試java.lang.NullPointerException問題

    springboot項(xiàng)目test單元測試java.lang.NullPointerException問題

    最近在測試寫好mapper相關(guān)接口時(shí)是,出現(xiàn)空指針異常,所以記錄一下。 在測試用戶登錄時(shí),出現(xiàn)如下錯(cuò)誤 測試方法 錯(cuò)誤信息 通過分析日志了解到原因是 無法調(diào)用“AdminUserMapper.login(String, String)”,因?yàn)椤皌his.adminUserMapper”為空 應(yīng)該是AdminUserMapper沒有注入進(jìn)來,但是自己

    2024年02月02日
    瀏覽(20)
  • java程序啟動(dòng)時(shí)自動(dòng)執(zhí)行方法 @PostConstruct,單元測試@Test

    java程序啟動(dòng)時(shí)自動(dòng)執(zhí)行方法,在方法上添加@PostConstruct注解即可,可以代替單元測試junit的@Test注解 @PostConstruct //程序啟動(dòng)時(shí)自動(dòng)執(zhí)行方法 @Test //需要選中該方法運(yùn)行啟動(dòng)(單元測試) java 代碼----程序啟動(dòng)時(shí)自動(dòng)執(zhí)行方法 @PostConstruct java 代碼----需要選中該方法運(yùn)行啟動(dòng)(單元

    2024年02月05日
    瀏覽(22)
  • Android Unit Test

    測試金字塔(如圖 2 所示)說明了應(yīng)用應(yīng)如何包含三類測試(即小型、中型和大型測試): 小型測試是指單元測試,用于驗(yàn)證應(yīng)用的行為,一次驗(yàn)證一個(gè)類。 中型測試是指集成測試,用于驗(yàn)證模塊內(nèi)堆棧級別之間的互動(dòng)或相關(guān)模塊之間的互動(dòng)。 大型測試是指端到端測試,用

    2024年02月15日
    瀏覽(14)
  • 閱讀筆記——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

    閱讀筆記——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

    【參考文獻(xiàn)】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692. 【注】本文僅為作者個(gè)人學(xué)習(xí)筆記,如有冒犯,請聯(lián)系作者刪除。 目錄 ?摘要 一、介紹 二、挑戰(zhàn)和提出的方法 1、合成有效的API調(diào)用

    2024年02月04日
    瀏覽(18)
  • Java 中的 void 和 Kotlin 的 Unit

    1 Java 中的 void 和 Kotlin 中的 Unit 在 Java 中,如果定義的函數(shù)沒有返回值,就需要用 void 來修飾,即 void 不可以省略。這也在 Java 中不能說函數(shù)調(diào)用皆是表達(dá)式的原因,因?yàn)橛行┓椒ú痪哂蟹祷刂岛皖愋托畔?,就不能算作是表達(dá)式。 Java 在語言層設(shè)計(jì)一個(gè) Void 類。java.lang.Void 類

    2024年03月24日
    瀏覽(16)
  • Java應(yīng)用中文件上傳安全性分析與安全實(shí)踐

    Java應(yīng)用中文件上傳安全性分析與安全實(shí)踐

    ??謝謝大家捧場,祝屏幕前的小伙伴們每天都有好運(yùn)相伴左右,一定要天天開心哦!??? ????作者主頁: 喔的嘛呀???? 目錄 引言 一. 文件上傳的風(fēng)險(xiǎn) 二. 使用合適的框架和庫 1. Spring框架的MultipartFile 2. Apache Commons FileUpload 3. Apache Commons IO 三. 文件上傳路徑的安全設(shè)置

    2024年04月25日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包