白盒測試探討及使用

? ? ? ? 白盒測試又稱結構測試拘鞋、透明盒測試、邏輯驅動測試或基于代碼的測試斩郎。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件费尽,白盒指的是盒子是可視的,你清楚盒子內部的東西以及里面是如何運作的。"白盒"法全面了解程序內部邏輯結構、對所有邏輯路徑進行測試布朦。"白盒"法是窮舉路徑測試。在使用這一方案時苟弛,測試者必須檢查程序的內部結構喝滞,從檢查程序的邏輯著手,得出測試數(shù)據(jù)膏秫。

一、白盒測試基本概念

1)白盒測試分類


白盒測試分類圖

2)白盒測試方法


白盒測試方法圖

二做盅、白盒測試常用工具

代碼分析檢查工具:FindBugs缤削、PMD

覆蓋率工具:jacoco、EMMA

白盒測試工具:junit吹榴、testng

質量管理平臺:SonarQube

編譯工具:Ant亭敢、maven

Mock工具:Jmockit

數(shù)據(jù)庫:mysql

持續(xù)集成工具:Jenkins

代碼管理工具:SVN、git

2.1)覆蓋率工具:jacoco簡介

? ? ? ? JaCoCo是一個開源的覆蓋率工具(官網(wǎng)地址:http://www.eclemma.org/JaCoCo/)图筹,它針對的開發(fā)語言是java帅刀,其使用方法很靈活,可以嵌入到Ant远剩、Maven中扣溺;可以作為Eclipse插件,可以使用其JavaAgent技術監(jiān)控Java程序瓜晤。很多第三方的工具提供了對JaCoCo的集成锥余,如sonar、Jenkins等痢掠。

? ? ? ? JaCoCo包含了多種尺度的覆蓋率計數(shù)器,包含指令級覆蓋(Instructions,C0coverage)驱犹,分支(Branches,C1coverage)嘲恍、圈復雜度(CyclomaticComplexity)、行覆蓋(Lines)雄驹、方法覆蓋(non-abstract methods)佃牛、類覆蓋(classes)等。

我們先來看看jacoco覆蓋率結果展示圖:

jacoco覆蓋率結果展示圖

2.1.1)jacoco基本概念

行覆蓋率:度量被測程序的每行代碼是否被執(zhí)行医舆,判斷標準行中是否至少有一個指令被執(zhí)行俘侠。

類覆蓋率:度量計算class類文件是否被執(zhí)行。

分支覆蓋率:度量if和switch語句的分支覆蓋情況彬向,計算一個方法里面的總分支數(shù)兼贡,確定執(zhí)行和不執(zhí)行的 分支數(shù)量。

方法覆蓋率:度量被測程序的方法執(zhí)行情況娃胆,是否執(zhí)行取決于方法中是否有至少一個指令被執(zhí)行遍希。

圈復雜度:在(線性)組合中,計算在一個方法里面所有可能路徑的最小數(shù)目里烦,缺失的復雜度同樣表示測 試案例沒有完全覆蓋到這個模塊凿蒜。

2.1.2)jacoco注入方式介紹


jacoco注入方式圖

說明:

1、 JaCoCo在Byte Code時使用的ASM技術修改字節(jié)碼方法胁黑,可以修改Jar文件废封、class字節(jié)碼文件。

2丧蘸、JaCoCo同時支持on-the-fly和offline的兩種插樁模式漂洋。

3、 On-the-fly模式中力喷, JVM中通過-javaagent參數(shù)指定特定的jar文件啟動Instrumentation的代理程序刽漂,代理程序在通過Class Loader裝載一個class前判斷是否轉換修改class文件,將統(tǒng)計代碼插入class弟孟,測試覆蓋率分析可以在JVM執(zhí)行測試代碼的過程中完成贝咙。

4、offline模式中拂募,在測試前先對文件進行插樁庭猩,然后生成插過樁的class或jar包,測試插過樁 的class和jar包后陈症,會生成動態(tài)覆蓋信息到文件蔼水,最后統(tǒng)一對覆蓋信息進行處理,并生成報告爬凑。

On-the-fly和offline比較:

On-the-fly模式更方便簡單進行代碼覆蓋分析徙缴,無需提前進行字節(jié)碼插樁,無需考慮classpath 的設置。

存在如下情況不適合on-the-fly于样,需要采用offline提前對字節(jié)碼插樁:

(1) 運行環(huán)境不支持java agent疏叨。

(2) 部署環(huán)境不允許設置JVM參數(shù)。

(3) 字節(jié)碼需要被轉換成其他的虛擬機如Android Dalvik VM穿剖。

(4) 動態(tài)修改字節(jié)碼過程中和其他agent沖突蚤蔓。

(5) 無法自定義用戶加載類。

5糊余、jacoco最小支持java5秀又。

2.1.3)jacoco注入示例

jacoco注入示例圖

2.1.4)jacocoAgent簡介

? ? ? ? jacoco提供jacocoagent.jar,采用On-the-fly模式插樁贬芥,然后jacoco dump內存數(shù)據(jù)到本地吐辙,解析dump數(shù)據(jù),得出代碼覆蓋率蘸劈。

PS:具體配置方式請查看之前文章:《代碼覆蓋率解決方案》一文昏苏,在此不在累述。

地址:http://www.reibang.com/writer#/notebooks/10195615/notes/10727392

2.2)mock工具:jmockit簡介

? ? ? ? JMockit是google code上面的一個java單元測試mock項目威沫,是基于Java中的java.lang.instrument包開發(fā)贤惯,內部使用ASM庫來動態(tài)修改java的字節(jié)碼棒掠,可以Mock公共方法、私有方法烟很、接口等。

