ThreadingTest(穿線測試)引領白盒測試進入工業界

ThreadingTest(穿線測試)引領白盒測試進入工業界

測試一直都有黑,白之分。由於白盒測試一般情況下需要有比較高的技術要求及比一般開發人員還要高的項目經驗和縝密的邏輯思維能力,且測試時間較長,多用於單元測試,工具昂貴,所以一般國內的企業會忽略白盒測試,這也是爲什麼白盒測試誕生至今,在國內沒有正式推廣的原因。對於一個健康的測試團隊來講,必須要有一個或多個熟悉白盒測試的人員。讓我們先分析下,一般情況下,要實施覆蓋率測試,有幾種完全不同的策略。

1 黑盒測試(功能測試)

       黑盒測試是面向功能的測試,測試用例的依據是軟件的需求,測試的對象是運行起來的軟件。通常情況下,一個有經驗的測試工程師根據需求說明書編寫的測試用例在執行完成後,覆蓋率一般能達到70%左右,需要N個工作日。要達到覆蓋率的最終目標100%,還需要增加新的測試用例。有過覆蓋率測試經驗的朋友知道,剩下的30%可能需要 N* 3 工作日,甚至更多,同時爲了達到更高的覆蓋率,通常會產生大量重複的測試用例,大大增加的測試成本。下圖爲黑盒測試的覆蓋率及成本使用效果圖:

wKiom1XNkY-wy3MtAABoaEOkGqs140.jpg

2  白盒測試

       和黑盒測試正相反,白盒測試的測試用例的依據就是軟件代碼。測試工程師需要依據代碼的邏輯結構、基本路徑的分析,得到測試用例。因爲該方法直接面向代碼,寫出的測試用例非常有針對性,每執行一個用例,覆蓋率指標都能有新的提高,最終達到終極目標。聽起來很不錯,其實還有一個很大的問題,就是測試工程師需要分析所有代碼的邏輯結構、調用關係、數據流等,僅此一項,就需要花費鉅額的時間。另外傳統單元級白盒測試僅僅關注程序覆蓋方面,並不管程序單元組合和集成後的系統級功能。下圖爲白盒測試的覆蓋率及成本使用效果圖:

wKioL1XNk6Piq4wgAABp59bVYa8999.jpg

結合上述2種方法,ThreadingTest提出了全新的理念即穿線測試(TheadingTest),它採用了白盒和黑盒相結合的方法,以黑盒的測試方法,來得到白盒的測試數據。結合的優勢:

3  穿線測試

   既然上述講到黑盒和白盒各有優劣,所以不如採用二者相結合的方法。穿線測試實際上屬於創新型的系統級白盒測試工具,是軟件測試領域裏面全新的學術流派。它先通過傳統黑盒測試把基本的功能都測試一輪,覆蓋率達到70%,同時這個過程受到穿線測試工具的監控,並獲取該階段的測試結果數據;第二步,通過穿線測試得到的白盒結果,快速定位剩下30%的代碼,進行針對性地增加測試用例,最終達到終極目標。經過很多客戶的實踐經驗,這種方法對於覆蓋率測試是最有效的,且測試時間最短。

wKioL1XNk7DQrhjfAABugKZi9Ns308.jpg

說到這,很多測試人員肯定對穿線測試有濃厚的興趣了,那我們接下來用故事來說明傳統的白盒測試對測試人員的要求劃分,以及穿線測試在這方面的應對策略:

一個關於代碼覆蓋率故事

一大早,一個年輕的程序員問大師:“我準備寫一些單元測試用例。代碼覆蓋率應該達到多少爲好?”

大師回答道:“不要考慮代碼覆蓋率,只要寫出一些好的測試用例即可。”

年輕的程序員很高興,鞠躬,離去。

之後沒多久,第二個程序員問了大師同樣的問題。

大師指着一鍋燒沸的水說:“我應該往這個鍋裏放多少米?”

這個程序員看起來被難住了,回答道:“我怎麼會有答案?這取決於要給多少人吃,他們餓不餓,有什麼菜,你有多少米,等等。”

完全正確,” 大師說。

第二個程序員很高興,鞠躬,離去。

末了,來了第三個程序員問了大師同樣的關於代碼覆蓋率的問題。

