999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向持續集成測試優化的強化學習獎勵機制?

2019-06-11 07:40:00何柳柳趙瑞蓮
軟件學報 2019年5期
關鍵詞:排序歷史實驗

何柳柳,楊 羊,李 征,趙瑞蓮

(北京化工大學 信息科學與技術學院,北京 100029)

持續集成(continuous integration,簡稱CI)是一項旨在實時部署的軟件開發實踐.持續集成包含版本控制、軟件配置管理、自動構建以及回歸測試等步驟.持續集成要求開發人員必須頻繁地整合他們的工作,通常是至少每天一次有時甚至每天多次,同時要求將發布軟件保持在潛在可發布狀態.每次集成會通過自動構建測試過程進行驗證,以盡快檢測集成錯誤.與早期相隔較長時間再集成的開發模式相比,持續集成的集成頻率高,因此需要快速發現錯誤并快速反饋,使開發人員了解軟件集成的情況,并對不成功的集成進行快速的修改,進而提高軟件開發的效率和質量.但隨著軟件規模的增大,測試用例集包含的信息越來越多,現有的回歸測試優化技術難以滿足持續集成對測試結果快速反饋的需求.

為提高持續集成回歸測試的效率,需要將潛在發現錯誤的測試用例優先運行.主要方法延續了傳統的測試優化,包括測試用例約減、測試用例選擇和測試用例優先排序.測試用例約減識別并消除測試用例集中過時或冗余的測試用例.測試用例選擇基于特定準則選取測試用例集的子集,通常選取用于測試軟件更改部分的測試用例.而測試用例優先排序旨在找出一個好的測試用例執行序列,使潛在發現錯誤的測試用例能盡早地被執行.在持續集成測試優化中,測試用例優先排序技術和測試用例選擇是主要研究并應用的兩種技術.

近年來,隨著機器學習方法的興起,測試用例優化技術逐步和基于學習的方法相結合.Busjaeger等人[1]提出使用機器學習方法來集成多個現有測試用例優化技術,進行測試用例集的優先排序.強化學習是機器學習的一個重要分支,其重點在于學習者不依賴監督機制或完整的環境模型,直接與其環境相互作用而學習.強化學習強調基于環境反饋進行決策以獲取最大利益.在軟件持續集成測試中,由于每次集成都需要針對集成的代碼對測試用例集合優化,以生成適用于本次集成的測試用例子集,所以持續集成測試優化可以定義成一個基于軟件代碼集成的測試用例執行序列決策(序貫決策,sequential decision)問題,即根據集成代碼的特點,選擇要執行的測試用例子集并確定其執行次序.持續集成測試優化是一個測試用例選擇和優先排序相混合的優化問題,可以采用強化學習解決這個問題.Spieker等人[2]在2017年提出一種基于強化學習的方法RETECS(reinforced test case selection),首次將強化學習應用于軟件持續集成測試優化中.

強化學習通過獎勵函數(reward function)來計算智能體選取某個動作后的即時獎勵,是智能體與環境交互的直接反饋.好的獎勵函數能更加準確地反映兩者的交互情況,使智能體更加準確地感知其環境狀態,從而加快強化學習的收斂過程.Spieker等人提出的RETECS方法中,根據測試用例集的持續時間、鄰近一次執行和失效信息來自動學習測試用例的檢錯能力,提高易于發現錯誤的測試用例的執行優先級.

強化學習的核心是在與環境的交互過程中進行學習,即基于歷史交互信息來決定當前的執行.RETECS方法的獎勵函數考慮了測試用例當前一次集成中的執行信息,包括失效總數、執行結果與失效的測試用例在序列中的位置對測試序列的影響,但缺少測試用例在集成過程中的整體歷史執行信息.本文從獎勵函數設計和獎勵策略兩個方面開展研究.在獎勵函數設計方面,綜合考慮測試用例歷史執行失效總次數和失效在全部集成過程中的分布,提出兩種基于測試用例歷史執行信息的強化學習獎勵函數.在獎勵策略方面,提出整體獎勵和部分獎勵兩種策略,形成面向持續集成測試優化強化學習方法的獎勵機制.本文的主要貢獻包括:

(1) 針對測試用例在全部持續集成過程中的歷史執行信息,定義了測試用例歷史平均失效率,在表征了測試用例整體歷史失效次數的同時,度量了失效在集成過程中的分布.

