軟件測試不再黑盒— Android測試工具threadingtest帶來第二代白盒覆蓋率技術

目前,大部分軟件企業對 Android 項目的測試都採用傳統的手工測試方法,而手工測試受到諸多方面因素的限制,不利於版本迭代時大規模的迴歸測試。穿線測試(ThreadingTest)對於測試界的一個重大創新在於,在白盒測試理論出現數十年以後,上海零一拼裝信息技術有限公司結合在測試理論方面十餘年的潛心研究,率先提出了第五代覆蓋率技術,這絕對不是一個口號,而是ZOA真正對於白盒測試的理解以及對於標準第三方測試服務的深度理解經過數年的基礎研究以及2年有餘的研發而推出的達到商用標準的技術。現在先讓我們溫習下經典的測試理論:

 

1、測試方法論

黑盒功能測試法

       黑盒功能測試法, 是把要測試的軟件看成一個 “黑盒子”, 不管其內部結構如何以及以什麼算法實現所要求提供的功能,而是按照需求的功能化要求, 設計相應的測試用例(包括測試的輸入數據與條件設置和所預期的軟件運行輸出結果), 通過軟件運行後所給出的輸出(包括字符形式的輸出與圖象輸出)與所預期的結果進行人工或者自動化比較, 來驗證被測試軟件是否能給出正確的結果, 從而判斷該軟件是否滿足需求, 是否與該軟件系統的規格說明書和用戶手冊相關部分一致。

這一方法的優點爲:

(A)  能最直觀和直接地反映出所設計的軟件是否滿足需求;

(B)  即使沒有任何測試工具支援, 也能靠人工測試的方法完成;

 

其不足之處是:

(A)  這種測試方法難以找出某些特殊類型的錯誤。例如: 當對應於某組輸入該被測軟件並不提供任何輸出信息時 – 可能只是改變了某種工作狀態,如果其中的源代碼處理部分有錯誤, 就比較難找出來;

(B)  無法確定哪些測試用例有效或者無效 (所謂無效, 並不是說單獨使用某個測試用例時不能收到任何測試效果, 而是在於它和前面已經使用過的測試用例一起使用時, 毫無貢獻, 只是重複了前面的測試用例已經完成的測試);

(C)  具有無可避免的盲目性: 當軟件被修改後, 由於不知道哪些測試用例能測試到被直接修改過的模塊或者受修改過的模塊影響的模塊, 於是只好將所有測試用例再從頭運行一遍, 而且是動態運行,非常費時費力。

 

白盒結構測試法

       白盒結構測試法則與黑盒子功能測試方法相反: 它不管所被測試的軟件是否滿足需求,是否實現了所設計的功能, 而只注重該軟件內部的結構, 以便設計足夠多的測試用例, 使得百分百或者儘可能多的程序組成要素能被測試到最少一次, 從而儘可能地將其中的軟件錯誤暴露出來。

白盒子結構測試方法的優點:

(A)  能夠找出許多用功能測試方法找不出來的軟件錯誤;

(B)  可以在整個軟件系統還未完成之前就分別對各個單元進行測試;

(C)  可以通過測試用例的有效性分析而實現測試用例的最小化, 以便大大地縮短軟件修改後的回覆測試時間和費用;

(D)  可以同時進行內存泄漏分析;

(E)   可以同時進行分支執行頻度分析;

(F)   可以同時進行軟件複雜度分析;

(G)  可以同時進行數據和變量分析;

(H)  可以同時進行性能分析;

(I)    可以同時進行動態運行錯誤定位與執行路徑追溯等。

 

白盒子結構測試方法的缺點:

(1)    必須通過專門的測試工具來進行, 需要在用戶的軟件的拷貝上進行插樁(插入紀錄點)記錄各分支/條件是否被執行過或者執行過多少次的信息;

(2)    會使被測試的軟件的運行速度減慢;

(3)    需要增加被測試軟件運行時的資源開銷等。

 