2.2.1)Jmockit常用注解

@Mocked:被修飾的對象將會被Mock雾袱,對應的類和實例都會受影響(同一個測試用例中)

@Injectable:僅Mock被修飾的對象

@Capturing:可以mock接口以及其所有的實現(xiàn)類

@Mock:MockUp模式中,指定被Fake的方法

2.2.2)Jmockit常用類

Expectations:期望谜酒,指定的方法必須被調用

StrictExpectations:嚴格的期望妻枕,指定方法必須按照順序調用

NonStrictExpectations:非嚴格的期望,是否調用和順序不作要求

Verifications:驗證屡谐,一般配合NonStrictExpectations來使用

Invocation:工具類,可以獲取調用信息

Delegate:自己指定返回值愕掏,適合那種需要參數(shù)決定返回值的場景,只需指定匿名子類就可以。

MockUp:模擬函數(shù)實現(xiàn)

Deencapsulation:反射工具類

2.2.3)Jmockit使用示例

jmockit使用示例圖

2.3)代碼質量管理平臺:sonar簡介

? ? ? ? Sonar是一個代碼質量管理平臺剑梳,通過插件機制可以支持20多種開發(fā)語言代碼質量管理與檢測唆貌。通過不同的插件對搜集的結果進行再加工處理,通過量化的方式度量代碼質量的變化垢乙,從而可以方便地對不同規(guī)模和種類的工程進行代碼質量管理锨咙。同時 Sonar 還對大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar追逮。

Sonar可以從以下七個維度檢測代碼質量:

不遵循代碼標準

潛在的缺陷

復雜度分析

重復率分析

注釋率分析

單元測試覆蓋率分析

耦合度分析

我們先看看sonar分析展示圖:

sonar分析展示圖

2.3.1)Sonar與maven集成配置

? ? ? ? sonar與maven集成酪刀,只需修改maven的settings.xml文件,加入以下內容即可:

soanr與maven集成圖

2.3.2)Sonar與Ant集成配置

? ? ? ? soanr與Ant集成比較麻煩钮孵,需要在build.xml文件中引用相應的包骂倘,如:jacocoant.jar、sonar-ant-task-2.2.jar等巴席。build.xml部分配置如下:

soanr與Ant集成圖(一)

soanr與Ant集成圖(二)

3)白盒測試執(zhí)行

? ? ? ? 白盒測試執(zhí)行比較簡單历涝,可與jenkins集成,在持續(xù)集成過程中執(zhí)行情妖,也可在本地執(zhí)行睬关。

執(zhí)行方式一:Jenkins構建過程中自動執(zhí)行(jenkins+sonar+Ant/maven+jacoco+Findbugs集成)

執(zhí)行方式二:本地Eclipse編譯過程中自動執(zhí)行(jenkins+sonar+ant/maven+jacoco+Findbugs集成)

4)白盒測試報告

? ? ? ? 白盒測試報告可在sonar平臺查看,比較方便毡证,具體不在累述电爹。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市料睛,隨后出現(xiàn)的幾起案子丐箩,更是在濱河造成了極大的恐慌,老刑警劉巖恤煞,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屎勘,死亡現(xiàn)場離奇詭異,居然都是意外死亡居扒,警方通過查閱死者的電腦和手機概漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喜喂,“玉大人瓤摧,你說我怎么就攤上這事∮裼酰” “怎么了照弥?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長进副。 經(jīng)常有香客問我这揣,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任给赞,我火速辦了婚禮塞俱,結果婚禮上,老公的妹妹穿的比我還像新娘罐旗。我一直安慰自己九秀,他們只是感情好粘我,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布都弹。 她就那樣靜靜地躺著匙姜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪框杜。 梳的紋絲不亂的頭發(fā)上咪辱,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天油狂,我揣著相機與錄音选调,去河邊找鬼灵份。 笑死填渠,一個胖子當著我的面吹牛氛什,可吹牛的內容都是我干的。 我是一名探鬼主播捺檬,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼堡纬,長吁一口氣:“原來是場噩夢啊……” “哼烤镐!你這毒婦竟也來了棍鳖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎医瘫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茫孔,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡缰贝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年剩晴,在試婚紗的時候發(fā)現(xiàn)自己被綠了赞弥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绽左。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拼窥,死狀恐怖,靈堂內的尸體忽然破棺而出总棵,到底是詐尸還是另有隱情改含,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布骤视,位于F島的核電站尚胞,受9級特大地震影響笼裳,放射性物質發(fā)生泄漏粱玲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卵沉。 院中可真熱鬧,春花似錦史汗、人聲如沸停撞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埋市。三九已至道宅,卻和暖如春套么,著一層夾襖步出監(jiān)牢的瞬間碳蛋,已是汗流浹背肃弟。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工笤受, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留箩兽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像秸脱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咐蝇,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • Java Jacoco Ant Maven 針對 Jacoco[http://www.eclemma.org/ja...
    納愛斯閱讀 53,498評論 64 52
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,192評論 2 126
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務的結構性框架旭寿。軟件項目的開發(fā)包括:需求许师、設...
    Mr希靈閱讀 21,957評論 7 278
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程僚匆、活動和任務的結構性框架。軟件項目的開發(fā)包括:需求逞盆、設...
    宇文臭臭閱讀 6,723評論 5 100
  • 小黑說我云芦,一拍腦袋,想法就來舅逸!喜歡這樣想做就做的模樣!
    卿瑩閱讀 168評論 0 1