(2) 在持續集成測試優化的強化學習獎勵函數設計上,綜合考慮測試用例全部執行歷史信息,提出了兩種基于歷史信息的強化學習獎勵函數;在獎勵策略方面,提出了整體獎勵和部分獎勵兩種策略.

(3) 在實際工業程序上進行了實證研究,結果顯示:在軟件持續集成測試優化中,融合歷史信息的強化學習獎勵函數優于現有方法.

本文第1節總結相關研究,引出本文研究動機.第2節提出本文基于測試用例歷史執行信息的獎勵函數.第3節通過實驗對比分析驗證本文所提出獎勵函數的有效性.第4節介紹相關工作.最后,第5節進行總結與展望.

1 相關工作

測試用例優先排序(test case prioritization,簡稱TCP)問題是一個時序問題.在測試過程中,測試用例先后逐個執行,測試人員希望檢測到錯誤可能性大的測試用例優先執行,以更早地發現錯誤和修復錯誤,減少損失[3].測試用例優先排序是對測試用例個體進行評價并依據其重要性進行排序,最早由Wong等人在1997年提出[4],即在軟件回歸測試過程中,對原有的測試用例集,尋找滿足測試準則的最優測試用例執行序列.Elbaum 和Rothermel等人[5]在2000年給出形式化描述,并開展了一系列的實證研究.隨后提出了多種測試用例優先排序技術,包括基于測試用例覆蓋信息、基于程序修改信息、基于故障、基于需求和基于歷史等的TCP技術[6].

基于搜索的思想可以有效解決解決復雜優化問題.Li等人率先提出基于搜索的軟件回歸測試優先排序[7],進一步研究多目標TCP問題的搜索方法,并使用GPU并行技術提高算法效率[8,9].Souza等人[10]和Yu[11]等人采用基于搜索的方法,根據測試用例相似度解決TCP問題.

基于學習的方法是一種數據驅動的方法.Busjaeger等人[1]將機器學習用于測試用例優先排序,結合啟發式思想,定義了可以面向不同維度的測試用例信息表示方法,提出一種基于學習的測試優先排序通用化框架.Chen等人[12]將半監督聚類算法應用于測試用例選擇,但存在計算復雜度高等問題.強化學習是機器學習的一個重要分支,Groce等人將強化學習與ABP結合,用來對軟件API進行測試[13];Reichstaller等人將強化學習用于基于風險的互操作性測試,通過強化學習進行風險評估,進而實現測試用例生成[14].

軟件持續集成的關鍵是代碼集成到主干之前,必須通過自動化回歸測試,即每次代碼集成都需要檢測其是否引入新的缺陷,一旦有測試用例失敗,就不能集成.所以持續集成測試要求在有限的時間內完成回歸測試,并盡早發現錯誤.在面向軟件持續集成測試的研究中,Marijan等人[15]提出了面向持續集成的測試用例優先排序技術,隨后,多種優化目標和方法被提出[16,17].面對多個優化目標時,Ammar等人[18]采用改變不同優化目標的權重來進行測試用例優先排序.Strandberg等人[19]對測試用例執行時間及其相關影響因素,如故障檢測情況、上次執行的時間間隔和被測代碼的修改信息等進行分析組合,通過測試用例集優先權的分配、合并來選擇測試用例.

Spieker等人[2]在2017年首次結合強化學習解決持續集成測試優化問題,提出了一種基于強化學習的測試用例優先排序和選擇方法RETECS(reinforced test case selection).圖1顯示了RETECS方法的流程,主要包括對測試用例集進行優先級排序,然后從排序后的測試用例集中挑選子集執行(實線框是RETECS方法步驟,虛線框是與持續集成環境交互的接口).

Fig.1 Testing in CI圖1 面向持續集成的測試

RETECS方法通過強化學習在每個集成周期后對測試執行結果進行評估,根據結果對測試用例執行的優先級進行獎勵.該方法采用了3種獎勵函數:Failure Count Reward(FC獎勵)將測試序列在當前集成周期中失效的測試用例總數作為整個測試用例集的獎勵值;Test Case Failure Reward(TF獎勵)對失效的測試用例獎勵值為1,通過的測試用例獎勵值為0;Time- ranked Reward(TR獎勵)考慮到測試序列中失效的測試用例的位置.Spieker的實驗結果表明,TF獎勵所得測試序列的檢錯能力優于其他兩種獎勵函數.

2 基于測試用例歷史信息的CI強化學習獎勵