關於軟件質量的誤區

       有不少軟件開發組織和應用軟件開發部門的管理者錯誤地認爲,他們已經對他們所開發的軟件做了充分的功能測試(又稱"黑盒測試")了,認爲"我們的軟件質量沒問題!" ——但是, 專家們分析了大量"經過充分的功能測試"的軟件後發現,這些軟件中還有大約一半的程序分支從未被執行過!

       爲什麼會這樣?原來,軟件的功能描述相對來說非常容易、非常簡單、也非常粗糙,無法詳細到用軟件內部的具體實現邏輯結構來說明;而要達到同樣的功能,軟件可以有許許多多等效的實現方法;特別是,軟件功能的實現,與所使用的編寫程序的語言、所運行的操作系統環境、所用到的數據庫以及某些第三方的軟件都有關係。事實上,一個軟件中的許許多多程序分支跟該軟件本身的功能並沒有直接的聯繫,而是用來處理各種可能出現的運行情況的。例如,所開發的軟件在運行中突然被終止時(系統斷電或者用戶打斷)如何保護已經打開的文檔;在系統資源用盡之前如何提出警告;在所要用到的某些文件被意外地刪除了時如何應付等等。這些程序分支在編寫中同樣存在着可能的錯誤,必須加於測試。而這通常都需要通過程序的結構測試(又稱"白盒測試")來完成,而白盒結構測試是必須藉助於軟件測試工具才能進行的。

 

       ThreadingTest針對上訴的質量誤區情況在測試過程中對於一組輸入,既判斷其輸出(如果有)是否與預期值一致,又判斷其執行路徑是否與預期值一致。這樣一來,即使測試輸出結果與預期值一致,也可能有錯誤被找出來 - 如果所預期的執行路徑與實際的執行路徑不一致。例如,當測試一個計算器程序時,如果輸入是2+2, 測到的結果是4,也可能是個錯誤 - 如果它的執行路徑與預期值不一致:其最終的結果可能是2×2的路徑的輸出結果。由於TT可以測試有輸入而無輸出的場合(此時僅僅測試其執行路徑是否與所期待的路徑一致),因而可以在任何開發階段使用,實現名副其實的全過程測試驅動。

 

2、第五代白盒覆蓋率技術

白盒覆蓋率技術是軟件測試的基本技術手段之一,但是數十年以來雖然也出現過多種理論方法以及商用產品,但其一直未在測試界主流應用領域推廣。

下面簡要列出這幾代白盒測試的差異


未在測試界主流應用領域推廣,主要原因有以下幾點點:

(1)        通常覆蓋率結果在重新發布版本以後必須重新進行累計,對於龐大的程序相當於對歷史的測試全部歸零。

(2)        軟件測試的通常場景,是需要用測試工具對代碼進行分析,而軟件測試工具,尤其是可以達到商用標準的白盒測試工具一直被國外的幾大老牌軟件測試工具所壟斷,價格高昂,並且對於航天、軍事級別的測試需求來說信息安全可靠度差。

(3)        白盒測試操作難度大,測試人員很難理解,在測試團隊中很難推廣。

(4)        白盒測試工具都是單機版,很難再大型測試團隊中推廣使用。

(5)        覆蓋率和測試用例無任何關係,通常覆蓋率是執行一系列動作的混合結果,而通常測試人員以及開發人員在定位問題的時候需要明確知道某個功能對應的代碼覆蓋率。而這些傳統的白盒測試工具都無法支持。

(6)        隨着移動應用在消費級、企業級的市場所佔比重越來越大,一些老牌的測試工具針對移動環境(android、iOS)的測試明顯支持乏力甚至不提供支持。

 

       上述原因讓前面幾代的覆蓋率技術很難真正的得到推廣。ThreadingTest針對前面幾代的覆蓋率技術的缺陷提出了全新的第五代覆蓋率技術,並在覆蓋率方法的基礎上,設計了全新的應用功能:

(1)        無需監管測試場景:覆蓋率的統計完全可以由後臺程序運行收集,對測試人員實現透明化,測試人員只需要運行插樁後的程序,開啓程序的自動收集功能,即可無需監管的進行常規測試,TT會自動將程序的測試執行情況收集、分析、存入數據庫,配合TT就可以輕鬆的查看程序的實時覆蓋率。





圖 實時監控界面自動收集被測程序執行情況並統計