百分之八十,不能少!” 大師一拳錘在桌子上,用嚴厲的口氣回答道。

第三個程序員很高興,鞠躬,離去。

一個關於代碼覆蓋率故事-解讀

回覆完這個之後,一個年輕的實習生走到大師身邊:

大師,今天我無意中聽到了你對同一個代碼覆蓋率問題給出了三個不同的答案。爲什麼?”

大師從椅子上站起來:“給我泡點新茶,我們聊聊這個。”

當杯子裏倒滿了冒着熱氣的綠茶後,大師開始說:

這第一個程序員是個新手,剛剛開始學測試。目前他有大量的程序都沒有測試用例。他有很長的路要走;現在對他要求代碼覆蓋率只會打擊他,沒有什麼用處。最好是讓他慢慢的學會寫一些測試用例,測試一下。他可以以後再考慮代碼覆蓋率。”

而這第二個程序員,不論對編程還是測試都是十分的有經驗。我以問作答,問她應該往鍋裏放多少米,使她明白決定測試用例多少的因素有很多,她比我更知道這些因素——畢竟是她自己的代碼。對這個問題沒有一個簡單的、直接的答案。以她的聰明完全能明白這個道理,正確的完成任務。”

我明白了,” 年輕的實習生說, “但是如果沒有一個簡單直接的答案,那你爲什麼告訴第三個程序員‘百分之八十,不能少’呢?”

大師笑的前仰後合,綠茶都噴了出來。

這第三個程序員只想得到一個簡單的答案——即使根本沒有簡單的答案 … 而且即使有答案她也不會按答案做。”

年輕的實習生和頭髮斑白的大師在沉思中喝完茶。

從上述故事我們可以發現:

第一個新手測試人員要進行覆蓋率測試時,需要培養很長一段時間。

第二個有經驗的測試人員在覆蓋率測試時,需要對編程和測試以及被測程序的整體都要十分熟悉。

第三個說明測試人員在進行覆蓋率測試時,覆蓋率指標是有明確要求的。

但在實際操作過程中,國內因白盒測試人員的稀缺,培養週期長、昂貴以及測試進度的要求等問題導致其發展緩慢。

針對白盒這種情況,穿線測試得提出全新的解決思路。

上文提到了穿線測試通過原有的黑盒測試方式,得到白盒結果,這樣使得測試難度以及測試人員的能力要求大大降低,並在這個基礎上,爲了使得白盒測試結果更加方便理解,穿線測試又相繼提出了可視化的代碼覆蓋率,以簡單的圖形顯示,讓廣大不懂代碼和程序內部結構的黑盒測試人員也能進行大師級別的代碼覆蓋率測試。

例:下圖看到的截圖爲以穿線測試爲理論,產品化的工具ThreadingTest中的截圖:

wKiom1XNkbaQ9muBAAEc7N0DdsE063.jpg

圖中覆蓋率SC0解釋說明:

【 段 】

在二個連續的分支點之間的計算機程序語句序列被叫作段。

【可視段】

在一個控制層之內最大可能的非-條件語句序列被稱爲可視段。在二節點之間可視段的長度可能是零(沒有可執行語句)。

SC0

基本段測試覆蓋度量也稱爲塊測試覆蓋。如果程序的所有可見段(程序塊)至少被執行一次,則該段程序的SC0覆蓋率達到了100%。

SC0= 被執行的塊個數/該段程序包含的塊個數(即可見段個數)

 

在圖中,我們清晰地看到該函數的覆蓋率SC0,是如何被計算出,且顯示出相關的代碼,通過這種方式展示,可以使廣大沒有接觸過代碼的測試人員,通過黑盒的測是方式,找出覆蓋率中代碼的沒有覆蓋到的部分,進行測試用例的補充,從而提升測試用例的製作,以及提高測試質量。

在ThreadingTest中,還有關於其它覆蓋率的劃分說明,如TRUE(真條件的百分比)、BOTH(條件真假的覆蓋率百分比)、Branch(分支覆蓋率)、MC/DC等。

請關注官方技術網站www.threadingtest.com中的覆蓋率分析,有詳細地解釋說明和計算。

