軟件測試技術(shù)課程(四)白盒測試

白盒測試

白盒測試(White Box Testing)又稱結(jié)構(gòu)測試、透明盒測試衙荐、邏輯驅(qū)動測試或基于代碼的測試信不。白盒測試只測試軟件產(chǎn)品的內(nèi)部結(jié)構(gòu)和處理過程蛉腌,而不測試軟件產(chǎn)品的功能偿荷,用于糾正軟件系統(tǒng)在描述檐春、表示和規(guī)格上的錯誤顽聂,是進一步測試的前提肥惭。

白盒測試遵循的四大原則:

  1. 保證一個模塊中所有路徑至少被測試一次;
  2. 所有邏輯值都要測試真(true)和假(false)兩種情況
  3. 檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)是否有效紊搪;
  4. 檢查上蜜葱、下邊界及可操作范圍內(nèi)運行所有循環(huán)

靜態(tài)白盒測試

白盒測試分靜態(tài)和動態(tài)兩種,靜態(tài)測試是指不運行程序,通過人工對程序和文檔進行分析與檢查耀石。下面是靜態(tài)白盒測試檢查的故障模式牵囤。

  1. 內(nèi)存泄漏的故障(Memory Leak Fault, MLF)
  2. 數(shù)組越界故障的故障(Out of Bounds Array Access Fault OBAF)
  3. 使用未初始化變量故障(Uninitialized Variable Fault滞伟,UVF)
  4. 空指針使用故障(NULL Pointer Dereference Fault NPDF)
  5. 非法計算類故障(Illegal Computing Fault ILCF)
  6. 死循環(huán)結(jié)構(gòu)(Dead Loop Fault DLF)
  7. 資源泄漏(RLF)
  8. 并發(fā)故障 (Concurrency Fault)
  9. 安全漏洞故障
  10. 疑問代碼故障

簡單來說揭鳞,靜態(tài)白盒測試就是看代碼找bug

動態(tài)白盒測試

白盒測試分靜態(tài)和動態(tài)兩種,動態(tài)測試是指通過運行被測程序梆奈,檢查運行結(jié)果與預(yù)期結(jié)果的差異野崇,并分析運行效率和健壯性等性能。

動態(tài)白盒測試流程:

  1. 選取定義域有效值亩钟,或定義域外無效值乓梨;(等價類劃分思想)
  2. 已選取值決定預(yù)期的結(jié)果钥弯;
  3. 用選取值執(zhí)行程序;
  4. 執(zhí)行結(jié)果與對已選取值決定預(yù)期的結(jié)果對比督禽,不吻合程序有錯

邏輯覆蓋測試

為了滿足白盒測試的四大原則脆霎,需要使用邏輯覆蓋測試法來設(shè)計測試用例。邏輯覆蓋測試是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)設(shè)計測試用例的方法狈惫,首先需要就行代碼的結(jié)構(gòu)分析睛蛛,繪制流程圖。

代碼如圖所示:

image.png

對應(yīng)結(jié)構(gòu)圖如下:

image.png

注意:圓圈中的數(shù)字代表代碼的行數(shù)

之后進行邏輯覆蓋胧谈,由于覆蓋測試的目標不同忆肾,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋菱肖、條件覆蓋客冈、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋稳强。

覆蓋方法 介紹
語句覆蓋 選擇足夠多的測試用例场仲,使得程序中的每個可執(zhí)行語句至少執(zhí)行一次
判定覆蓋 通過執(zhí)行足夠的測試用例退疫,使得程序中的每個判定至少都獲得一次“真”值和“假”值渠缕, 也就是使程序中的每個取“真”分支和取“假”分支至少均經(jīng)歷一次,也稱為“分支覆蓋”褒繁。
條件覆蓋 設(shè)計足夠多的測試用例亦鳞,使得程序中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次
判定/條件覆蓋 設(shè)計足夠多的測試用例棒坏,使得程序中每個判定包含的每個條件的所有情況(真/假)至少出現(xiàn)一次燕差,并且每個判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次。滿足判定/條件覆蓋的測試用例一定同時滿足判定覆蓋和條件覆蓋
條件組合覆蓋 通過執(zhí)行足夠的測試用例坝冕,使得程序中每個判定的所有可能的條件取值組合都至少出現(xiàn)一次徒探。滿足組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋
路徑覆蓋 設(shè)計足夠多的測試用例徽诲,要求覆蓋程序中所有可能的路徑