(2)            雙向追溯是TT實現覆蓋率到達100%的重要工具,通過雙向追溯功能測試人員運行完所有用例可以發現所有未測試分支,並且和開發確認如何才能覆蓋,並增補用例。直到達到關鍵模塊的100%覆蓋的測試。對於較難覆蓋程序邏輯,開發以及測試人員可以作爲重點進行代碼走查及聯合用例設計。圍繞覆蓋率結果,開發和測試人員可以充分的互動,而在穿線測試工具出現之前,由於沒有覆蓋率這個共享數據,開發和測試人員之間很難充分的互動和協作,因爲開發人員並不清楚測試用例具體對應的程序執行邏輯,而測試人員也不清楚如何完成充分的測試。

   TT的引入,幾乎對原有常規黑盒測試流程不干擾的情況下,以優雅的形式完成白盒測試,是一款智能的“灰盒”測試工具。TT以其獨特的技術特性,協同開發和測試人員進行高效的溝通互動,讓開發和測試融爲一體,通過2+1(測試、開發+TT)的模式讓灰盒測試成爲“平民”化的測試方法。

TT工具灰盒測試的典型工作流程如下:

測試人員建立一個測試工程,由開發人員(對代碼保密要求不高的話也可以由測試人員操作)將源代碼通過TT編譯成爲插樁後的應用。

測試人員使用上述由開發人員編譯後的應用進行測試用例編寫,並對應用進行黑盒測試方式的操作,操作過程通過TT提供的示波器進行測試路徑、覆蓋率等信息的記錄。

在測試過程中出現問題時,測試用人隨時停止記錄,在圖2界面的示波器下部的控制檯區域(Console),實時記錄了測試用例最近運行的50個函數,開發人員根據測試路徑,可以輕鬆直觀的定位問題代碼的範圍。

測試過程中,開發人員和測試人員通過TT的雙向追溯(測試用例到源碼的追溯、源碼到測試用例的追溯)提供的測試信息共享平臺,可以共同制定和優化測試用例,比如增加一些目標功能以外的測試用例,使得應用程序的關鍵模塊測試覆蓋率達到100%,在黑盒測試的同時幾乎可以零成本實現白盒測試。

 



(圖)正向追溯界面


(圖)反向追溯界面



(3)       支持基於Java語言開發的android移動應用測試。


圖手機上進行操作,與之相連的電腦上TT實時收集測試信息

(4)        累計覆蓋率技術:如果存在多個被測程序版本的覆蓋率結果,TT可以實現對多個版本的覆蓋率進行合併,並且在一個視圖中展示


圖 主界面CallGraph圖中選擇多個版本的累積覆蓋率展示

 

(5)        支持在程序結構圖、控制流程圖等多種圖形上顯示覆蓋率,測試以及開發人員可以從多個視角清晰的看到程序的覆蓋率情況,可以查看整體的覆蓋率,也可以查看單獨某一個函數的覆蓋率,甚至可以查看某一個分支的覆蓋執行情況。


圖 覆蓋率展示


圖 覆蓋率展示


圖 覆蓋率展示

圖 覆蓋率展示


 

(6)        支持分佈式測試,多個測試人員測試產生的覆蓋率,可以在統一視圖中顯示。

(7)        實現美軍標DO-178B MC/DC白盒結構測試技術,實現100%覆蓋率,可視化複雜條件組合,使產品質量大幅提升。

       通過第二代覆蓋率技術,整個測試可以在充分量化的環境下運行,整個開發以及測試團隊可以實時看到每個用例的覆蓋率對整體測試的貢獻程度。根據覆蓋率的生長等指標對整個測試進程進行動態調整,同時可以引導對於累計覆蓋率偏低的關鍵模塊補充用例。我們希望,國產專業級白盒測試工具TT,能夠真正的將白盒測試技術做系統的升級,並且爲測試人員所掌握和喜好,並進而將中國的軟件測試提升到一個新的境界。

 

對移動端白盒測試技術或者性能測試感興趣,請加入羣符號執行  339834199

軟件試用申請官網:www.threadingtest.com







 

 

發佈了41 篇原創文章 · 獲贊 3 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章