用于軟件測試的Diff分析方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及軟件測試領(lǐng)域,具體涉及一種用于軟件測試的DifT分析方法。本申請同時提供一種用于軟件測試的DifT分析裝置。
【背景技術(shù)】
[0002]軟件測試是軟件開發(fā)過程中的一個重要組成部分,是貫穿整個軟件開發(fā)生命周期、對軟件產(chǎn)品(包括階段性產(chǎn)品)進行驗證和確認(rèn)的活動過程,其目的是盡快、盡早地發(fā)現(xiàn)在軟件產(chǎn)品中所存在的各種問題,即:與預(yù)先定義的用戶需求的不一致性。
[0003]作為貫穿整個軟件開發(fā)過程中的一個重要組成部分,軟件測試方法本身也是多種多樣的,從是否執(zhí)行程序的角度可以分為:靜態(tài)測試和動態(tài)測試;從是否針對軟件內(nèi)部結(jié)構(gòu)與算法的角度可以分為:白盒測試和黑盒測試;從測試的不同階段進可以分為:單元測試、集成測試、系統(tǒng)測試、驗收測試、回歸測試等。
[0004]其中,回歸測試是指修改了舊代碼后,重新進行測試以確認(rèn)修改沒有引入新的錯誤或?qū)е缕渌a產(chǎn)生錯誤的一種測試技術(shù)?;貧w測試作為軟件生命周期的一個組成部分,在整個軟件測試過程中占有很大的工作量比重,軟件開發(fā)的各個階段都會進行多次回歸測試,也稱為多輪迭代,在每次迭代中,都需要通過測試確認(rèn)修改沒有導(dǎo)致新的錯誤。
[0005]為了實現(xiàn)上述目的,通常的方法是在相同輸入的情況下,運行兩個版本(修改前和修改后,也稱為新舊版本)的代碼,并對輸出結(jié)果進行分析比對??紤]到被測代碼通常在各種不同的業(yè)務(wù)場景下運行,在代碼修改未影響到的業(yè)務(wù)場景下進行回歸測試時,新舊版本代碼的運行結(jié)果從理論上說應(yīng)該是相同的(沒有Diff發(fā)生,Diff是different的英文簡寫),因此現(xiàn)有技術(shù)通常針對業(yè)務(wù)場景進行回歸測試。在具體操作時,一般是隨機輸入各種業(yè)務(wù)場景的測試數(shù)據(jù),分析新舊版本輸出的結(jié)果,查看輸出結(jié)果不同(發(fā)生Diff)的情況是否發(fā)生在受代碼修改影響的業(yè)務(wù)場景中,如果不是,則說明出現(xiàn)了不符合預(yù)期的Diff結(jié)果,此時要對該DifT進行分析,定位引發(fā)該DifT的代碼片段。
[0006]上述方法不僅原理通俗、簡便易行,而且其最大的好處是回歸測試成本低,能夠比較快速地發(fā)現(xiàn)由于代碼修改、而在不應(yīng)受影響的業(yè)務(wù)場景中引入的錯誤。但是這種方法也存在一定的缺陷:如果在回歸測試中出現(xiàn)不符合預(yù)期的結(jié)果,通常只能依靠測試人員或者開發(fā)人員對代碼的了解、以及個人經(jīng)驗,對該Diff進行分析,確定引發(fā)該Diff的代碼片段的具體位置,在待測試軟件比較復(fù)雜、代碼量比較大的情況下,該定位過程通常比較耗時、耗力,從而可能影響軟件測試的進度。
【發(fā)明內(nèi)容】
[0007]本申請?zhí)峁┮环N用于軟件測試的DifT分析方法,以解決現(xiàn)有技術(shù)無法針對不符合預(yù)期的DifT結(jié)果快速定位對應(yīng)的代碼片段的問題。本申請另外提供一種用于軟件測試的Diff分析裝置。
[0008]本申請?zhí)峁┮环N用于軟件測試的Diff分析方法,包括:
[0009]獲取在特定測試數(shù)據(jù)下運行原始代碼的代碼覆蓋信息,作為原始覆蓋信息;所述特定測試數(shù)據(jù)是指,使所述原始代碼和修改后代碼在運行時產(chǎn)生不符合預(yù)期的不同運行結(jié)果的測試數(shù)據(jù);
[0010]獲取在所述特定測試數(shù)據(jù)下運行所述修改后代碼的代碼覆蓋信息,作為修改后覆蓋/[目息;
[0011]解析并比對所述原始覆蓋信息和所述修改后覆蓋信息,以查找覆蓋情況不同的代碼片段。
[0012]可選的,所述代碼覆蓋包括:語句覆蓋、分支覆蓋、條件覆蓋、路徑覆蓋、或函數(shù)覆至
JHL O
[0013]可選的,所述代碼覆蓋為分支覆蓋時,所述獲取在特定測試數(shù)據(jù)下運行原始代碼的代碼覆蓋信息具體是使用代碼分支分析-標(biāo)記器獲取所述信息,包括:
[0014]設(shè)置在編譯代碼的過程中保存代碼分支信息的編譯選項;
[0015]編譯所述原始代碼,并獲取所述代碼分支分析-標(biāo)記器生成的、與所述原始代碼對應(yīng)的代碼分支覆蓋文件;
[0016]以所述特定測試數(shù)據(jù)為輸入,運行所述原始代碼對應(yīng)的可執(zhí)行程序,所述代碼分支分析-標(biāo)記器在所述代碼分支覆蓋文件或者與其相關(guān)的文件中標(biāo)記的本次運行覆蓋過的代碼分支信息,即為所述原始覆蓋信息。
[0017]可選的,獲取在特定測試數(shù)據(jù)下運行所述修改后代碼的代碼覆蓋信息是指:使用與上述獲取原始覆蓋信息相同的代碼分支分析-標(biāo)記器獲取所述信息,包括:
[0018]設(shè)置在編譯代碼的過程中保存代碼分支信息的編譯選項;
[0019]編譯所述修改后代碼,并獲取所述代碼分支分析-標(biāo)記器生成的、與所述修改后代碼對應(yīng)的代碼分支覆蓋文件;
[0020]以所述特定測試數(shù)據(jù)為輸入,運行所述修改后代碼對應(yīng)的可執(zhí)行程序,所述代碼分支分析-標(biāo)記器在所述代碼分支覆蓋文件或者與其相關(guān)的文件中標(biāo)記的本次運行覆蓋過的代碼分支信息,即為所述修改后覆蓋信息。
[0021]可選的,所述代碼分支分析-標(biāo)記器包括:BullseyeCoverage工具軟件、或者gcov工具軟件。
[0022]可選的,所述代碼分支分析-標(biāo)記器為BullseyeCoverage工具軟件時,所述解析并比對所述原始覆蓋信息和所述修改后覆蓋信息是指,使用BullseyeCoverage工具軟件分別解析所述原始覆蓋信息和所述修改后覆蓋信息,并將該工具軟件解析后的輸出結(jié)果進行比對。
[0023]可選的,所述覆蓋情況不同的代碼片段是指,在上述進行比對的兩個輸出結(jié)果中,如果針對相同的分支判定代碼標(biāo)記的分支執(zhí)行情況不一致,則所述分支判定代碼及對應(yīng)的代碼分支即為所述覆蓋情況不同的代碼片段。
[0024]可選的,所述代碼分支分析-標(biāo)記器為gcov工具軟件時,所述解析并比對所述原始覆蓋信息和所述修改后覆蓋信息包括:
[0025]采用gcov工具軟件的擴展工具軟件Icov,分別解析所述原始覆蓋信息和所述修改后覆蓋信息;
[0026]采用Icov工具軟件自帶的genhtml工具軟件對上述解析結(jié)果分別進行處理,生成相應(yīng)的網(wǎng)頁格式的報告;
[0027]對上述網(wǎng)頁格式的報告中標(biāo)記的代碼分支執(zhí)行情況進行比對。
[0028]可選的,所述覆蓋情況不同的代碼片段是指,在上述進行比對的兩個網(wǎng)頁格式的報告中,如果針對相同的分支判定代碼標(biāo)記的分支執(zhí)行情況不一致,則所述分支判定代碼及對應(yīng)的代碼分支即為所述覆蓋情況不同的代碼片段。
[0029]相應(yīng)的,本申請還提供一種用于軟件測試的DifT分析裝置,包括:
[0030]原始覆蓋信息獲取單元,用于獲取在特定測試數(shù)據(jù)下運行原始代碼的代碼覆蓋信息,作為原始覆蓋信息;
[0031]修改后覆蓋信息獲取單元,用于獲取在所述特定測試數(shù)據(jù)下運行修改后代碼的代碼覆蓋信息,作為修改后覆蓋信息;
[0032]覆蓋信息解析比對單元,用于解析并比對所述原始覆蓋信息和所述修改后覆蓋信息,以查找覆蓋情況不同的代碼片段。
[0033]可選的,所述代碼覆蓋為分支覆蓋時,所述原始覆蓋信息獲取單元具體用于,使用代碼分支分析-標(biāo)記器獲取在特定測試數(shù)據(jù)下運行原始代碼的代碼覆蓋信息;
[0034]所述原始覆蓋信息獲取單元包括:
[0035]編譯選項設(shè)置子單元,用于設(shè)置在編譯代碼的過程中保存代碼分支信息的編譯選項;
[0036]第一分支覆蓋文件生成子單元,用于編譯所述原始代碼,并獲取所述代碼分支分析-標(biāo)記器生成的、與所述原始代碼對應(yīng)的代碼分支覆蓋文件;
[0037]原始覆蓋信息獲取子單元,用于以所述特定測試數(shù)據(jù)為輸入,運行所述原始代碼對應(yīng)的可執(zhí)行程序,所述代碼分支分析-標(biāo)記器在所述代碼分支覆蓋文件或者與其相關(guān)的文件中標(biāo)記的本次運行覆蓋過的代碼分支信息,即為所述原始覆蓋信息。
[0038]可選的,所述修改后覆蓋信息獲取單元具體用于,使用所述原始覆蓋信息獲取單元所采用的代碼分支分析-標(biāo)記器獲取在特定測試數(shù)據(jù)下運行修改后代碼的代碼覆蓋信息;
[0039]所述修改后覆蓋信息獲取單元包括:
[0040]編譯選項設(shè)置子單元,用于設(shè)置在編譯代碼的過程中保存代碼分支信息的編譯選項;
[0041]第二分支覆蓋文件生成子單元,用于編譯所述修改后代碼,并獲取所述代碼分支分析-標(biāo)記器生成的、與所述修改后代碼對應(yīng)的代碼分支覆蓋文件;
[0042]修改后覆蓋信息獲取子單元,用于以所述特定測試數(shù)據(jù)為輸入,運行所述修改后代碼對應(yīng)的可執(zhí)行程序,所述代碼分支分析-標(biāo)記器在所述代碼分支覆蓋文件或者與其相關(guān)的文件中標(biāo)記的本次運行覆蓋過的代碼分支信息,即為所述修改后覆蓋信息。
[0043]可選的,所述原始覆蓋信息獲取單元和所述修改后覆蓋信息獲取單元所使用的所述代碼分支分析-標(biāo)記器包括=BullseyeCoverage工具軟件、或者gcov工具軟件。
[0044]可選的,所述原始覆蓋信息獲取單元和所述修改后覆蓋信息獲取單元使用的代碼分支分析-標(biāo)記器為BullseyeCoverage工具軟件時,所述覆蓋信息解析比對單元具體用于,使用BullseyeCoverage工具軟件分別解析所述原始覆蓋信息和所述修改后覆蓋信息,并將該工具軟件解析后的輸出結(jié)果進行比對。
[0045]可選的,所述覆蓋信息解析比對單元通過比對查