針對持續集成測試優化的強化學習方法中獎勵函數僅僅考慮當前測試用例執行信息的問題,本文首先引入測試用例在持續集成過程中的全部歷史執行信息,提出基于測試用例歷史失效次數的獎勵函數.在此基礎上,本文進一步考慮測試用例失效次數的分布信息,定義了測試用例平均歷史失效率,用來度量一個測試用例的在整個持續集成過程中發生失效的分布情況,并在此基礎上提出了基于測試用例歷史失效率的獎勵函數.

在基于強化學習的測試優化中,有兩種獎勵策略:整體獎勵與部分獎勵.整體獎勵策略對所有的測試用例進行獎勵,且獎勵值相同;而部分獎勵只對失效的測試用例進行獎勵,且獎勵值不同.整體獎勵將排序后的測試序列視為整體,但無法體現單個測試用例對檢測故障的貢獻.部分獎勵可以體現測試用例間的差異,卻容易忽略基于測試用例優先級的不同排序策略的不同作用.本文在提出兩種獎勵函數時,基于整體獎勵和部分獎勵兩種策略分別定義相應的獎勵函數.

2.1 基于測試用例歷史失效次數的獎勵

在持續集成測試的歷史過程中,失效次數越多的測試用例錯誤檢測能力越強,應該給予獎勵來提高下次執行時的優先級.現有的獎勵函數中,只考慮測試序列在當前一次集成周期中的執行失效的情況,沒有考慮到測試用例的歷史執行情況.由于持續集成中測試用例并非在每次集成都被執行,而測試用例未執行時信息難獲取,因此本文關注集成過程中測試用例被執行的信息.本文使用一個元組來表示測試用例的歷史執行結果(historical result,簡稱HR),用i表示集成周期數,對測試用例t,HRi(t)=[rn,…,r2,r1]表示t在第i次集成為止,n次執行的結果,rn等于0表示t在第n次執行的結果為通過,rn等于1表示t在第n次執行的結果為失效.需要注意的是,一個測試用例不一定會在每次集成中都被執行,所以n和i并不一定相等.

本文提出了基于歷史執行失效次數的獎勵函數,定義如下.

定義1(基于測試用例歷史執行失效次數的獎勵(historical failure count reward,簡稱HFC獎勵)).

· HFC整體獎勵函數:

· HFC部分獎勵函數:

其中,fail表示測試用例失效;表示[rn,…,r2,r1]元組中1的個數,即測試用例t在第i次集成時,歷史執行過程中失效的總次數.歷史執行失效次數獎勵不僅包含當前集成周期的執行結果,還包含歷史執行結果.整個持續集成測試過程中,失效總次數越多的測試用例將得到更大的獎勵值.基于不同的獎勵策略,我們分別定義了獎勵函數.公式(1)中采用整體獎勵,對當前序列中所有測試用例都進行獎勵;公式(2)中采用部分獎勵,僅對失效的測試用例進行獎勵.

2.2 基于測試用例平均歷史失效率的獎勵

在集成測試中,除了測試用例歷史執行中的失效總次數可以評估其錯誤檢測能力,失效發生次序也非常重要.例如在30次集成的測試中,兩個測試用例同樣在10次集成中失效了,但一個測試用例是在最初的10次集成中失效,另一個是在臨近的10次集成中失效.比較兩者,臨近10次失效的測試用例在下一次集成中發現錯誤的可能性更高,應該具有更高的優先級.

考慮到測試用例在歷史執行中失效的分布問題,本文提出一個新的衡量指標:測試用例平均歷史執行失效率(average percentage of historical failure,簡稱APHF),其計算公式定義如下.

定義2(測試用例平均歷史執行失效率(average percentage of historical failure,簡稱APHF)).

其中,i表示第i次集成,n表示測試用例t的歷史執行次數,m表示測試用例t在n次執行的失效總次數,Rj表示測試用例最近第j次失效在歷史執行的倒數次序,APHF∈(0,1).APHF值越高,表示測試用例在臨近的歷史執行中失效概率越大,則越可能在下一次執行中檢測出錯誤.

假設測試用例t1與t2歷史執行次數均為n,其歷史執行信息分別表示為[1,0,…,0],[0,…,0,1].可以看出,t1與t2的歷史總失效次數均為1,t1在最近一次執行中失效,t2在第一次執行中失效.很可能是由于t2第1次執行檢測出的bug已經被修復,且在最近幾次集成中t2沒有檢測出bug,而t1在最近一次執行中檢測出bug,時效性更強,那么t1在下一次集成中檢測出錯誤的概率更大,如下所示.