測試覆蓋率作用

       測試覆蓋率是測試結束標準中的一部分

測試覆蓋率低的模塊 和 重要模塊的測試覆蓋率。這些數據可以幫助我們快速定位需要更多測試的模塊,可以幫助我們瞭解重要模塊的測試情況,以此來衡量我們測試用例的質量乃至測試的質量。

在螺旋式開發模式中,如果我們沒有控制好我們上一個迭代中的測試覆蓋率,當一個版本一個版本累加下來後,你就很難確定我們哪些模塊在開發過程中沒有給予足夠的測試。

通過覆蓋率,制定下階段有效的測試計劃

下圖爲測試覆蓋率的報告

wKiom1XNkb_BWiTIAAFo-Is_UnI547.jpg

通過上圖的覆蓋率展示,我們可以進行下一步測試的整體方向計劃。

檢查未使用的功能

檢查前10個的最低覆蓋率

測試用例的加強

穿線測試覆蓋率與驗證階段

驗證階段可以分爲單元驗證(UT)階段、集成驗證(IT)階段和系統驗證(ST)階段。

    單元驗證階段,關心的是模塊功能和模塊質量,此時出口條件爲代碼覆蓋率。一般業內常用的出口條件是:行覆蓋率達到100%,分支覆蓋率達到100%,條件覆蓋率達到95%,對沒有覆蓋率的需給出合理的說明。

    集成驗證階段,關心的系統的功能,以及模塊與模塊之間的接口,此時出口條件爲功能覆蓋率。一般業內常用的出口條件是:功能覆蓋率達到90%,對沒有覆蓋率的需給出合理的說明。

      功能覆蓋率高、代碼覆蓋率低:

         驗證計劃不充分,需要增加功能覆蓋點。

        代碼覆蓋率高、功能覆蓋率低:

         設計沒有實現指定的功能。

穿線應對測試覆蓋率,達到最佳實踐

傳統的白盒測試

路徑覆蓋率 > 條件覆蓋 > 判定覆蓋 > 語句覆蓋

測試覆蓋率100%是一個理想的情況,是很難達到的

測試覆蓋率100%不能說明我們做了完全的測試

測試覆蓋率達到多少要考慮到軟件整體的覆蓋率情況,以及項目成本,包括人力,時間等等。

因以上因素,所以傳統的白盒測試都不建議公司特意的去滿足覆蓋率測試指標,爲了測試而測試。

穿線測試對於傳統的白盒測試結果進行了測試數據統一管理,實現各階段累計,縮短反覆測試的時間,從而保證了測試100%覆蓋率高質量化。

從原有的測試來看,正常測試中單元測試階段、集成測試階段以及系統測試階段的測試數據是相互分開的,但是在實際過程中,單元測試的充分程度程度,對後期的集成測試、系統測試等都起到了關聯作用,在這部分中穿線測試使用了累計覆蓋率的技術,把整個測試的各個階段的測試結果進行沿用和累計,這樣使得整個測試迭代起到了量化關聯的作用,可以隨時對各階段的測試進行分析和改善。

相比於傳統的單元級的白盒測試,穿線測試還提出了分佈測試方法,對於中大型軟件或網站來說,單個測試人員是不能夠完成整個測試任務的,爲了更好的相互配合,ThreadingTest採用了分佈式測試設計,在測試過程中,測試人員可以在不同地點,同時對某個程序或網站的不同模塊進行測試,測試結果在不相互干擾的情況下彙總到中央服務器,這樣使得每天每個人的測試數據結果有了統一的管理,從而對整個測試進度進行了有效的量化管理。

 

穿線測試的出現對測試界的改革

商用測試工具產品ThreadingTest把穿線理念進行了實際的產品化,通過工具的方式,讓黑盒測試人員也能進行代碼級別的白盒測試,並對整個測試各階段的流程進行了量化的管理,通過黑盒測試來實現白盒結果的展示,完成了測試界中最有效的70%黑盒+30%白盒相結合的測試方法。

穿線測試打破了傳統白盒測試操作難度高,過於追求覆蓋率等方式,通過黑盒與白盒的結合,使各階段的測試人員,都能正確按照自己的需求進行測試,從而避免了盲目性、反覆性、遺漏性等問題。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章