• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      大規(guī)模C++工程單元測(cè)試性能優(yōu)化研究

      2022-03-30 14:02:44劉堂臣王雅文宮云戰(zhàn)
      關(guān)鍵詞:單元測(cè)試隊(duì)列內(nèi)存

      劉堂臣,王雅文,宮云戰(zhàn)

      (北京郵電大學(xué) 網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876)

      0 引言

      隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,軟件的規(guī)模迅速膨脹,軟件測(cè)試的困難與代價(jià)也變得越來越大。軟件測(cè)試的基礎(chǔ)是單元測(cè)試,它可以在軟件的初期就發(fā)現(xiàn)很多故障,并且修改它們的成本也很低[1]。單元測(cè)試的效果會(huì)在很大程度上影響到后階段的測(cè)試,會(huì)進(jìn)一步影響到產(chǎn)品的開發(fā)時(shí)間、費(fèi)用和質(zhì)量[2]。

      作者所在實(shí)驗(yàn)室一直從事著軟件測(cè)試的研究工作,現(xiàn)有的代碼測(cè)試系統(tǒng)(CTS-CPP, code testing system for c plus plus)是一款基于JAVA語(yǔ)言編寫的測(cè)試C++工程的自動(dòng)化單元測(cè)試工具,它可以對(duì)被測(cè)工程進(jìn)行以函數(shù)為單元的模塊劃分,進(jìn)而對(duì)各單元進(jìn)行自動(dòng)測(cè)試并生成測(cè)試用例,依據(jù)語(yǔ)句、分支和修訂條件判定覆蓋準(zhǔn)則統(tǒng)計(jì)出覆蓋率。CTS-CPP可以測(cè)試單個(gè)文件和小規(guī)模的C++工程,但是在測(cè)試大規(guī)模C++工程(含有多個(gè) C++文件的工程,一般超過20個(gè)總代碼行數(shù)超過5 000行)時(shí)總是會(huì)出現(xiàn)內(nèi)存溢出故障。經(jīng)分析,CTS-CPP在測(cè)試C++工程時(shí)會(huì)為每一個(gè)CPP文件生成一個(gè)分析文件類對(duì)象(下文中簡(jiǎn)稱被測(cè)對(duì)象),當(dāng)生成的被測(cè)對(duì)象過多時(shí)將會(huì)消耗掉虛擬機(jī)所有內(nèi)存從而導(dǎo)致內(nèi)存溢出故障。如果將生成的被測(cè)對(duì)象全部序列化到磁盤中,需要用到的時(shí)候再進(jìn)行反序列化操作,這樣是可以解決內(nèi)存溢出的故障,但是對(duì)每一個(gè)CPP文件都會(huì)對(duì)應(yīng)一對(duì)I/O操作,頻繁的I/O操作將會(huì)大大增加系統(tǒng)的測(cè)試時(shí)間[2]。

      為了解決自動(dòng)化單元測(cè)試工具中存在的以上問題,在測(cè)試流程中引入了緩存優(yōu)化[3-7]技術(shù),通過將部分被測(cè)對(duì)象存儲(chǔ)到內(nèi)存中以提升訪問的速度。為了保證緩存的高命中率和高效性,提出了一種面向不同測(cè)試方式的緩存優(yōu)化方法。當(dāng)用戶直接對(duì)整個(gè)工程進(jìn)行測(cè)試時(shí),采用緩存預(yù)取的方法增加緩存的命中率;當(dāng)用戶對(duì)單個(gè)文件進(jìn)行測(cè)試時(shí),采用改進(jìn)的GDSF算法(GDSF-UT, GDSF for unit test)進(jìn)行緩存的替換。實(shí)驗(yàn)表明,面向不同測(cè)試方式的緩存優(yōu)化方法能夠有效避免內(nèi)存溢出故障,提升緩存的命中率,減少測(cè)試所需的時(shí)間。

      本文第1節(jié)對(duì)國(guó)內(nèi)外系統(tǒng)性能優(yōu)化的相關(guān)工作進(jìn)行概述;第2節(jié)介紹緩存預(yù)取模型設(shè)計(jì);第3節(jié)設(shè)計(jì)并實(shí)現(xiàn)GDSF-UT緩存替換算法;第4節(jié)介紹方法應(yīng)用后的實(shí)驗(yàn)結(jié)果分析;第5節(jié)總結(jié)全文。

      1 相關(guān)工作

      隨著新技術(shù)的不斷發(fā)展,軟件規(guī)模也日益增大[8],軟件的性能優(yōu)化研究已成為國(guó)內(nèi)外許多學(xué)者的重點(diǎn)研究方向,其中通過緩存優(yōu)化技術(shù)來提升系統(tǒng)整體的性能已經(jīng)成為主流的優(yōu)化方式之一。

      目前國(guó)內(nèi)外有很多學(xué)者都在從事緩存優(yōu)化的研究工作。楊冬菊[9]等人為了保證在高并發(fā)、大用戶流量的場(chǎng)景下身份認(rèn)證系統(tǒng)能夠穩(wěn)定高效的運(yùn)行,提出了基于緩存的分布式統(tǒng)一身份認(rèn)證機(jī)制。它通過將熱點(diǎn)數(shù)據(jù)預(yù)存到緩存中以提高響應(yīng)的速度,并結(jié)合復(fù)雜多樣的用戶行為提出了基于 Hybrid的多因素緩存替換算法。胡森森[10]等人通過總結(jié)超長(zhǎng)指令字處理器發(fā)射寬度動(dòng)態(tài)變化的特點(diǎn),并利用其動(dòng)態(tài)特征來驅(qū)動(dòng)緩存的重構(gòu),從而達(dá)到合并處理器核或動(dòng)態(tài)分離的目的。王永功[11]等人分析了信息中心網(wǎng)絡(luò)的架構(gòu),指出多跳LRU緩存中“緩存退化”的問題,提出一種基于預(yù)過濾的O(1)復(fù)雜度的改進(jìn)算法,極大的增強(qiáng)了內(nèi)容分發(fā)效率。張艷[12]等人比較并分析傳統(tǒng)緩存模型MRM和IRM的思想,基于字節(jié)代價(jià)以及相對(duì)流行度的概念,提出滿足延遲時(shí)間、命中率和字節(jié)命中率等多種性能指標(biāo)要求的緩存優(yōu)化模型,并給出相關(guān)算法。劉磊[13]等人在研究緩存技術(shù)的過程中,提出了一種最小駐留價(jià)值的緩存替換算法,該算法結(jié)合對(duì)象大小和訪問頻率進(jìn)行駐留價(jià)值的計(jì)算,優(yōu)先選取價(jià)值最小的對(duì)象進(jìn)行替換,但是其忽略了緩存的使用時(shí)間和物理資源的使用情況。

      綜上所述,針對(duì)緩存的研究,一方面是對(duì)緩存內(nèi)容和實(shí)現(xiàn)方法的研究,另一方面是對(duì)緩存替換算法的研究[14-15]。作者對(duì)單元測(cè)試工具的優(yōu)化也將從以上兩方面進(jìn)行。

      2 緩存預(yù)取模型的設(shè)計(jì)

      當(dāng)用戶選擇直接對(duì)整個(gè)工程進(jìn)行測(cè)試時(shí),為了盡量減少I/O等待的時(shí)間,本節(jié)設(shè)計(jì)了一種緩存預(yù)取的模型,它借助一個(gè)緩存隊(duì)列將緩存預(yù)取模塊和文件測(cè)試模塊徹底解耦,使得原來只能串行執(zhí)行的兩個(gè)模塊現(xiàn)在可以并行執(zhí)行。

      2.1 模型構(gòu)成

      結(jié)合生產(chǎn)者-消費(fèi)者的思想,本文設(shè)計(jì)的緩存預(yù)取模型如圖1所示。

      圖1 緩存預(yù)取模型的基本構(gòu)成

      該模型主要由以下6部分組成:

      1)控制器主要負(fù)責(zé)各部件之間的任務(wù)調(diào)度和操作控制,并且負(fù)責(zé)與文件測(cè)試模塊之間的交互,使各部件有序穩(wěn)定的運(yùn)行。

      2)協(xié)調(diào)器主要負(fù)責(zé)接收對(duì)象生產(chǎn)部件和對(duì)象消費(fèi)部件發(fā)送過來的數(shù)據(jù),通過數(shù)據(jù)協(xié)調(diào)雙方的運(yùn)行,并在參數(shù)對(duì)象中記錄數(shù)據(jù)。

      3)對(duì)象生產(chǎn)部件主要負(fù)責(zé)預(yù)先批量的從磁盤中讀取對(duì)象放入緩存隊(duì)列中,并記錄讀取對(duì)象的個(gè)數(shù)和所消耗的時(shí)間,將數(shù)據(jù)發(fā)送給協(xié)調(diào)器。

      4)對(duì)象消費(fèi)部件主要負(fù)責(zé)從緩存隊(duì)列中讀取對(duì)象交給控制器處理,并記錄讀取對(duì)象的個(gè)數(shù)和測(cè)試所花的時(shí)間。

      5)緩存隊(duì)列主要是用來存放預(yù)取出來的對(duì)象,其大小支持配置,避免對(duì)虛擬機(jī)內(nèi)存的過度使用從而導(dǎo)致內(nèi)存溢出故障。同時(shí),它還支持同步阻塞,例如緩存隊(duì)列為空時(shí),消費(fèi)方將一直處于阻塞狀態(tài),直到生產(chǎn)方調(diào)入下一批預(yù)取對(duì)象。

      6)異常處理器主要負(fù)責(zé)對(duì)各部件運(yùn)行過程中出現(xiàn)的異常進(jìn)行捕捉處理。

      2.2 預(yù)取機(jī)制

      2.2.1 相關(guān)定義及符號(hào)表示

      定義1:預(yù)取對(duì)象的總個(gè)數(shù):指在測(cè)試C++工程時(shí),需要生成的被測(cè)對(duì)象的總個(gè)數(shù),記為CT。由于一個(gè)CPP文件對(duì)應(yīng)一個(gè)被測(cè)對(duì)象,所以該參數(shù)等于被測(cè)工程中CPP文件的個(gè)數(shù)。

      定義2:緩存隊(duì)列的大?。褐妇彺骊?duì)列中最多能存放的被測(cè)對(duì)象的個(gè)數(shù),記為QS。此參數(shù)限制了虛擬機(jī)內(nèi)存的使用量,避免發(fā)生內(nèi)存溢出故障。

      定義3:生產(chǎn)總批次:指從磁盤中批量預(yù)取被測(cè)對(duì)象的總次數(shù),記為PT。為了盡量減少I/O的次數(shù),約定當(dāng)磁盤中未取被測(cè)對(duì)象個(gè)數(shù)大于等于QS時(shí),按QS大小來預(yù)取。因此在數(shù)量上PT可以表示為:

      (1)

      定義4:每批生產(chǎn)被測(cè)對(duì)的數(shù)量:指每批從磁盤中預(yù)取到緩存隊(duì)列中被測(cè)對(duì)象的個(gè)數(shù),記為QSi,其中,i表示生產(chǎn)批次(1≤i≤PT)。在數(shù)量上,QSi可以表示為:

      (2)

      定義5:每次消費(fèi)的被測(cè)對(duì)象個(gè)數(shù):指每次從緩存隊(duì)列中取出的被測(cè)對(duì)象的個(gè)數(shù),記為CO。由于每次都是從緩存隊(duì)列中取出一個(gè)被測(cè)對(duì)象用于測(cè)試,測(cè)試完畢后再取下一個(gè),所以該參數(shù)的大小恒為1,可以表示為:

      CO=1

      (3)

      定義6:生產(chǎn)一批被測(cè)對(duì)象的開始時(shí)間和結(jié)束時(shí)間:指每次批量從磁盤中讀取被測(cè)對(duì)象的開始時(shí)間和結(jié)束時(shí)間,分別記為TPSi和TPEi,其中,i表示生產(chǎn)批次(1≤i≤PT)。

      定義7:生產(chǎn)一批被測(cè)對(duì)象所消耗的時(shí)間:指從磁盤預(yù)取一批被測(cè)對(duì)象到緩存隊(duì)列中所消耗的時(shí)間,記為ΔTPi,其中,i表示生產(chǎn)批次(1≤i≤PT)。在數(shù)量上,該參數(shù)等于每批生產(chǎn)的結(jié)束時(shí)間與每批生產(chǎn)的開始時(shí)間的差值,可以表示為:

      ΔTPi=TPEi-TPSi

      (4)

      定義8:消費(fèi)一個(gè)被測(cè)對(duì)象的開始時(shí)間和結(jié)束時(shí)間:指從緩存隊(duì)列中取出一個(gè)被測(cè)對(duì)象的時(shí)間和被測(cè)對(duì)象測(cè)試完畢的時(shí)間,分別記為TCSi,j和TCEi,j,其中,i表示生產(chǎn)批次(1≤i≤PT),j表示緩存隊(duì)列中的第j個(gè)元素(1≤j≤QSi)。

      定義9:消費(fèi)一個(gè)被測(cè)對(duì)象所需的時(shí)間:指消費(fèi)方從緩存隊(duì)列中取出被測(cè)對(duì)象到測(cè)試完畢所消耗的時(shí)間,記為ΔTCi,j,其中,i表示生產(chǎn)批次(1≤i≤PT),j表示緩存隊(duì)列中的第j個(gè)元素(1≤j≤QSi)。在數(shù)量上,該參數(shù)等于消費(fèi)一個(gè)被測(cè)對(duì)象的結(jié)束時(shí)間與開始時(shí)間的差值,可以表示為:

      ΔTCi,j=TCEi,j-TCSi,j

      (5)

      定義10:消費(fèi)一批被測(cè)對(duì)象所需的時(shí)間:指從緩存隊(duì)列中取出第一個(gè)被測(cè)對(duì)象開始到同一批被測(cè)對(duì)象全部測(cè)試完畢所消耗的總時(shí)間,記為ΔTCi,其中,i表示生產(chǎn)批次(1≤i≤PT)。如圖 2所示,ΔTCi,1表示消費(fèi)第i批第1個(gè)被測(cè)對(duì)象所需的時(shí)間,ΔTCi,2表示消費(fèi)第i批第2個(gè)被測(cè)對(duì)象所需的時(shí)間,以此類推,ΔTCi,j(1≤j≤QSi)表示消費(fèi)第i批第j個(gè)被測(cè)對(duì)象所需的時(shí)間,該參數(shù)表示它們的總和。

      圖2 批量消費(fèi)與單個(gè)消費(fèi)所需時(shí)間關(guān)系示意圖

      在數(shù)量上可以表示為:

      (6)

      2.2.2 等待時(shí)間

      緩存預(yù)取模型設(shè)計(jì)的核心目的就是盡量減少等待I/O的時(shí)間,為了達(dá)到這一目的,模型采取了兩點(diǎn)關(guān)鍵的設(shè)計(jì):1)將原來串行執(zhí)行的緩存預(yù)取模塊和文件測(cè)試模塊通過一個(gè)緩存隊(duì)列實(shí)現(xiàn)解耦,使得兩模塊在一定程度上可以并行執(zhí)行;2)采用批量預(yù)取的方式,減少I/O的次數(shù)。

      消費(fèi)方在消費(fèi)一批被測(cè)對(duì)象之前需要先等待生產(chǎn)方生產(chǎn)完畢,這一等待時(shí)間即為CPU等待I/O的時(shí)間,記為ΔTWi,其中,i表示生產(chǎn)批次(1≤i≤PT)。如圖 3所示,ΔTP1表示生產(chǎn)第1批被測(cè)對(duì)象所消耗的時(shí)間,此時(shí),緩存隊(duì)列還為空,消費(fèi)方需要等待ΔTW1的時(shí)間,然后生產(chǎn)方和消費(fèi)方開始并行執(zhí)行,ΔTP2表示生產(chǎn)第2批被測(cè)對(duì)象所消耗的時(shí)間,ΔTC1表示消費(fèi)第1批被測(cè)對(duì)象所需要的時(shí)間,它們的差值即為ΔTW2,如果ΔTC1≥ΔTP2,說明消費(fèi)第1批比生產(chǎn)第2批花費(fèi)的時(shí)間更長(zhǎng),此時(shí)消費(fèi)完第1批第2批已經(jīng)生產(chǎn)完畢,因此ΔTW2等于0。以此類推,ΔTPi表示生產(chǎn)第i批被測(cè)對(duì)象所消耗的時(shí)間;ΔTCi-1表示消費(fèi)第i-1批被測(cè)對(duì)象所需要的時(shí)間,它們的差值即為ΔTWi,如果ΔTCi-1≥ΔTPi,說明消費(fèi)第i-1批比生產(chǎn)第i批花費(fèi)的時(shí)間更長(zhǎng),此時(shí)消費(fèi)完第i-1批第i批已經(jīng)生產(chǎn)完畢,因此ΔTWi等于0。

      圖3 生產(chǎn)時(shí)間消費(fèi)時(shí)間等待時(shí)間關(guān)系示意圖

      ΔTWi在數(shù)量上可以表示為:

      (7)

      條件2:2≤i≤PT&&ΔTPi>ΔTCi-1;

      條件3:2≤i≤PT&&ΔTPi≤ΔTCi-1;

      整個(gè)測(cè)試流程等待I/O的總時(shí)間即為各批次等待I/O時(shí)間之和,記為ΔTW。在數(shù)量上,可以表示為:

      (8)

      2.2.3 預(yù)取流程

      當(dāng)單元測(cè)試工具啟動(dòng)對(duì)一個(gè)工程進(jìn)行單元測(cè)試時(shí),緩存預(yù)取模型的運(yùn)行流程如下:

      1)通過參數(shù)配置模塊配置緩存隊(duì)列的大小,通過控制器將配置的參數(shù)寫入到參數(shù)對(duì)象中;

      2)消費(fèi)方和生產(chǎn)方同時(shí)啟動(dòng),此時(shí)緩存隊(duì)列為空,消費(fèi)方進(jìn)入阻塞狀態(tài),生產(chǎn)方開始預(yù)取數(shù)據(jù),記錄開始時(shí)間和結(jié)束時(shí)間,通過公式(4)計(jì)算出生產(chǎn)當(dāng)前批被測(cè)對(duì)象所消耗的時(shí)間ΔTP1;

      3)消費(fèi)方阻塞ΔTW1(數(shù)值上等于ΔTP1)后被喚醒,與生產(chǎn)方開始并行執(zhí)行;

      4)消費(fèi)方從緩存隊(duì)列中一個(gè)一個(gè)取出被測(cè)對(duì)象并進(jìn)行單元測(cè)試,記錄每一個(gè)被測(cè)對(duì)象消費(fèi)的開始時(shí)間和結(jié)束時(shí)間,通過公式(5)計(jì)算出消費(fèi)當(dāng)前被測(cè)對(duì)象所需的時(shí)間,通過公式(6)進(jìn)一步計(jì)算出消費(fèi)當(dāng)前批被測(cè)對(duì)象所需的時(shí)間ΔTCi-1(2≤i≤PT);

      5)生產(chǎn)方與步驟4)并行執(zhí)行,預(yù)取下一批的被測(cè)對(duì)象,記錄預(yù)取的開始時(shí)間和結(jié)束時(shí)間,通過公式(4)計(jì)算出生產(chǎn)下一批被測(cè)對(duì)象所消耗的時(shí)間ΔTPi(2≤i≤PT);

      6)根據(jù)公式(7)計(jì)算出當(dāng)前批的等待時(shí)間ΔTWi;

      7)重復(fù)執(zhí)行步驟4)~6),直到i=PT;

      8)根據(jù)公式(8)計(jì)算出整個(gè)流程中等待I/O的時(shí)間。

      3 緩存替換算法的設(shè)計(jì)

      當(dāng)用戶選擇對(duì)工程下的單個(gè)文件進(jìn)行測(cè)試時(shí),如果選中文件的被測(cè)對(duì)象恰好在緩存中,將會(huì)少一次I/O操作,從而節(jié)省測(cè)試的時(shí)間。所以一個(gè)高命中率的緩存替換算法就顯得尤為重要。本節(jié)在目前廣泛被使用的GDSF緩存替換算法的基礎(chǔ)上,進(jìn)一步考慮了單元測(cè)試的空間局部性特征和測(cè)試結(jié)果等因素的影響,提出了GDSF-UT緩存替換算法。

      3.1 GDSF算法

      GDSF算法[16-18]是緩存替換算法中考慮影響因素相對(duì)比較全面的一種算法,相對(duì)傳統(tǒng)考慮影響因素比較單一的算法具有較高的命中率,因此也被廣泛的使用。它綜合考慮了對(duì)象的大小、對(duì)象訪問頻率、時(shí)間和引入對(duì)象到緩存所需的代價(jià)的影響[19],通過這些影響因素計(jì)算緩存中對(duì)象的權(quán)重,當(dāng)緩存空間滿時(shí),替換出緩存中權(quán)重最小的對(duì)象[20]。計(jì)算公式為:

      (9)

      式中,O為緩存對(duì)象;W(O)代表緩存對(duì)象的權(quán)重;L為膨脹因子,初始值為0,每次需要緩存替換時(shí),L被重新賦值為當(dāng)前緩存中最小的權(quán)重值;Ffreq(O)為緩存對(duì)象的訪問頻次,初始值為1,之后每命中一次其值加1;Size(O)為緩存對(duì)象的大??;Cost(O)為將對(duì)象從磁盤取回到緩存所需的代價(jià)。

      雖然GDSF算法考慮了比較多的影響因素,且容易實(shí)現(xiàn),計(jì)算開銷也比較小,但是用在單元測(cè)試工具中就缺乏對(duì)測(cè)試結(jié)果、測(cè)試行為特征等因素的考慮,接下來將在此算法的基礎(chǔ)上設(shè)計(jì)面向單元測(cè)試工具的緩存替換算法GDSF-UT。

      3.2 GDSF-UT算法

      3.2.1 相關(guān)概念

      設(shè)S={O1,O2,O3,…,Om,…,On}表示被測(cè)對(duì)象的集合,其下標(biāo)1…n表示在文件系統(tǒng)中的相對(duì)位置。

      定義1:對(duì)象距離:指兩個(gè)被測(cè)對(duì)象在文件系統(tǒng)中相對(duì)位置的差值,記為Dmn,其中,m、n分別表示兩個(gè)被測(cè)對(duì)象在文件系統(tǒng)中的相對(duì)位置。在數(shù)值上,該參數(shù)等于m與n差值的絕對(duì)值,可以表示為:

      Dmn=|m-n|

      (10)

      定義2:分支覆蓋率:指程序中被測(cè)試執(zhí)行的判定和分支數(shù)占判定和分支總數(shù)的比率,記為BCR。

      定義3:語(yǔ)句覆蓋率:指程序中被測(cè)試執(zhí)行的語(yǔ)句數(shù)占可執(zhí)行的語(yǔ)句總數(shù)的比率,記為SCR。

      定義4:修訂條件/判定覆蓋率:簡(jiǎn)稱MC/DC,它是一種特殊的分支覆蓋率,它不但會(huì)使用分支覆蓋率報(bào)告復(fù)雜條件下的TRUE和FALSE輸出,同時(shí)也會(huì)報(bào)告復(fù)雜條件下的全部分支條件輸出,記為MDCR。

      3.2.2 算法描述

      用戶在對(duì)單個(gè)被測(cè)對(duì)象進(jìn)行測(cè)試時(shí)的行為特征包括:所測(cè)試的對(duì)象具有很強(qiáng)的空間局部性,即一段時(shí)間內(nèi)連續(xù)多次的測(cè)試行為通常只發(fā)生在相鄰的一些對(duì)象中,也就是對(duì)象距離越小,被選中測(cè)試的概率就越大;測(cè)試結(jié)果的好壞也將會(huì)影響再次被選中測(cè)試的概率(測(cè)試結(jié)果的好壞由定義2、3、4給出的覆蓋率來評(píng)判),測(cè)試結(jié)果越好,再次被選中測(cè)試的概率就越小,測(cè)試結(jié)果越差,再次被選中測(cè)試的概率就越大。此部分的影響因素用P來表示,計(jì)算方式如下:

      (11)

      式中,Oi為緩存權(quán)重計(jì)算對(duì)象,Oj為訪問對(duì)象。

      結(jié)合用戶測(cè)試行為特征的影響,改進(jìn)后的算法GDSF-UT的權(quán)重計(jì)算公式為:

      (12)

      GDSF-UT算法在原有算法基礎(chǔ)上進(jìn)一步考慮了用戶測(cè)試行為特征的影響,由此進(jìn)一步優(yōu)化了緩存權(quán)重的計(jì)算公式,可以看出改進(jìn)后的算法在單元測(cè)試工具中具有較強(qiáng)的適應(yīng)性。

      3.2.3 算法流程

      GDSF-UT算法的請(qǐng)求處理流程如圖 4所示。

      圖4 GDSF-UT算法的請(qǐng)求處理流程圖

      由圖 4可以看出,當(dāng)用戶發(fā)出對(duì)象請(qǐng)求時(shí),首先判斷緩存中是否有該對(duì)象。如果有,更新緩存對(duì)象的權(quán)重并返回對(duì)象;如果沒有,則需要從磁盤中反序列化出對(duì)象,然后判斷緩存是否已滿。如果已滿,替換出權(quán)重最小的對(duì)象并更新緩存對(duì)象的權(quán)重,然后返回對(duì)象;如果緩存沒有滿,則直接將對(duì)象放入緩存并更新緩存對(duì)象的權(quán)重,然后返回對(duì)象。

      4 實(shí)驗(yàn)及實(shí)驗(yàn)結(jié)果分析

      為了驗(yàn)證緩存預(yù)取模型和GDSF-UT替換算法的有效性,本文選取了5個(gè)不同規(guī)模的開源C++工程在CTS-CPP中進(jìn)行測(cè)試實(shí)驗(yàn),它們的工程屬性如表1所示。

      表1 C++代碼工程的屬性列表

      4.1 實(shí)驗(yàn)環(huán)境

      本文實(shí)驗(yàn)中,CTS-CPP運(yùn)行在lenovo臺(tái)式機(jī)上,CPU型號(hào)為Intel(R) Core(TM) i5-1038NG7,CPU頻率為3.80 GHz,物理內(nèi)存為8 GB,操作系統(tǒng)為Windows 10 專業(yè)版,編譯器為VC14,開發(fā)平臺(tái)為Eclipse,開發(fā)語(yǔ)言為Java,虛擬機(jī)最大內(nèi)存設(shè)置為512 M。

      4.2 實(shí)驗(yàn)結(jié)果及分析

      4.2.1 緩存預(yù)取模型對(duì)性能的影響

      為了評(píng)估緩存預(yù)取模型對(duì)CTS-CPP性能的影響,本文對(duì)5個(gè)不同規(guī)模的測(cè)試工程進(jìn)行了工程級(jí)別的測(cè)試,分別記錄了優(yōu)化前、每次從磁盤讀取和采用預(yù)取機(jī)制3種情況下對(duì)整個(gè)工程進(jìn)行模塊劃分所需的時(shí)間,同時(shí)也統(tǒng)計(jì)出了每次從磁盤讀取和采用預(yù)取機(jī)制2種情況下CPU等待I/O 的總時(shí)間,具體實(shí)驗(yàn)結(jié)果如表2所示,表中的OOM代表發(fā)生內(nèi)存溢出故障。為了避免緩存隊(duì)列大小對(duì)實(shí)驗(yàn)結(jié)果的影響,本文實(shí)驗(yàn)將其設(shè)置為60。

      從表2可以發(fā)現(xiàn):當(dāng)被測(cè)工程規(guī)模較小,即內(nèi)存中能存放下所有被測(cè)對(duì)象,優(yōu)化前的方案模塊劃分的速度是最快的;當(dāng)被測(cè)工程規(guī)模越來越大,優(yōu)化前的方案將會(huì)發(fā)生內(nèi)存溢出故障,采用每次從磁盤讀取和預(yù)取機(jī)制可以有效避免內(nèi)存溢出故障,但模塊劃分的時(shí)間也越來越長(zhǎng),采用預(yù)取機(jī)制相比每次從磁盤讀取平均節(jié)約15%左右的時(shí)間;CPU等待I/O的總時(shí)間

      表2 緩存預(yù)取模型對(duì)性能的影響評(píng)估

      方面,每次從磁盤讀取等待的總時(shí)間隨著工程規(guī)模增大而變長(zhǎng),而采用預(yù)取機(jī)制的等待總時(shí)間穩(wěn)定在第一批被測(cè)對(duì)象預(yù)取完成所需的時(shí)間附近,因?yàn)橛蓪?shí)驗(yàn)結(jié)果發(fā)現(xiàn),測(cè)試完上一批所需的時(shí)間遠(yuǎn)大于下一批的預(yù)取時(shí)間,因此測(cè)試完上一批后不需要等待I/O,即ΔTWi=0(2≤i≤PT),隨著被測(cè)工程規(guī)模的增大,兩種方案等待I/O總時(shí)間的差值就越大,采用預(yù)取機(jī)制節(jié)省的時(shí)間就越多。

      4.2.2 GDSF-UT替換算法對(duì)性能的影響

      為了評(píng)估GDSF-UT替換算法對(duì)CTS-CPP性能的影響,本文對(duì)5個(gè)不同規(guī)模的測(cè)試工程進(jìn)行了文件級(jí)別的測(cè)試,分別記錄了優(yōu)化前、每次從磁盤讀取、采用GDSF算法和采用GDSF-UT算法4種情況下抽樣測(cè)試單個(gè)文件的平均響應(yīng)時(shí)間,同時(shí)也統(tǒng)計(jì)出了采用GDSF算法和采用GDSF-UT算法2種情況下的緩存命中率,具體實(shí)驗(yàn)結(jié)果如表3所示。

      表3 GDSF-UT替換算法對(duì)性能的影響評(píng)估

      從表3可以發(fā)現(xiàn):當(dāng)被測(cè)工程規(guī)模較小,即內(nèi)存中能存放下所有被測(cè)對(duì)象,此時(shí)的緩存命中率都為100%,優(yōu)化前、采用GDSF算法和采用GDSF-UT算法測(cè)試單個(gè)文件的平均響應(yīng)時(shí)間幾乎相等;針對(duì)同一被測(cè)工程,在緩存放不下所有被測(cè)對(duì)象前提下,每次從磁盤讀取、采用GDSF算法和采用GDSF-UT算法測(cè)試單個(gè)文件的平均響應(yīng)時(shí)間依次減??;隨著被測(cè)工程規(guī)模越來越大,由于緩存的大小一定,所以緩存命中率越來越低,但GDSF-UT算法的命中率比GDSF算法的命中率平均高出4~5個(gè)百分點(diǎn)。

      5 結(jié)束語(yǔ)

      針對(duì)單元測(cè)試工具無(wú)法測(cè)試大規(guī)模C++工程且耗時(shí)較長(zhǎng)這一問題,在測(cè)試流程中引入了緩存優(yōu)化技術(shù),并提出了一種面向不同測(cè)試方式的緩存優(yōu)化方法。對(duì)于工程級(jí)別的測(cè)試,本文提出了一種緩存預(yù)取模型;對(duì)于文件級(jí)別的測(cè)試,本文提出了改進(jìn)的GDSF緩存替換算法。實(shí)驗(yàn)結(jié)果表明,該方法使得被測(cè)工程規(guī)模從5 000多行擴(kuò)大至十幾萬(wàn)行,大大提升了單元測(cè)試工具的性能,使其在軟件規(guī)模迅速膨脹的今天具有更強(qiáng)的適用性。同時(shí),該方法提升了單元測(cè)試工具的響應(yīng)速度,縮短了測(cè)試所需要的時(shí)間,為單元測(cè)試工作節(jié)省了人力成本和時(shí)間成本,具有較高的應(yīng)用價(jià)值。在下一步研究工作中,由于被測(cè)工程規(guī)模較大,生成的測(cè)試用例數(shù)量將會(huì)急劇增加,要執(zhí)行所有的測(cè)試用例幾乎是不可能的,因此,接下來將重點(diǎn)研究測(cè)試用例約簡(jiǎn)方法。

      猜你喜歡
      單元測(cè)試隊(duì)列內(nèi)存
      隊(duì)列里的小秘密
      基于多隊(duì)列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      “春夏秋冬”的內(nèi)存
      在隊(duì)列里
      豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
      一年級(jí)上冊(cè)第五單元測(cè)試
      一年級(jí)上冊(cè)一、二單元測(cè)試
      基于內(nèi)存的地理信息訪問技術(shù)
      第五單元測(cè)試卷
      第六單元測(cè)試卷
      灵璧县| 东乌珠穆沁旗| 讷河市| 龙游县| 金坛市| 宝鸡市| 眉山市| 伊春市| 古蔺县| 闸北区| 墨江| 张家港市| 台安县| 莱阳市| 临西县| 石门县| 屯留县| 怀化市| 彰化市| 青川县| 阿拉善盟| 昌乐县| 崇义县| 尉犁县| 西和县| 承德县| 昭通市| 井冈山市| 临汾市| 临猗县| 长寿区| 安吉县| 怀宁县| 台湾省| 庆云县| 麻栗坡县| 吉木乃县| 临武县| 惠州市| 盐城市| 贵定县|