因此,集成周期數趨近正無窮時,測試分布如t1與t2的APHF差值趨近于1,即APHF最大值.由此可見,集成周期數越多,測試用例執行次數越多,其歷史失效分布對檢測錯誤能力的影響越大.基于此,我們提出測試用例平均歷史執行失效率獎勵,定義如下.

定義3(平均歷史執行失效率獎勵(average percentage of historical failure reward,簡稱APHF獎勵)).

· APHF整體獎勵函數:

· APHF部分獎勵函數:

其中,APHFi(t)指測試用例t到第i次集成為止的平均歷史執行失效率.同樣地,針對不同的獎勵策略,提出APHF整體獎勵與部分獎勵兩種獎勵函數:公式(4)中采用整體獎勵,對當前序列中所有測試用例都進行獎勵;公式(5)中采用部分獎勵,僅對當前序列中失效的測試用例進行獎勵.平均歷史執行失效率獎勵不僅包含測試用例歷史執行的結果信息,還體現了歷史執行過程中失效的分布,使得最近失效的測試用例能獲得更大的獎勵值.

本文所提出的基于測試用例歷史執行信息的獎勵函數主要有兩個優點.

(1) HFC包含測試用例的歷史執行結果信息,而不僅僅是當前一次集成的執行結果.在基于歷史的測試用例優先排序技術中,我們認為,如果測試用例在過去檢測出錯誤,則其更易在下次測試中執行到有缺陷的代碼.而缺陷預測相關研究表明:在過去有錯誤的代碼很可能再次出錯,尤其是這部分代碼被修改的情況[20,21].因此,考慮測試用例的歷史執行結果而非僅僅是當前一次執行的結果是非常必要的.

(2) APHF度量了測試用例歷史失效的分布,反映了測試用例的時效性,即臨近的失效會獲得更大的度量值,更符合強化學習序貫決策的特點.

TCP問題是一個序列決策問題,除了考慮測試用例的執行結果,還應關注其失效的分布,最近出現失效的測試用例更有助于下一次的錯誤檢測.

3 實驗分析

