一種基于插裝技術(shù)統(tǒng)計(jì)測(cè)試覆蓋率的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測(cè)試和項(xiàng)目管理技術(shù)領(lǐng)域,具體涉及一種基于插裝技術(shù)統(tǒng)計(jì)測(cè)試覆蓋率的方法,主要針對(duì)軟件開發(fā)過程中質(zhì)量反復(fù),可控性差,問責(zé)困難等問題,通過在程序代碼中插入測(cè)試粧,監(jiān)測(cè)該代碼在某次測(cè)試中是否被執(zhí)行,統(tǒng)計(jì)測(cè)試覆蓋率,減少測(cè)試的隨機(jī)性、隨意性,提高項(xiàng)目管理的科學(xué)性,從而縮短項(xiàng)目測(cè)試時(shí)間,降低測(cè)試成本。
【背景技術(shù)】
[0002]從事軟件項(xiàng)目管理及測(cè)試管理時(shí),我們會(huì)發(fā)現(xiàn)在項(xiàng)目面對(duì)結(jié)項(xiàng)時(shí)間壓力,此時(shí)軟件質(zhì)量反復(fù)、bug收斂度不如預(yù)期等問題,往往是項(xiàng)目結(jié)項(xiàng)面臨的最大問題。項(xiàng)目經(jīng)理通常采取的做法第一是bug分類追蹤問責(zé):將本次bug分類,新發(fā)現(xiàn)、修改導(dǎo)致、未修改等,以追究測(cè)試人員及開發(fā)人員的責(zé)任,期待開發(fā)人員修改bug質(zhì)量及測(cè)試人員測(cè)試全面性的提高,第二是加班趕工。測(cè)試經(jīng)理為了減少新發(fā)現(xiàn)bug的數(shù)量,往往采用固定模塊測(cè)試人員的做法。
[0003]不可否認(rèn),這些做法會(huì)取得一定的效果。但是bug分類的統(tǒng)計(jì)過程,缺乏科學(xué)的、系統(tǒng)的標(biāo)準(zhǔn),依據(jù)開發(fā)及測(cè)試對(duì)于往期的測(cè)試印象而進(jìn)行分類,這往往造成開發(fā)與測(cè)試互相推諉的現(xiàn)象。
[0004]總結(jié)這些矛盾的根本在于測(cè)試覆蓋率的問題,如何保證在測(cè)試初期就進(jìn)行全面的覆蓋?作為管理人員如何在測(cè)試之后統(tǒng)計(jì)本次測(cè)試對(duì)于程序測(cè)試的全面性?
目前在項(xiàng)目工期緊、軟件質(zhì)量反復(fù)、bug收斂度不如預(yù)期的情況下,項(xiàng)目經(jīng)理歸結(jié)原因時(shí)往往缺乏科學(xué)性和可靠性,對(duì)項(xiàng)目其他人員來說此結(jié)論缺乏數(shù)據(jù)依據(jù)和說服力。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問題是:基于上述技術(shù),本發(fā)明提供一種基于插裝技術(shù)統(tǒng)計(jì)測(cè)試覆蓋率的方法。
[0006]本發(fā)明所采用的技術(shù)方案為:
一種基于插裝技術(shù)統(tǒng)計(jì)測(cè)試覆蓋率的方法,所述方法在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針(又稱為“探測(cè)儀”),通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過對(duì)這些數(shù)據(jù)的分析,獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到動(dòng)態(tài)信息測(cè)試覆蓋率,從而實(shí)現(xiàn)測(cè)試目的;所述測(cè)試覆蓋率采用層次覆蓋率,按照程序粒度劃分為三個(gè)層次:api覆蓋率、函數(shù)覆蓋率、代碼條件分支覆蓋率,三個(gè)層次的覆蓋率由粗到細(xì),相互關(guān)耳關(guān)。
[0007]基于插裝技術(shù)的統(tǒng)計(jì)測(cè)試覆蓋率的方法即在被測(cè)程序中插入裝探針,當(dāng)程序被執(zhí)行(被測(cè)試)時(shí),探針執(zhí)行并輸入指定信息,反之,探針的指定信息未輸出則證明該段程序在本輪測(cè)試中未被測(cè)試到,從而可以科學(xué)的、有說服力的計(jì)算測(cè)試的覆蓋率。
[0008]所述api覆蓋率,以程序接口為單位,在每一個(gè)接口執(zhí)行前插入探針,探針信息包括接口編號(hào)、執(zhí)行次數(shù)變量X (i)(接口每被執(zhí)行一次該變量加1,初始值為0),在程序詳細(xì)設(shè)計(jì)時(shí),記錄編號(hào)為i的接口被調(diào)用的次數(shù),計(jì)為總數(shù)A(i),api (i)=X (i)/A(i),當(dāng)api (i?l時(shí),視該接口被完全覆蓋(本方法基于測(cè)試的隨機(jī)性排除該接口被少數(shù)情況下集中調(diào)用的情況)剔除i接口在總api覆蓋率中的計(jì)算,
總 api 覆蓋率=[X (I)+X (2)+...+X(I1-1)+X(n)]/[A(I)+A(2)+…+A(n-1)+A(η)](其中I到η中剔除api (:0>1的1接口)。當(dāng)api覆蓋率偏低時(shí),可以通過計(jì)算api (i) =X(i)/A⑴來具體到是某個(gè)具體的api。
[0009]所述函數(shù)覆蓋率,以函數(shù)為單位,在每一個(gè)函數(shù)開始執(zhí)行之前插入探針,探針信息包含函數(shù)編號(hào)、執(zhí)行次數(shù)X (i)(函數(shù)每被調(diào)用一次該變量加1,初始值為0),在程序詳細(xì)設(shè)計(jì)時(shí),記錄編號(hào)為i的函數(shù)被調(diào)用的次數(shù),計(jì)為總數(shù)A (i),函數(shù)覆蓋率=X (i)/A(i)0
[0010]所述代碼條件分支覆蓋率,以函數(shù)內(nèi)分支為單位,在每個(gè)分支執(zhí)行時(shí)插入探針,探針信息包括分支編號(hào),在編碼階段,記錄分支數(shù)量,分支覆蓋率=執(zhí)行的編號(hào)總數(shù)/總的分支數(shù)量。
[0011]所述方法在計(jì)算程序測(cè)試覆蓋率時(shí),綜合這三種層次的覆蓋率,判斷該輪測(cè)試是否為有效的測(cè)試,對(duì)于覆蓋率與有效測(cè)試的關(guān)系,根據(jù)測(cè)試的不同階段來具體定義,在測(cè)試后期,程序功能趨于完善時(shí),三種覆蓋率基本上要達(dá)到90%以上,測(cè)試才算有效。
[0012]所述方法操作步驟如下:
1)項(xiàng)目詳細(xì)設(shè)計(jì)階段,根據(jù)詳細(xì)設(shè)計(jì)圖,給api編號(hào),并記錄api將被調(diào)用情況的數(shù)量;給函數(shù)編號(hào),并記錄函數(shù)被調(diào)用的情況數(shù)量;
2)在編碼階段,給函數(shù)的分支編號(hào);
3)在編碼階段,在api接口開始、函數(shù)開始及函數(shù)的分支開始,插入探針=System.0ut.println語句,輸入信息到指定的文件,包括但不限于編號(hào)及執(zhí)行次數(shù);
4)在測(cè)試結(jié)束后,分別計(jì)算api覆蓋率、函數(shù)覆蓋率及分支覆蓋率(綜合三種覆蓋率的情況,可以一定程度上避免少數(shù)情況下集中調(diào)用的情況),綜合考量目前項(xiàng)目功能的完成情況及三種覆蓋率,對(duì)測(cè)試是否有效做出判斷。
[0013]在測(cè)試初期,項(xiàng)目的功能只完成了 50%,根據(jù)二八原則,三種測(cè)試覆蓋率若均低于48%,則考慮測(cè)試覆蓋率低的情況,再根據(jù)單個(gè)的接口覆蓋率、單個(gè)的函數(shù)覆蓋率及單個(gè)函數(shù)的分支覆蓋率,去排查確認(rèn)是哪些代碼未覆蓋到;到了項(xiàng)目后期,程序功能基本完成,則三種測(cè)試覆蓋率基本上要達(dá)到80%以上甚至更高,才能判斷此次測(cè)試有效。
[0014]所述系統(tǒng)測(cè)試需要持續(xù)5輪甚至更高,比較輪次之間的測(cè)試覆蓋率,當(dāng)測(cè)試覆蓋率逐漸升高的情況下,判斷項(xiàng)目在朝好的方向發(fā)展;當(dāng)測(cè)試覆蓋率下降,在排除測(cè)試原因時(shí),判斷程序質(zhì)量出現(xiàn)后退,需要引起項(xiàng)目經(jīng)理的重視。
[0015]本發(fā)明的有益效果為:
本發(fā)明通過在代碼中插裝的技術(shù),記錄測(cè)試軌跡;通過一輪測(cè)試之后的探針輸出,計(jì)算三個(gè)層次的測(cè)試覆蓋率,三種覆蓋率相結(jié)合,一定程度減少過度集中調(diào)用對(duì)數(shù)據(jù)的影響;根據(jù)項(xiàng)目測(cè)試階段和覆蓋率數(shù)據(jù),有理有據(jù)的、靈活的判斷測(cè)試的有效性,防止互相推諉、無視事實(shí),提高項(xiàng)目管理的科學(xué)性。
【附圖說明】
[0016]圖1為本發(fā)明基于插裝技術(shù)計(jì)算測(cè)試覆蓋率方法圖。
【具體實(shí)施方式】
[0017]下面根據(jù)說明書附圖,結(jié)合【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)一步說明:
實(shí)施例1:
一種基于插裝技術(shù)統(tǒng)計(jì)測(cè)試覆蓋率的方法,所述方法在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針(又稱為“探測(cè)儀”),通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過對(duì)這些數(shù)據(jù)的分析,獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到動(dòng)態(tài)信息測(cè)試覆蓋率,從而實(shí)現(xiàn)測(cè)試目的;所述測(cè)試覆蓋率采用層次覆蓋率,按照程序粒度劃分為三個(gè)層次:api覆蓋率、函數(shù)覆蓋率、代碼條件分支覆蓋率,三個(gè)層次的覆蓋率由粗到細(xì),相互關(guān)耳關(guān)。
[0018]基于插裝技術(shù)的統(tǒng)計(jì)測(cè)試覆蓋率的方法即在被測(cè)程序中插入裝探針,當(dāng)程序被執(zhí)行(被測(cè)試)時(shí),探針執(zhí)行并輸入指定信息,反之,探針的指定信息未輸出則證明該段程序在本輪測(cè)試中未被測(cè)試到,從而可以科學(xué)的、有說服力的計(jì)算測(cè)試的覆蓋率。
[0019]實(shí)施例2:
在實(shí)施例1的基礎(chǔ)上,本實(shí)施例所述api覆蓋率,以程序接口為單位,在每一個(gè)接口執(zhí)行前插入探針,探針信息包括接口編號(hào)、執(zhí)行次數(shù)變量x( i )(接口每被執(zhí)行一次該變量加I,初始值為0),在程序詳細(xì)設(shè)計(jì)時(shí),記錄編號(hào)為i的接口被調(diào)用的次數(shù),計(jì)為總數(shù)A(i),api(i)=X (i)/A(i),當(dāng)api (i) >1時(shí),視該接口被完全覆蓋(