張瑛
【摘要】隨著測試的發(fā)展,這個領(lǐng)域產(chǎn)生了兩個大的趨勢。趨勢一,智能化。傳統(tǒng)的自動化方法:首先轉(zhuǎn)自動化測試代碼的過程費時費力,并且在測試執(zhí)行過程中,需要反復(fù)的人工干預(yù)。趨勢二,小規(guī)模測試替代大規(guī)模測試。測試規(guī)模越來越小,測試活動對發(fā)現(xiàn)bug的有效性越來越高;在傳統(tǒng)的方式下,全體測試用例執(zhí)行的方法,逐步的為針對代碼變動而開展的小型測試活動所代替。本文的主要工作是:提出對于回歸測試,使用機器挑選的方法。
【關(guān)鍵詞】機器學(xué)習(xí);回歸測試;測試用例
1.引言
機器學(xué)習(xí)(Machine Learning, ML)是一門交叉型學(xué)科,它涉及到了多個領(lǐng)域,包括:概率與統(tǒng)計學(xué)、高等數(shù)學(xué)、逼近和凸分析等。機器學(xué)習(xí)人類的學(xué)習(xí)過程和學(xué)習(xí)行為,并且加以計算機的模擬或?qū)崿F(xiàn)。在機器學(xué)習(xí)過程中,機器本身了獲取新的知識或技能。
在機器學(xué)習(xí)和人工智能的壯大發(fā)展的時代背景,對傳統(tǒng)的測試工作提出了一些新的挑戰(zhàn)。研究通過機器學(xué)習(xí)的方法,提升傳統(tǒng)的測試工作的效率,進一步的提高整個軟件開發(fā)活動的勞動生產(chǎn)率。
2.軟件測試工程的研究綜述
軟件測試是用于分析是否程序出現(xiàn)錯誤的過程,測試使用人工操作或者軟件自動運行的方式。每個不同的軟件有對自身錯誤的定義方式:通常是軟件需求規(guī)格中定義了預(yù)期結(jié)果。
軟件測試分類
1、從是否要變異/執(zhí)行被測試軟件分類,分為靜態(tài)測試和動態(tài)測試。如基于代碼審查的單元測試,以及相關(guān)代碼審查工具,都屬于靜態(tài)測試的范疇。
2、從是否要針對軟件結(jié)構(gòu)、算法進行覆蓋分類,分為白盒測試和黑盒測試。
3、從測試活動在軟件開發(fā)過程中所處的不同階段分類,分為單元測試、集成測試、系統(tǒng)測試、驗收測試。
我們這里討論的“回歸測試”是屬于系統(tǒng)測試的最后一個階段。
在修改了舊代碼后,需要對這部分子都進行測試,以確保這個代碼修訂沒產(chǎn)生新的錯誤。在大多數(shù)情況下,回歸測試占測試周期和測試自由的50%。因此,如果能夠制定更有效的回歸測試用例,將極大的提升整個測試的效率。
回歸測試的流程如下:
(1)找出程序中因為新增需求或者故障解決,而被修改的代碼
(2)從總的用例庫中,去除掉不再合適的測試用例:這部分用例可能是修改沒涉及的功能,也可能是一些系統(tǒng)性穩(wěn)定性的低優(yōu)先級的測試用例
(3)針對修改的影響部分,增加一部分相關(guān)模塊的測試用例
(4)搜索出最基本的測試用例,納入到測試計劃:這部分測試用例保證軟件不出現(xiàn)意外的基本功能錯誤
(5)用上述2~4的測試用例集合,形成回歸測試的測試范圍
3.現(xiàn)有回歸測試用例選擇方法
對于一個軟件開發(fā)項目來說,項目的測試組在實施測試的過程中會將所開發(fā)的測試用例保存到“測試用例庫”中,并對其進行維護和管理。當(dāng)?shù)玫揭粋€軟件的基線版本時,用于基線版本測試的所有測試用例就形成了基線測試用例庫。在需要進行回歸測試的時候,就可以根據(jù)所選擇的回歸測試策略,從基線測試用例庫中提取合適的測試用例組成回歸測試包,通過運行回歸測試包來實現(xiàn)回歸測試。保存在基線測試用例庫中的測試用例可能是自動測試腳本,也有可能是測試用例的手工實現(xiàn)過程。
針對修改部分的測試是我們希望改進的內(nèi)容
當(dāng)前是優(yōu)秀的高級工程師逐一的查看開發(fā)提交的各個修改點,根據(jù)自己對相關(guān)部分的理解,以及對開發(fā)修改點的學(xué)習(xí)。整理出需要回歸的測試點:這種方法的主要問題是:
需要優(yōu)秀的工程師參與,這位工程師必須同時具備:既了解測試組的全部測試用例庫,也需要能夠理解開發(fā)提供的修訂說明。
每一輪測試完成后,就需要人工干預(yù),從而產(chǎn)生下一輪的測試用例
替代人工的方法是,為每一輪測試,執(zhí)行類型level 0/1/2這樣的測試用例等級。這樣同樣會帶來冗余的測試用例執(zhí)行,拉長了測試進度。
4.機器選擇測試用例的方法
用機器來模擬和替代人工的挑選測試用例:是在回歸測試中引入智能化方法的先決條件。整體按照如下的流程:
首先進行的是為每一條測試用例,生成不同的特征向量。在這個步驟中,將原始的測試用例轉(zhuǎn)變成為“記錄每個詞出現(xiàn)的頻率”的數(shù)學(xué)符號。最后生成如下表格:
其中行代表不同的測試用例,列代表不同的詞語描述,數(shù)字代表不同的詞語在不同測試用例中出現(xiàn)的詞頻。
然后,根據(jù)TFIDF算法將測試用例生成的文本特征向量,轉(zhuǎn)換成為最終的文本特征向量。
這樣,表一通過TFIDF算法最終轉(zhuǎn)化的向量表示如下:
完成了特征詞語的選擇后,就要給選出的特征詞語賦以權(quán)重。比如“測試”一詞,在每個測試用例中都有出現(xiàn),那么這個詞雖然詞頻很高:但是“權(quán)重為零”——也就是說這個詞對于描述不同測試用例的不同特征,無任何幫助。對于本研究方案而言,我們使用TF*IDF算法,計算出精確的統(tǒng)計量,以描述特征詞語對于中文內(nèi)容的重要性。
最后,將代碼變更說明收集起來,計算特征向量。同時將測試用例庫中的內(nèi)容也做成特征向量。逐個的拿代碼變更的特征向量,與用例庫中的特征向量進行對比:選出與代碼變更特征向量相識程度最高的。這個特征向量所代表的測試用例,既為下一輪回歸測試的輸入。在這個模塊中,我們選擇KNN算法,KNN算法也叫K最近鄰算法。抽取測試用例庫中的每個文本,逐一的與被測試的向量進行比較,每個比較完成后相似度被計算出來。下一步:找出K個最相似的測試用例。并在此基礎(chǔ)上給每個被選出的測試用例打分,取分值大者作為比較結(jié)果。具體計算公式為:
其中:d為待測文本(開發(fā)提交的代碼變更說明)向量,q為訓(xùn)練集中文本(原始的測試用例描述)向量。
這里給出一個具體實踐:
開發(fā)提交了一個代碼變更說明如下
最后機器推薦的相關(guān)性最緊密的四個用例,如下表:
可以看出,這四個被挑出來的點,都是對ACL重定向的測試:并且測試覆蓋了物理端口、AP端口、SVI端口三種不同的端口類型。
進一步的,對這部分的測試進行基于代碼覆蓋率的驗證,可以證明機器挑選出的四個測試用例,確實的有測試覆蓋到開發(fā)修訂的代碼。
5.結(jié)束語
讓機器來自主選擇回歸測試用例,然后將這個方法融入到自動化測試框架中。讓自動化測試框架具有一定智能,能夠“自主的產(chǎn)生回歸測試用例的變化集合”。譬如整個ACL模塊測試用例個數(shù)達到300,如果全部回歸費時費力,而人工參與分析則會打斷持續(xù)的自動化測試過程。新方法使用四個測試用例,就可以對開發(fā)修訂提交的代碼進行覆蓋;這樣一方面我們減少了回歸測試的測試用例個數(shù),另外一方面開發(fā)修訂的代碼,也被完整的測試了。
參考文獻
[1]米歇爾(Mitchell,T.M.).機器學(xué)習(xí).機械工業(yè)出版社,2008-03-01
[2]盧葦,彭雅.幾種常用文本分類算法性能比較與分析.湖南大學(xué)學(xué)報(自然科學(xué)版), 2007.
[3]JOACHIMST.A probabilistic analysis of the rocchio algorithm with TFIDF for text categorization Nashville:1997:143-151.
[4]http://zh.wikipedia.org/wiki/回歸測試.維基百科全書,internet