從表中的介紹可知刹帕,從上到下,該方法覆蓋的路徑越多谎替。其他方法覆蓋的路徑不全面,那為什么不直接使用路徑覆蓋蹋辅?這是由于如果程序中出現(xiàn)了多個判斷和多個循環(huán)钱贯,可能的路徑數(shù)目將會急劇增長,以至實現(xiàn)路徑覆蓋不可能侦另。

為了解決上面的問題秩命,出現(xiàn)了基本路徑覆蓋尉共,它在程序控制流圖的基礎(chǔ)上,通過分析程序控制流圖的環(huán)路復(fù)雜性弃锐,導(dǎo)出基本可執(zhí)行路徑(獨立路徑)的集合袄友,然后據(jù)此設(shè)計測試用例。

各個覆蓋方法的優(yōu)缺點:

image.png
在實際測試中霹菊,即使對于路徑數(shù)很有限的程序已經(jīng)做到路徑覆蓋剧蚣,仍然不能保證被測試程序的正確性,還需要采用其他測試方法進行補充旋廷。

數(shù)據(jù)流測試

數(shù)據(jù)流測試分析常常集中于定義/引用異常的缺陷鸠按,用于如下三方面測試。

  1. 變量被定義饶碘,但是從來沒有使用(引用)
  2. 所使用的變量沒有被定義
  3. 變量在使用之前被定義兩次

早期的數(shù)據(jù)流測試主要用于檢測程序編寫時出現(xiàn)的一些警告信息目尖,如“所定義的變量未被使用等”問題,這些問題光靠簡單的語法分析器或者是語義分析器是無法檢測出來的扎运。

程序插樁

在程序的特定部位插入記錄動態(tài)特性的語句瑟曲,最終是為了把程序執(zhí)行過程中發(fā)生的一些重要的歷史事件記錄下來。例如豪治,記錄在程序執(zhí)行過程中某些變量值的變化情況测蹲,變化的范圍等。這些插入的語句常常被稱為“探測器”或者“探測點”鬼吵。

總結(jié)

  • 白盒測試方法基于被測程序的源代碼開發(fā)測試用例扣甲。常見的白盒測試方法有邏輯覆蓋、數(shù)據(jù)流測試齿椅、路徑分析以及程序插裝等琉挖。
  • 邏輯覆蓋以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)設(shè)計測試用例,要求對被測程序的結(jié)構(gòu)作到一定程度的覆蓋涣脚,如語句覆蓋示辈、判定覆蓋、條件覆蓋遣蚀、判定/條件覆蓋矾麻、條件組合覆蓋及路徑覆蓋。路徑覆蓋是最強的邏輯覆蓋準則芭梯,實際上我們只能有選擇地測試程序中某些有代表的性路徑险耀。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玖喘,隨后出現(xiàn)的幾起案子甩牺,更是在濱河造成了極大的恐慌,老刑警劉巖累奈,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬派,死亡現(xiàn)場離奇詭異急但,居然都是意外死亡,警方通過查閱死者的電腦和手機搞乏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門波桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人请敦,你說我怎么就攤上這事镐躲。” “怎么了冬三?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵匀油,是天一觀的道長。 經(jīng)常有香客問我勾笆,道長敌蚜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任窝爪,我火速辦了婚禮弛车,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒲每。我一直安慰自己纷跛,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布邀杏。 她就那樣靜靜地躺著贫奠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪望蜡。 梳的紋絲不亂的頭發(fā)上唤崭,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音脖律,去河邊找鬼谢肾。 笑死,一個胖子當著我的面吹牛小泉,可吹牛的內(nèi)容都是我干的芦疏。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼微姊,長吁一口氣:“原來是場噩夢啊……” “哼酸茴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柒桑,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤弊决,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后魁淳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飘诗,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年界逛,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆稿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡息拜,死狀恐怖溉潭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情少欺,我是刑警寧澤喳瓣,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站赞别,受9級特大地震影響畏陕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仿滔,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一惠毁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崎页,春花似錦鞠绰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牺荠,卻和暖如春翁巍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背志电。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工曙咽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挑辆。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓例朱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鱼蝉。 傳聞我的和親對象是個殘疾皇子洒嗤,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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