ZOA公司研發(fā)的ThreadingTest智能型測(cè)試工具系列一期,是基于程序源代碼的白盒測(cè)試工具。采取前端分析器和后端結(jié)果分析分離的技術(shù)路線,實(shí)現(xiàn)對(duì)多種語(yǔ)言的編譯器級(jí)分析和多維度測(cè)試。
在沛縣等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作專(zhuān)業(yè)公司,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷(xiāo)型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,沛縣網(wǎng)站建設(shè)費(fèi)用合理。ThreadingTest的核心思想來(lái)源于非線性復(fù)雜軟件工程體系。通過(guò)ThreadingTest基于測(cè)試用例集與動(dòng)態(tài)代碼覆蓋的雙向追溯的專(zhuān)利技術(shù),使得對(duì)于大型應(yīng)用系統(tǒng)的維護(hù)和修改變得不再盲目和極易出錯(cuò),使得對(duì)大型軟件的系統(tǒng)測(cè)試期和維護(hù)期的測(cè)試過(guò)程從無(wú)量化依據(jù)到有明確的量化依據(jù)的過(guò)程進(jìn)行轉(zhuǎn)變。
ThreadingTest通過(guò)一系列自動(dòng)、高效、可視化技術(shù),使軟件維護(hù)與開(kāi)發(fā)效率加倍、成本減半、系統(tǒng)軟件質(zhì)量提高幾個(gè)數(shù)量級(jí)。
1) 基于雙向追溯機(jī)制的高效智能化回歸測(cè)試技術(shù)。
2) 實(shí)現(xiàn)美軍標(biāo)DO-178BMC/DC白盒結(jié)構(gòu)測(cè)試技術(shù)。
3) 高速顯示的可交互性的程序可視化組件。
4) 測(cè)試用例半自動(dòng)生成、動(dòng)態(tài)錯(cuò)誤分類(lèi)、定位和執(zhí)行路徑可視化技術(shù)。
5) 智能化版本對(duì)比分析技術(shù)。
雙向追溯是指通過(guò)運(yùn)行測(cè)試用例,實(shí)現(xiàn)測(cè)試用例與被測(cè)源碼間相互追溯。根據(jù)測(cè)試用例查看相關(guān)被測(cè)源碼為正向追溯,根據(jù)被測(cè)源碼查看相關(guān)測(cè)試用例為逆向追溯。在測(cè)試用例列表中選擇測(cè)試用例,可以追溯到該測(cè)試用例的內(nèi)容描述信息,在模塊調(diào)用圖中顯示被測(cè)試到的函數(shù);也可以在模塊調(diào)用圖中,點(diǎn)擊相關(guān)的函數(shù),也可以追溯到相關(guān)的測(cè)試用例。該追溯技術(shù)方便了用戶(hù)查看和設(shè)計(jì)測(cè)試用例。
1).正向追溯
正向追溯過(guò)程:在測(cè)試用例列表中,單擊選擇一個(gè)測(cè)試用例后,在雙向追溯的CallGraph和ControlFlow圖上,被該測(cè)試用例追溯到(測(cè)試過(guò))的函數(shù)會(huì)顯示到CallGraph圖上,同時(shí)在TestCase Trace窗口列出這些被執(zhí)行過(guò)的函數(shù),點(diǎn)擊CallGraph圖中的函數(shù),會(huì)將該函數(shù)的控制流程圖顯示到ControlFlow圖上,同時(shí)ControlFlow還可以通過(guò)顏色對(duì)每個(gè)程序塊進(jìn)行覆蓋標(biāo)識(shí),如果塊內(nèi)空白區(qū)域被標(biāo)示為淺藍(lán)色,則說(shuō)明該塊被覆蓋(每一條分支都被執(zhí)行)。
2).逆向追溯:在函數(shù)列表的上選擇某個(gè)函數(shù),在CallGraph、ControlFlow以及Code視圖都顯示該函數(shù)的函數(shù)調(diào)用圖、控制流程圖以及源碼,反向追溯到內(nèi)容為執(zhí)行過(guò)該函數(shù)的測(cè)試用例列表 。在Method Trace視圖部分會(huì)顯示追溯到的測(cè)試用例的詳細(xì)信息。選擇Code視圖部分的部分源碼,在CodeTrace視圖部分會(huì)顯示這段源碼反向追溯到測(cè)試用例的信息。
ThreadingTest擁有多種測(cè)試覆蓋率分析結(jié)果報(bào)告。其中SC0,SC1,SC1+都是段覆蓋(SegmentCoverage)的幾種標(biāo)準(zhǔn),段覆蓋又稱(chēng)塊測(cè)試覆蓋,用來(lái)考量被測(cè)代碼中每個(gè)可執(zhí)行語(yǔ)句塊覆蓋的比例。SC0只管覆蓋代碼中的執(zhí)行語(yǔ)句塊,卻不考慮各種語(yǔ)句結(jié)構(gòu)的分支覆蓋情況等,因此往往被看做比較弱的覆蓋,但卻是很必要的一種覆蓋量度,因此在SC0的基礎(chǔ)上我們衍生出來(lái)了SC1以及SC1+覆蓋率量度。TT除了提供了三種關(guān)于段的相關(guān)覆蓋率,也提供了各種語(yǔ)句結(jié)構(gòu)的條件以及判定的各種級(jí)別的覆蓋率數(shù)據(jù):
1) 條件為真(TRUE)百分比
2) 條件為假(FALSE)百分比
3) 條件真假(BOTH)都覆蓋百分比
4) 分支覆蓋(Branch覆蓋)
5) C/DC條件/判定覆蓋(百分比)
6) MC/DC覆蓋
基于以上的功能點(diǎn),我們以一個(gè)實(shí)例來(lái)說(shuō)明TT的分析過(guò)程和雙向追溯的使用。
TT測(cè)試工具區(qū)別的于傳統(tǒng)測(cè)試工具,TT在測(cè)試人員那不需要關(guān)注具體代碼實(shí)現(xiàn)的基礎(chǔ)上達(dá)到對(duì)代碼的大覆蓋,以及可能出現(xiàn)的非功能bug的較早的預(yù)先定位。下面結(jié)合開(kāi)源代碼Pedometer來(lái)說(shuō)明基于TT軟件的測(cè)試分析。
Pedometer程序涉及到安卓開(kāi)發(fā)中的加速器交互、語(yǔ)音更新、后臺(tái)運(yùn)行服務(wù)等,針對(duì)本程序功能模塊可以分為設(shè)置類(lèi)操作以影響程序的運(yùn)行情況,現(xiàn)將測(cè)試用例按照Pedometer的設(shè)置項(xiàng)來(lái)創(chuàng)建測(cè)試用例:
1、加速器交互設(shè)置類(lèi)測(cè)試用例
2、語(yǔ)音設(shè)置類(lèi)測(cè)試用例
3、Pedometer記步參數(shù)設(shè)置測(cè)試用例
基于以上分析出Pedometer的功能點(diǎn),根據(jù)設(shè)置的參數(shù),在傳統(tǒng)測(cè)試人員手中只能通過(guò)功能點(diǎn)來(lái)列出預(yù)期輸入和預(yù)期輸出值,比如:存在以下一組測(cè)試用例:
測(cè)試用例描述 | 輸入 | 輸出 |
Pedometer記步程序語(yǔ)音后臺(tái)服務(wù)關(guān)閉 | 點(diǎn)擊設(shè)置按鈕à在voice設(shè)置項(xiàng)里面點(diǎn)擊關(guān)閉speak播報(bào)項(xiàng) | 在使用Pedometer的時(shí)候不會(huì)出現(xiàn)語(yǔ)音播報(bào) |
以上是在傳統(tǒng)測(cè)試的時(shí)候根據(jù)軟件的使用和功能點(diǎn)在一定輸入條件下,由開(kāi)發(fā)或者設(shè)計(jì)者預(yù)期輸出的結(jié)果來(lái)判斷功能點(diǎn)是不是可以使用。在得出具體結(jié)論后此項(xiàng)測(cè)試用例即算通過(guò)。然而對(duì)于后臺(tái)執(zhí)行的代碼邏輯是不是滿(mǎn)足設(shè)計(jì)要求以及容錯(cuò)能力是否達(dá)到公司要求,這一切都沒(méi)有在測(cè)試人員的報(bào)告中體現(xiàn),所以在傳統(tǒng)的測(cè)試方法中還是存在著一定的隱患,導(dǎo)致一些bug交給了用戶(hù)去發(fā)現(xiàn),由此帶來(lái)了一系列軟件交付的問(wèn)題。
根據(jù)以上分析出在傳統(tǒng)測(cè)試方法的弊端,在基礎(chǔ)上基于TT軟件的測(cè)試基礎(chǔ)上可以達(dá)到對(duì)代碼級(jí)別的質(zhì)量監(jiān)控。TT在使用的過(guò)程大致分為4個(gè)步驟:
1、首先根據(jù)項(xiàng)目代碼盡量劃分出界限明顯模塊,分別創(chuàng)建測(cè)試用例,針對(duì)當(dāng)前測(cè)試用例進(jìn)行測(cè)試,大化的模擬用戶(hù)操作或×××面程序的控制臺(tái)輸入條件來(lái)覆蓋軟件各個(gè)功能點(diǎn)。
2、基于TT軟件DTC監(jiān)控,針對(duì)劃分的測(cè)試用例來(lái)監(jiān)控代碼運(yùn)行以及覆蓋情況,分析出關(guān)鍵代碼邏輯覆蓋率為0或者較低的項(xiàng),此處易出現(xiàn)邏輯未覆蓋導(dǎo)致不可知問(wèn)題。
3、結(jié)合TT監(jiān)控得出的覆蓋率信息,補(bǔ)全測(cè)試用例使覆蓋到違背覆蓋的代碼邏輯,此項(xiàng)可以設(shè)計(jì)根據(jù)先前規(guī)劃的測(cè)試用例得出當(dāng)前所需的輸入條件,以便快速實(shí)現(xiàn)大化覆蓋。
4、如果代碼的健壯性足夠好,在補(bǔ)全測(cè)試用例之后,此時(shí)一般不會(huì)出現(xiàn)異?;蛘哕浖顺鰡?wèn)題,但功能點(diǎn)容易不滿(mǎn)足要求。如果代碼健壯性不好對(duì)異常數(shù)據(jù)保護(hù)不夠,在補(bǔ)全測(cè)試用例之后根據(jù)分析得出輸入條件,此時(shí)在運(yùn)行程序的時(shí)候很容易出現(xiàn)異常退出等致命問(wèn)題。
所以結(jié)合以上分析,下面以Pedometer為實(shí)例來(lái)說(shuō)明TT使用和分析。
第一步,根據(jù)功能點(diǎn)來(lái)劃分了一系列測(cè)試用例,這些測(cè)試用例,測(cè)試用例描述:
1、 Pedometer 手機(jī)硬件設(shè)置相關(guān)用例:該測(cè)試用例包括手機(jī)加速器以及靈敏度設(shè)置項(xiàng)、手機(jī)屏幕超時(shí)設(shè)置項(xiàng)。該用例主要影響Pedometer在屏幕待機(jī)與否的情況下加速器靈敏度相關(guān)邏輯的設(shè)置。
2、 Pedometer 語(yǔ)音設(shè)置項(xiàng)相關(guān)用例:該測(cè)試用例包括Pedometer語(yǔ)音相關(guān)設(shè)置,在使用Pedometer中是否播報(bào)以及播報(bào)信息種類(lèi)和間隔時(shí)間
3、 Pedometer使用者信息設(shè)置相關(guān)用例:該用例包括使用者信息的設(shè)置
第二步,在創(chuàng)建以上三個(gè)測(cè)試用例之后,分別根據(jù)每個(gè)測(cè)試用例的關(guān)注點(diǎn)來(lái)進(jìn)行實(shí)際的操作,在測(cè)試的過(guò)程中需要大化的覆蓋到每個(gè)用例的可輸入條件,這樣可以減少用例的重復(fù),加快分析和測(cè)試效率。分別選中各個(gè)測(cè)試用例啟動(dòng)TT 軟件中的DTC監(jiān)控進(jìn)行實(shí)際軟件使用。
第三部,在上述三個(gè)預(yù)期測(cè)試用例執(zhí)行完成之后,用例覆蓋情況如圖-1所示,在TT軟件的listview中查看被測(cè)試程序的執(zhí)行和覆蓋情況,
圖-1
1、重點(diǎn)找出不含有判斷邏輯的函數(shù)(在TT listview視圖中無(wú)邏輯函數(shù)覆蓋率True或者false 為“--”標(biāo)示如圖-2所示)且其sc0(基本段覆蓋率)為0或者低于100%的函數(shù),這種函數(shù)不含邏輯語(yǔ)句,如果其函數(shù)已被執(zhí)行且其sc0為0極有可能是中間有return等跳轉(zhuǎn)語(yǔ)句,此處需要注意是否是代碼處理邏輯有問(wèn)題。以同樣的方法可以查看sc1和sc+為0或者低于100%的函數(shù)。
圖-2
2、重點(diǎn)找出含有判斷邏輯的函數(shù),TRUE或者FALSE覆蓋未達(dá)到100%,如果達(dá)到,這種情況則說(shuō)明代碼有未執(zhí)行分支情況需要切換輸入條件來(lái)補(bǔ)全。
第三步,補(bǔ)全測(cè)試用例,這里我們根據(jù)程序退出時(shí)候一般對(duì)資源釋放順序或者資源清理不徹底易出現(xiàn)問(wèn)題這個(gè)點(diǎn)先查找函數(shù)退出時(shí)的調(diào)用的幾個(gè)函數(shù)這里以Pedometer中的退出操作涉及到的函數(shù)有:
private voidresetValues(boolean updateDisplay)
在listview中查找該函數(shù)的覆蓋信息如圖-3所示:
圖-3
這里該函數(shù)的false覆蓋率數(shù)值只有33%,可以斷定其判定條件為加的分支有未執(zhí)行到的。切換至該函數(shù)控制流程圖中查看條件真假執(zhí)行情況如圖-4
圖-4
第四步,根據(jù)補(bǔ)全測(cè)試用例找出bug點(diǎn),這一步在初始規(guī)劃測(cè)試用例覆蓋的足夠全面,一般可以認(rèn)為是結(jié)束點(diǎn)。對(duì)于復(fù)雜的工程上述幾步可以作為一次迭代,重復(fù)測(cè)試來(lái)達(dá)到大化的覆蓋。進(jìn)過(guò)查看代碼發(fā)現(xiàn),在執(zhí)行退出操作的時(shí)候變量mIsRunning 在暫停操作中被置為false所以可以設(shè)定一個(gè)測(cè)試場(chǎng)景,在暫停的時(shí)候退出程序,以達(dá)到if(mService != null && mIsRunning)為假的情況,所以補(bǔ)全測(cè)試用例,新增加在暫停的退出測(cè)試用例:退出功能用例之后運(yùn)行監(jiān)控得到統(tǒng)計(jì)數(shù)據(jù)如圖-5
圖-5
查看該函數(shù)的控制流程圖條件執(zhí)行情況如圖-6
圖-6
在增加了改組測(cè)試用例的場(chǎng)景后,很不幸該程序出現(xiàn)了異常退出問(wèn)題,進(jìn)過(guò)查看源代碼發(fā)現(xiàn),在暫停功能和退出中釋放了同一個(gè)資源導(dǎo)致異常退出如圖-7所示
圖-7
上面事例對(duì)于被測(cè)試軟件的靜態(tài)分析,可以找出開(kāi)發(fā)者的一些隱蔽的bug和邏輯錯(cuò)誤,當(dāng)然軟件的開(kāi)發(fā)是一次次的迭代過(guò)程,在軟件開(kāi)發(fā)的過(guò)程中一些考慮不周全的模塊難免需要重新設(shè)計(jì)和修改,那么這些模塊的修改會(huì)對(duì)依賴(lài)該模塊的部分產(chǎn)生影響,那有什么辦法可以查看這些模塊間的線性關(guān)系,TT中的雙向追溯、版本對(duì)比、以及函數(shù)調(diào)用圖就可以解決這樣的問(wèn)題。
1、 分析Pedometer中的帶得知在程序暫停的時(shí)候語(yǔ)音信息提示功能是不可使用的,現(xiàn)在加入提出要求在Pedometer暫停的時(shí)候播放當(dāng)前的里程數(shù),針對(duì)這一修改我們通過(guò)TT查看關(guān)聯(lián)的模塊影響。
2、 為了達(dá)到預(yù)設(shè)場(chǎng)景的功能實(shí)現(xiàn)需要修改Pedometer源代碼中暫停功能的代碼如圖-8:
圖-8
在這里我們?cè)跁和5臅r(shí)候不停止后臺(tái)服務(wù),而是通過(guò)mPause這個(gè)布爾值標(biāo)示來(lái)區(qū)別當(dāng)前是否處于暫停狀態(tài),同時(shí)修改重置響應(yīng)函數(shù)邏輯為true狀態(tài)。以便在使用者運(yùn)動(dòng)過(guò)程中控制是否接收數(shù)據(jù)。這部分消息通知代碼邏輯我們修改如圖-9:
圖-9
3、 為了滿(mǎn)足設(shè)定場(chǎng)景我們代碼修改到想在已經(jīng)符合了下面通過(guò)TT軟件進(jìn)行DTC監(jiān)控獲取運(yùn)行數(shù)據(jù),顯然現(xiàn)在程序使用已經(jīng)有問(wèn)題了,首先在界面暫停之后在重新運(yùn)行已經(jīng)無(wú)法打印當(dāng)前運(yùn)行數(shù)值,我們先通過(guò)TT軟件的雙向追溯中的逆向追溯功能查看在“暫停“函數(shù)邏輯中調(diào)用了那些函數(shù),和我們修改的函數(shù)有什么關(guān)系通過(guò)這些對(duì)比我們可以定位到問(wèn)題出現(xiàn)在哪個(gè)函數(shù)中,如圖-10
圖-10
4、 我們打開(kāi)執(zhí)行的測(cè)試用例“退出功能“,在函數(shù)導(dǎo)航樹(shù)中查看要關(guān)注菜單操作的函數(shù):
public booleanonOptionsItemSelected(MenuItem item)
如圖-11和圖-12中所示:
圖-11
圖-12
上述圖中展示出雙向追溯中逆向追溯跟蹤到Pedometer菜單操作所在函數(shù)的處理邏輯執(zhí)行情況,很明顯在最新修改的標(biāo)示為代碼紅色代碼區(qū)域標(biāo)示代碼未執(zhí)行,我們?cè)诓僮鱌edometer時(shí)候已經(jīng)很明顯的發(fā)現(xiàn),重置功能已經(jīng)不可使用了,在這里很直接的看到紅色的代碼邏輯其實(shí)是沒(méi)有執(zhí)行到,這里可以分析出代碼未執(zhí)行到的原因,如圖-13所示的2個(gè)消息類(lèi)型并未發(fā)送導(dǎo)致沒(méi)有響應(yīng)該case標(biāo)簽。
圖-13
進(jìn)一步查看代碼發(fā)現(xiàn)在菜單響應(yīng)函數(shù)中對(duì)于“暫?!昂汀敝匦麻_(kāi)始“兩個(gè)按鈕個(gè)
切換功能有問(wèn),題如圖-14代碼所示:
圖-14
圖中標(biāo)注的判斷條件只判斷了mIsRunning標(biāo)示,但是為了達(dá)到在暫停時(shí)
候播放語(yǔ)音的標(biāo)示為在這里卻沒(méi)有使用導(dǎo)致消息MENU_RESUM沒(méi)有內(nèi)發(fā)送,
此處存在開(kāi)發(fā)問(wèn)題。修改辦法在這里要加上剛才我們修改的標(biāo)示位mPause的
判斷,如圖-15所示:
圖-15
以上通過(guò)正向追溯發(fā)現(xiàn)了修改一個(gè)簡(jiǎn)單的bool值影響了別的函數(shù)導(dǎo)致問(wèn)題出
現(xiàn)。測(cè)試人員可以很快的將問(wèn)題初步定位出來(lái)及時(shí)反饋給開(kāi)發(fā)者,在開(kāi)發(fā)人員再
次定位的時(shí)候能很快的解決問(wèn)題提高了bug修復(fù)效率。
5、 再次分析TT雙向追溯中正向追溯數(shù)據(jù)如圖-16所示:
圖-16
點(diǎn)擊高亮子樹(shù)中我們查看和該菜單操作有關(guān)的函數(shù)第一個(gè)是:
resetValues(booleanupdateDisplay)我們?cè)跍y(cè)試中也發(fā)現(xiàn)在暫停之后充值數(shù)據(jù)也不能在使用,查看其覆蓋情況如圖-17:
圖-17
很明顯該函數(shù)的邏輯也是未被執(zhí)行同樣存在該問(wèn)題mPause標(biāo)示量沒(méi)有添加判
斷做同樣的修改如圖-18
圖-18
6、如此可以跟蹤發(fā)現(xiàn)類(lèi)型存在的問(wèn)題,下面我們可以根據(jù)修改的代碼再次驗(yàn)證
我們發(fā)現(xiàn)的問(wèn)題是否正確,我們?cè)俅尉幾g后發(fā)現(xiàn)現(xiàn)在已經(jīng)實(shí)現(xiàn)了我么預(yù)期的功能
在暫停時(shí)候還可以語(yǔ)音播放提示信息,重置和重新運(yùn)行切換也正常使用。覆蓋情
況如圖-19
圖-19
對(duì)移動(dòng)端白盒測(cè)試技術(shù)或者性能測(cè)試感興趣,請(qǐng)加入群符號(hào)執(zhí)行 339834199
軟件試用申請(qǐng)官網(wǎng):www.threadingtest.com
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。