[突變測試] 一種新的測試方法論

突變操作

突變測試通過靈活可配置的突變操作集來從你的代碼中編譯產(chǎn)生新的代碼。

例如CONDITIONALS_BOUNDARY_MUTATOR 改變條件邊界突變會從源代碼中生成下面的語句。

if ( i >= 0 ) {
    return "foo";
} else {
    return "bar";
}

與其對應(yīng)的語句是

if ( i > 0 ) {
    return "foo";
} else {
    return "bar";
}

PIT定義了各式各樣從源代碼中突變的方法,包括移除方法調(diào)用、反置邏輯條件、更改返回值等等韵洋。

PIT的運行需要編譯器在字節(jié)碼中提供以下調(diào)試信息:

  • 代碼行號
  • 源代碼文件名

絕大部分構(gòu)建系統(tǒng)捧颅,如 maven 默認(rèn)就提供了這些信息景图。

突變

PIT通過應(yīng)用突變操作符將生成許多(可能是非常大的數(shù)量)突變體。每一個突變Java類包含一個突變(或錯誤)碉哑,使它們的行為不同于未突變的類挚币。

PIT將這些突變后的類執(zhí)行你的單元測試,如果突變可以被殺死(突變后不滿足測試用例)扣典,則證明本次測試是有效的妆毕。

等價突變

通過改變代碼條件來改變執(zhí)行邏輯并非那么簡單,某些情況下的突變完全等價于未突變之前的邏輯贮尖。

等價突變產(chǎn)生的原因有兩點:

突變的結(jié)果恰好與突變前的行為完全一致笛粘。

例如,下面兩份代碼是邏輯完全等價的:

int i = 2;
if ( i >= 1 ) {
    return "foo";
}

//...
int i = 2;
if ( i > 1 ) {
    return "foo";
}

突變前后雖然有了不同的行為湿硝,但是測試用例并沒有覆蓋到突變產(chǎn)生的非正常結(jié)果薪前。

另一個比較常見的等價突變的示例是DEBUG或者日志,PIT排除了common logging等日志組件的突變生成关斜,也可以通過配置來過濾日志組件序六。

測試執(zhí)行

PIT會根據(jù)修改后的代碼自動運行單元測試。在運行測試之前蚤吹,PIT對測試執(zhí)行傳統(tǒng)的行覆蓋率分析例诀,然后使用這些數(shù)據(jù)和測試的時間來選擇一組測試用例,這些測試用例的目標(biāo)是修改后的代碼裁着。然后使用這些及測試之后的數(shù)據(jù)來選擇測試用例執(zhí)行一組突變代碼繁涂。

這種執(zhí)行機制也是PIT的執(zhí)行速度遠(yuǎn)快于其它類似的突變測試系統(tǒng)的原因(如Jester 、 Jumble)二驰,這也是PIT能夠?qū)y試提升到全部代碼扔罪,而不是僅僅測試單個類的技術(shù)實現(xiàn)。

突變測試報告的輸出結(jié)果集解釋如下:

  • Killed : 突變被殺死桶雀,代表突變的代碼不滿足測試用例
  • Lived : 突變存活矿酵,意味著等價突變或者突變改變的邏輯,但是仍符合測試用例矗积,此時的代碼可能是有問題的全肮!
  • No coverage 代碼沒有被覆蓋到,和存活一樣棘捣,這個測試可能也是有問題的辜腺。
  • Non viable : 不可行的突變是JVM無法加載的,因為字節(jié)碼在某種程度上是無效的。PIT試圖將它所產(chǎn)生的不可存活突變的數(shù)量降到最低评疗。
  • Timed Out : 如果突變導(dǎo)致無限循環(huán)测砂,例如從for循環(huán)中的計數(shù)器中刪除增量,則可能超時百匆。
  • Memory error : 內(nèi)存錯誤可能由于增加系統(tǒng)使用的內(nèi)存數(shù)量的突變而發(fā)生砌些,也可能是在出現(xiàn)突變時重復(fù)運行測試所需的額外內(nèi)存開銷的結(jié)果。如果您看到大量內(nèi)存錯誤加匈,請考慮為測試配置更多的堆和permgen空間存璃。
  • Run error : 運行錯誤意味著在嘗試測試突變時出錯了。某些類型的不可存活突變目前可能導(dǎo)致運行錯誤矩动。如果您看到大量的運行錯誤,這可能是出錯的跡象释漆。

在正常情況下悲没,您應(yīng)該不會看到任何不可行的突變或運行錯誤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男图,一起剝皮案震驚了整個濱河市示姿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逊笆,老刑警劉巖栈戳,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異难裆,居然都是意外死亡子檀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門乃戈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褂痰,“玉大人,你說我怎么就攤上這事症虑∷跬幔” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵谍憔,是天一觀的道長匪蝙。 經(jīng)常有香客問我,道長习贫,這世上最難降的妖魔是什么逛球? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮苫昌,結(jié)果婚禮上需忿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好屋厘,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布涕烧。 她就那樣靜靜地躺著,像睡著了一般汗洒。 火紅的嫁衣襯著肌膚如雪议纯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天溢谤,我揣著相機與錄音瞻凤,去河邊找鬼。 笑死世杀,一個胖子當(dāng)著我的面吹牛阀参,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞻坝,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛛壳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了所刀?” 一聲冷哼從身側(cè)響起衙荐,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浮创,沒想到半個月后忧吟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡斩披,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年溜族,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垦沉。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩祭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡话,到底是詐尸還是另有隱情摧玫,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布绑青,位于F島的核電站诬像,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闸婴。R本人自食惡果不足惜坏挠,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邪乍。 院中可真熱鬧降狠,春花似錦对竣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛋褥,卻和暖如春临燃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烙心。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工膜廊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淫茵。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓爪瓜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匙瘪。 傳聞我的和親對象是個殘疾皇子铆铆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架辆苔。軟件項目的開發(fā)包括:需求算灸、設(shè)...
    宇文臭臭閱讀 6,727評論 5 100
  • 本著共享主義扼劈,本人將PPT考點梳理出來驻啤,并且已經(jīng)翻譯成中文,供大家參考荐吵,歡迎各位指導(dǎo)骑冗! 本次考試題型分為選擇、判斷...
    Moonsmile閱讀 4,172評論 13 28
  • 一先煎、 軟件測試基本概念 1 bug的概念 bug類型:defect贼涩、fault、problem薯蝎、error… pr...
    三口一個瓜閱讀 3,697評論 0 12
  • 1.問:你在測試中發(fā)現(xiàn)了一個 bug 遥倦,但是開發(fā)經(jīng)理認(rèn)為這不是一個 bug ,你應(yīng)該怎樣解決占锯。 首先袒哥,將問題提...
    qianyewhy閱讀 9,270評論 4 123
  • 相關(guān)文章: 《再說說APP測試設(shè)計-1》《再說APP測試設(shè)計-2》《關(guān)于ad hoc test》《干了這碗蛋炒飯 ...
    慧眾rodman閱讀 3,223評論 1 34