為了驗證本文所提出基于測試用例歷史執行信息的獎勵函數的有效性,我們復現了文獻[2]中的 RETECS(implementation available at https://bitbucket.org/helges/retecs)實驗進行對比,采用 3個大型工業數據集 Paint Control、IOF/ROl、GSDTSR為測試對象.

由于持續集成測試具有較強的時限性,測試過程中不能將所有測試用例都執行,因此實驗中設置時間閾值為測試集中所有測試用例執行時間的1/2,即測試用例按照優先級降序排序,直到達到1/2總體執行時間停止執行.為了消除實驗中隨機因素對實驗結果的影響,我們將實驗重復 30次取平均值.下面首先介紹實驗所用評估指標(第3.1節)與實驗對象(第3.2節),第3.3節介紹實驗設計,第3.4節對實驗結果進行分析.

3.1 評估指標

本實驗中采用NAPFD(normalized average percentage of faults detected)作為評估指標,其計算公式如下.

1999年,Rothermel等人[17]首次提出平均錯誤檢測率(average percentage of faults detected,簡稱APFD)來衡量測試用例優先排序技術的有效性.APFD根據測試序列中失效的測試用例的序號來衡量測試序列的有效性.當TCP技術中存在測試用例選擇時,不是所有的測試用例都被執行,不是所有的錯誤都能被檢測到,而APFD假設所有的錯誤都被檢測到,因此它只適用于沒有測試用例選擇的情況.NAPFD[15]是APFD的擴展,它能反映測試套件檢測到的錯誤占所有錯誤的比例,適用于存在測試用例選擇的情況.若所有錯誤都被檢測到,NAPFD則與APFD相同(p=1).本實驗中計算NAPFD值時,我們假設每次失效對應的錯誤都是不同的.

3.2 實驗對象

為了確定本文方法在實際業界的適用性,本文使用工業數據集進行實驗:Paint Control和IOF/ROL均來自ABB Robotics Norway2,用于測試復雜工業機器人;Google Shared Dataset(GSDTSR)是谷歌開源的數據集.這些數據集中包含超過300個集成周期中的測試用例執行結果等歷史信息.表1列出了3個數據集的詳細信息,包括測試用例集大小、集成周期數等.表中執行結果數指所有測試用例在整個集成過程中被執行的總次數,而失效率表示測試用例被執行的總數中失效的比重.可以看出,Paint Control數據集規模較小,同時,測試用例失效率近1/5;IOF/ROL數據集測試用例集規模中等,但失效率更大,是3個數據集中最高的;谷歌開源數據集GSDTSR測試用例集規模最大,但失效率僅 0.25%,即在大量的測試用例中僅有少量的失效測試用例,在持續集成測試優化中,把大量測試用例中的少量失效測試用例優先執行,優化難度最大.

Table 1 Statistics of Industrial datasets表1 工業數據集信息

3.3 實驗設計

為了驗證本文提出的HFC獎勵函數和APHF獎勵函數在基于強化學習的測試用例優先排序技術中的有效性,本文針對以下4個研究問題進行實驗與分析.

· 研究問題1:包含測試用例歷史執行信息的獎勵函數是否能有效提升測試序列的檢錯能力?

· 研究問題2:測試用例歷史失效分布信息是否有助于檢測到潛在容易失效的測試用例?

· 研究問題3:整體獎勵策略是否優于部分獎勵策略?

· 研究問題4:包含歷史信息的獎勵函數在時間開銷方面是否影響持續集成測試整體的效率?

研究問題 1的目的是驗證本文提出的包含測試用例歷史完整失效信息的獎勵函數的有效性.本文提出兩種包含測試用例歷史執行信息的獎勵函數,即HFC獎勵和APHF獎勵.HFC獎勵是基于測試用例歷史執行過程中總的失效次數,APHC在此基礎上進一步考慮失效的分布.所以,為了回答研究問題 1,需要對比基于這兩種獎勵函數的強化學習方法生成的測試序列和現有方法獎勵函數生成測試序列的檢錯能力.研究問題 2是為了驗證測試用例歷史失效信息分布是否更有助于發現潛在易失效的測試用例,即對比HFC和APHF兩者的優劣.研究問題 3是為了研究整體獎勵(即對當前序列中所有的測試用例進行獎勵,且獎勵值相同)和部分獎勵(即只對當前序列中失效的測試用例進行獎勵,且獎勵值不同)兩種機制對測試用例優先排序技術結果的影響.研究問題4對比包含歷史信息與不包含歷史信息獎勵函數的時間消耗.目前,將強化學習用于 TCP的研究較少,Spieker等人[2]在2017年提出了RETECS方法,首次將強化學習與持續集成環境下的TCP相結合:強化學習過程中的狀態表示單個測試用例的元數據,包括測試用例的執行持續時間、上次執行的時間和歷史執行結果;動作表示測試用例當前集成周期中的優先級.測試用例集中所有測試用例都被賦予優先級后,依據其優先級由高到低進行排序.通過對排序后得到的測試序列進行評估,計算獎勵值并反饋給智能體,通過獎勵值來對先前的行為進行獎勵或懲罰,使智能體得以學習,從而正確地進行優先級排序.RETECS方法中包含3種獎勵函數(詳見第1節):TF獎勵、FC獎勵及TR獎勵.Spieker的實驗結果表明,TF獎勵所得測試序列的檢錯能力優于其他兩種獎勵函數.

為了進行實驗對比,本文重現了文獻[2]中最優的Test Case Failure Reward(TF獎勵,見公式(7))的實驗.

同時,實現了本文提出的基于 HFC獎勵與 APHF獎勵的強化學習算法.實驗中采用了基于神經網絡(network-based)強化學習智能體,即使用神經網絡連續地表示狀態與動作.

針對本文提出的HFC獎勵與APHF獎勵,我們分別采用兩種獎勵策略(第2.1節)對HFC整體獎勵函數(公式(1))、HFC部分獎勵函數(公式(2))、APHF整體獎勵(公式(4))、APHF部分獎勵(公式(5))進行了實驗.

3.4 實驗結果及分析

圖2是TF獎勵函數在Paint Control、IOF/ROL、GSDTSR這3個數據集上的重現實驗結果,圖中橫軸為集成周期數,縱軸為每個集成周期測試序列的NAPFD值.NAPFD值越大,表明測試序列檢測錯誤能力越強.圖中曲線為每次集成時,通過強化學習方法生成測試序列的NAPFD均值,直線為使用多項式線性擬合的結果.

Fig.2 Experimental results of TF reward圖2 TF獎勵實驗結果

圖3、圖4分別是本文提出的HFC獎勵函數和APHF獎勵函數的實驗結果,其中,圖(a)、圖(b)分別表示部分獎勵和整體獎勵.相同的,圖中橫軸與縱軸分別表示集成周期數和相應周期中測試序列的NAPFD值.

Fig.3 Experimental results of HFC reward (Continued)圖3 HFC獎勵實驗結果(續)

Fig.4 Experimental results of APHF reward圖4 APHF獎勵實驗結果

為進一步說明結果的有效性,我們計算了基于歷史的獎勵函數(圖中只包括HFC部分獎勵與APHF部分獎勵)與TF獎勵的NAPFD差值,如圖5的差值直方圖;同時,統計了本文提出的4種基于歷史信息的獎勵函數實驗結果,如圖6箱型圖所示.

Fig.5 Comparison of experimental results between TF reward and history-based reward圖5 TF獎勵與基于歷史的獎勵實驗結果比較

Fig.6 Experimental results of HFC reward and APHF reward圖6 HFC獎勵與APHF獎勵實驗結果

3.4.1 對研究問題1的分析

為了回答研究問題1,我們使用基于歷史失效次數的HFC和基于平均歷史失效率的APHF獎勵函數的強化學習方法生成了測試序列,并與使用 RETECS方法的 TF獎勵函數生成的測試序列進行檢錯能力的比較.由于TF獎勵函數是部分獎勵,因此對比實驗中只對部分獎勵策略的實驗結果進行對比.

圖3(a)及圖4(a)分別是HFC獎勵與APHF獎勵在部分獎勵方式下的實驗結果,可以看出,隨著集成周期的增長,某些情況下,獎勵函數在強化學習過程中對測試用例優先級的評定越來越正確,并最終獲得檢錯能力更高的測試序列;但有些時候,學習過程并不有效,測試序列的檢錯能力保持在初始水平甚至下降.Paint Control數據集中,使用APHF獎勵所得測試序列NAPFD值與TF獎勵大致相等,而使用HFC獎勵所得測試序列NAPFD值不到0.7,略低于APHF獎勵和TF獎勵的0.8,但差距不大.通過檢查該數據集,一些測試用例主要在集成前期失效而后期幾乎不失效,采用HFC獎勵提高此類測試用例的優先級,導致排序序列的NAPFD值下降.而APHF獎勵考慮到失效次序,因此不會受到這種情況的影響;IOF/ROL數據集中,使用 APHF獎勵所得測試序列 NAPFD值約0.5,HFC獎勵與TF獎勵均在0.3左右,APHF獎勵顯著優于其他兩者;而GSDTSR數據集中,APHF獎勵與HFC獎勵對應NAPFD值分別為0.6與0.5,TF獎勵則為0.1.

圖5顯示了3種獎勵函數在 3個數據集中的比較結果.我們對30次循環中每個集成周期的平均NAPFD值的差值進行比較,圖中差值為正表明相應的獎勵函數表現優于TF獎勵函數,差值為為負說明TF獎勵函數表現優于被比較的獎勵函數.從圖中可以看出,在PaintControl數據集上,HFC獎勵表現不如TF獎勵,但APHF獎勵與TF獎勵大致相同;而在IOF/ROL與GSDTSR數據集上,HFC獎勵與APHF獎勵明顯優于TF獎勵,與前面分析相符.

綜合以上實驗結果,APHF獎勵在3個數據集上表現均優于TF獎勵;針對HFC獎勵,除了Paint Control數據集中HFC獎勵表現差于TF獎勵,其他兩個數據集中HFC獎勵也均優于TF獎勵.總的來說,包含歷史信息的獎勵函數明顯優于不包含歷史信息的獎勵函數,尤其是對于規模最大但失效率僅為 0.25%的谷歌 GSDTSR數據集,測試用例的 NAPFD值提高近 6倍,說明即使在失效信息少的情況下,基于歷史信息也能學習出檢錯能力較高的測試序列,進一步驗證了歷史失效信息對測試用例優先排序技術的有效性.

3.4.2 對研究問題2的分析

研究問題2的目的是驗證測試用例歷史失效分布信息有助于發現潛在易失效的測試用例,即對比HFC和APHF兩者的優劣.圖3(a)與圖4(a)分別是HFC獎勵與APHF獎勵在部分獎勵方式下的實驗結果,從圖中可以看出,采用部分獎勵機制時,在 3個數據集中,APHF獎勵所得測試序列的 NAPFD值均高于 HFC獎勵,NAPFD值最多提高了0.2(IOF/ROL數據集).在GSDTSR數據集上提高效果不顯著,可能是由其測試用例失效率低,所含失效分布信息少導致.

圖3(b)和圖4(b)分別是HFC獎勵與APHF獎勵在整體獎勵方式下的實驗結果,由圖可知,采用整體獎勵機制時,APHF獎勵所得測試序列的NAPFD值明顯高于HFC獎勵:PaintControl數據集上,NAPFD值由0.4提高至0.7,GSDTSR數據集上由不到0.5提升至0.85.

從圖6,即HFC獎勵與APHF獎勵的箱型圖中也可以看出,在3個數據集上,采用同種獎勵機制時,APHF獎勵均優于HFC獎勵;而在GSDTSR數據集上,APHF整體獎勵較HFC整體獎勵提高效果尤為明顯.

因此可以得出:包含測試用例歷史失效分布信息的獎勵函數所得測試序列檢錯能力強于不包含失效分布信息的獎勵函數,證明了測試用例歷史執行失效分布有助于發現潛在易失效的測試用例.

3.4.3 對研究問題3的分析

研究問題3分析兩種獎勵策略的優劣.

圖3(a)、圖3(b)分別是 HFC部分獎勵函數與整體獎勵函數在 3個數據集上的實驗結果.對于 HFC獎勵,總體來說,部分獎勵的結果在3個數據集上均明顯優于整體獎勵.而圖6中,GSDTSR數據集上HFC部分獎勵的NAPFD雖然略高于整體獎勵,但離群點較多,且圖3(b)中斜率為負,說明 HFC部分獎勵表現并不好.通過分析,HFC是基于測試用例歷史失效總次數的獎勵,部分獎勵可以加大當前集成周期中失效測試用例的獎勵力度,NAPFD值有明顯提升,而整體獎勵針對當前序列中所有的測試用例都進行獎勵,縮小了當前失效測試用例與通過測試用例的差距,反而使結果更差.因此針對HFC獎勵函數,部分獎勵策略更有效.

圖4(a)、圖4(b)分別是APHF部分獎勵函數與整體獎勵函數在3個數據集上的實驗結果.綜合分析圖4與圖6可知,對于APHF獎勵,在前兩個數據集上兩種獎勵策略結果近似,但部分獎勵機制略優于整體獎勵,說明部分獎勵可以增大近期失效的測試用例所得獎勵.而在谷歌開源數據集GSDTSR上,整體獎勵機制明顯優于部分獎勵.綜合分析GSDTSR數據集中測試用例失效率很低,關于失效分布的歷史信息較少,因此采用部分獎勵時進一步損失了歷史失效信息,導致每個測試用例都難以得到獎勵;相反,整體獎勵避免了歷史失效信息的損失,反而能增大測試用例得到的獎勵,因此,整體獎勵適用于失效率較低的測試集.

總的來說,不同的獎勵函數適用的獎勵策略不同,同時還可能受到測試集中測試用例失效信息的影響.

3.4.4 對研究問題4的分析

研究問題4主要分析不同獎勵的函數的時間消耗是否會影響持續集成測試整體效率.基于強化學習的TCP過程可大致包括通過獎勵函數計算測試用例執行優先級并基于優先級進行排序,排序過程采用貪心策略,對總時間影響不大,因此,本實驗統計一次集成的總時間進行比較,結果見表2.可以看出,包含歷史的獎勵函數由于增加了歷史信息的計算,時間消耗多于不包含歷史的獎勵策略.其中,HFC獎勵時間消耗比 TF獎勵增加約1s,APHF增加約1.5s.而整體獎勵策略由于計算量多于部分獎勵策略,因此時間消耗也略有增加.

Table 2 Time consumption for different reward functions (s)表2 不同獎勵函數的時間消耗 (s)

總的來說,包含歷史信息的獎勵函數時間開銷增大但都在秒級,最長時間不超過 3s.同時,由于錯誤檢測率有明顯提高,對于一個工業程序,在秒級內的時間開銷增長是可接受的.

4 結論與展望

本文針對持續集成測試優化的強化學習方法,從獎勵函數設計和獎勵策略兩方面研究強化學習的獎勵機制,提出了包含測試用例歷史執行信息的獎勵函數,用于基于強化學習的持續集成測試優化.基于測試用例歷史執行信息,考慮到其歷史失效分布對排序結果的影響,定義了平均歷史執行失效率,并提出了兩種獎勵函數——基于測試用例歷史執行失效次數獎勵與基于測試用例平均歷史執行失效率獎勵.HFC獎勵與 APHF獎勵不僅包含測試用例當前執行結果,還包括其歷史執行結果,APHF考慮了測試用例歷史失效的分布因素.在 3個大型工業數據集上進行對比實驗,結果表明:(1) 相對于不含歷史信息的獎勵函數,使用包含測試用例歷史失效信息的獎勵函數,所得測試序列的檢錯能力得到明顯提高;(2) 測試用例歷史失效分布信息有助于發現潛在易失效的測試用例;(3) 整體獎勵與部分獎勵兩種獎勵策略受到被測程序的多種因素影響,需要根據實際情況具體選擇;(4) 包含歷史信息的獎勵函數時間消耗有所增加,但對于都在秒級,不會對持續集成測試效率造成很大影響.

在未來工作中,可以考慮:(1) 基于強化學習的多目標的測試用例優先排序技術;(2) 使用測試用例的其他信息,如覆蓋信息、修改信息、相似度信息等;(3) 結合大規模神經網絡與深度學習方法,對強化學習的智能體進行優化.

猜你喜歡
排序歷史實驗
記一次有趣的實驗
排序不等式
恐怖排序
做個怪怪長實驗
節日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
新歷史
全體育(2016年4期)2016-11-02 18:57:28
NO與NO2相互轉化實驗的改進
實踐十號上的19項實驗
太空探索(2016年5期)2016-07-12 15:17:55
歷史上的6月
主站蜘蛛池模板: 亚洲欧美日韩成人在线| 成人午夜在线播放| 99人体免费视频| 国产嫖妓91东北老熟女久久一| 亚洲欧洲一区二区三区| 在线日韩一区二区| 日韩精品高清自在线| 亚洲欧美一级一级a| 色妞www精品视频一级下载| 亚洲精品无码专区在线观看| 国产成人三级在线观看视频| 欧美精品aⅴ在线视频| 自拍欧美亚洲| 亚洲av中文无码乱人伦在线r| 国产又粗又爽视频| 又爽又大又光又色的午夜视频| 国产剧情一区二区| 91精品国产自产91精品资源| 国产黑丝一区| 国产性爱网站| 久久频这里精品99香蕉久网址| 中文字幕无码中文字幕有码在线| 在线免费不卡视频| 亚洲伦理一区二区| 精品三级在线| 亚洲成a人在线播放www| 亚洲中文制服丝袜欧美精品| 亚洲第一精品福利| 麻豆精品国产自产在线| 亚洲热线99精品视频| 精品无码专区亚洲| 亚洲精品无码久久毛片波多野吉| 午夜视频免费一区二区在线看| 日韩无码视频播放| 亚洲色图在线观看| 成人福利在线看| 97精品伊人久久大香线蕉| 精品99在线观看| 中字无码av在线电影| 国产精品嫩草影院视频| 国产人成网线在线播放va| 亚洲成a人片77777在线播放| 无码啪啪精品天堂浪潮av| 国产精彩视频在线观看| 久久国语对白| 91高清在线视频| 草草影院国产第一页| 欧美性天天| 久久人妻xunleige无码| 无码有码中文字幕| 欧美综合在线观看| 日韩在线中文| 一级毛片免费不卡在线视频| 亚洲天堂久久| 亚洲欧美在线综合图区| 国产精品无码久久久久久| 五月婷婷精品| 激情乱人伦| 久久精品娱乐亚洲领先| 伊人91在线| 国产一区亚洲一区| 欧美一级黄色影院| 国产不卡在线看| 国产成人AV大片大片在线播放 | 国产精品不卡永久免费| 欧美 国产 人人视频| 免费一极毛片| yjizz国产在线视频网| 91偷拍一区| 国产精品福利一区二区久久| 一本一道波多野结衣av黑人在线| jizz在线免费播放| 天堂网亚洲系列亚洲系列| 人人澡人人爽欧美一区| 国产三级毛片| 在线a视频免费观看| 亚洲人成人无码www| 国产va免费精品观看| 五月天香蕉视频国产亚| 久久99精品国产麻豆宅宅| 国产精彩视频在线观看| 国产亚洲欧美日韩在线观看一区二区 |