專利名稱:一種軟件單元與部件與相結(jié)合的源代碼變更影響分析與測試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及程序開發(fā)測試領(lǐng)域,更具體地說,本發(fā)明涉及一種源代碼變更影響分析方法,此外,本發(fā)明還涉及一種采用了該源代碼變更影響分析之后實(shí)施測試的方法。
背景技術(shù):
在現(xiàn)有系統(tǒng)源代碼基礎(chǔ)上的開發(fā)需要修改大量的軟件代碼,軟件調(diào)試工作需要隨時修改代碼,而軟件維護(hù)升級過程亦需要修改代碼,代碼變更時刻伴隨著軟件研發(fā)活動,在現(xiàn)代軟件開發(fā)過程中越來越重要。代碼的變更通常會產(chǎn)生“副作用”,可能會影響到軟件的內(nèi)外部接口、功能特性和性能等多方面的內(nèi)容,如果沒有對代碼的變更影響面進(jìn)行充分的分析與測試,可能導(dǎo)致程序運(yùn)行時出現(xiàn)異常甚至崩潰。
圈復(fù)雜度(Cyclomatic Complexity)是一種為程序邏輯復(fù)雜性提供定量測度的軟件度量,該度量的值代表了程序單元中的線性獨(dú)立路徑(Linearly Independent Path)數(shù)量,并提供了確保所有語句至少執(zhí)行一次的測試數(shù)量的上界。線性獨(dú)立路徑是指程序中至少引進(jìn)一個新的處理語句集合或一個新條件的任一路徑。采用流圖(與流程圖不同,流圖只有邊和節(jié)點(diǎn)表示,用于圈復(fù)雜度的計(jì)算和獨(dú)立路徑的創(chuàng)建)的描述時,線性獨(dú)立路徑必須至少包含一條在定義路徑之前不曾用到的邊。線性獨(dú)立路徑集合代表了一個測試路徑(TestPath)的集合,按照線性獨(dú)立路徑進(jìn)行的測試是一種高強(qiáng)度的白盒測試。在對代碼局部修改后,可能影響代碼的范圍包括程序單元內(nèi)部和程序單元之間。在程序單元內(nèi)部,如果代碼的修改導(dǎo)致了程序控制流的變化,則影響的范圍較大,甚至需要進(jìn)行所有的獨(dú)立路徑的測試;如果代碼的修改未導(dǎo)致程序控制流的變化,則影響的范圍較小,沒有必要對所有的獨(dú)立路徑進(jìn)行測試,由此需要有一種方法排除沒有受到影響的路徑。代碼的修改除了影響代碼所在的單元本身,還會影響到該單元所屬部件的其他程序單元。這時候的變更影響分析可以用該程序部件的集成子樹(Integration Subtree)來實(shí)現(xiàn)。集成子樹是程序中圈復(fù)雜度流程圖的線性獨(dú)立集成路徑,通過對集成子樹中的測試路徑進(jìn)行測試,可以不用測試單元的其它控制邏輯來測試單元的相互作用。在對部件的測試中同樣需要有一種方法排除沒有受到影響的集成子樹。現(xiàn)行源代碼變更影響分析與測試主要依賴編碼人員憑經(jīng)驗(yàn)進(jìn)行人工分析,未利用圈復(fù)雜度、線性獨(dú)立路徑和集成子樹等手段來確定變更的影響面,更沒有將此應(yīng)用到白盒測試過程中。除了人工分析,也有關(guān)于面向?qū)ο蟠a變更影響分析的研究,主要基于類成員依賴關(guān)系確定變更影響源和變更類型,依據(jù)一定的算法確定變更影響的范圍。對代碼變更進(jìn)行影響分析與測試有很大的難度,目前缺乏系統(tǒng)的方法進(jìn)行指導(dǎo)。傳統(tǒng)的變更影響分析與測試方法依賴于編碼人員的經(jīng)驗(yàn)和對代碼的熟悉程度,人工分析受變更影響的代碼塊或執(zhí)行路徑,難以對變更的影響面進(jìn)行全面評估,也難以對代碼進(jìn)行充分的測試。依賴經(jīng)驗(yàn)進(jìn)行的分析方法的效果與編碼調(diào)試人員的個人能力相關(guān),具有較大的隨機(jī)性和盲目性,并且無自動化工具支持,效率低下,不能提供具有系統(tǒng)性的解決方案。而關(guān)于面向?qū)ο蟠a變更影響分析的研究,分析的目標(biāo)是類,局限于面向?qū)ο蟮拇a,不能對非面向?qū)ο蟠a進(jìn)行變更影響分析,并且該方法未對變更影響分析之后的測試流程及方法進(jìn)行說明。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)中存在上述缺陷,提供軟件部件與單元相結(jié)合的源代碼變更影響分析與測試方法。
本發(fā)明提供了一種源代碼變更影響分析與測試方法,其包括單元級源代碼變更影響分析和測試部分、以及部件級源代碼變更影響分析和測試部分。優(yōu)選地,所述單元級源代碼變更影響分析和測試部分包括第一步構(gòu)造程序單元的流圖,所述流圖使用節(jié)點(diǎn)和邊描述邏輯控制流;第二步創(chuàng)建線性獨(dú)立的測試路徑集;第三步查找修改的代碼在流圖中的節(jié)點(diǎn),并將其確定為變更點(diǎn);第四步使用路徑選擇器在線性獨(dú)立測試路徑集中選取包含了變更點(diǎn)的路徑,以形成受影響路徑集;第五步執(zhí)行受影響路徑集中的路徑;第六步將執(zhí)行的結(jié)果和預(yù)期的結(jié)果進(jìn)行比較。優(yōu)選地,所述部件級源代碼變更影響分析和測試部分包括第一步驟構(gòu)造程序的調(diào)用圖,所述調(diào)用圖使用節(jié)點(diǎn)和邊描述程序的調(diào)用結(jié)構(gòu),節(jié)點(diǎn)代表程序的單元,邊表示調(diào)用關(guān)系;第二步驟創(chuàng)建線性獨(dú)立的測試子樹集;第三步驟確定修改的代碼所在的單元,作為變更點(diǎn);第四步驟使用子樹選擇器在線性獨(dú)立測試子樹集中選取包含了變更點(diǎn)的子樹形成受影響子樹集;第五步驟執(zhí)行受影響子樹集中的子樹;第六步驟將執(zhí)行的結(jié)果和預(yù)期的結(jié)果進(jìn)行比較。優(yōu)選地,在所述第六步中,在執(zhí)行的結(jié)果和預(yù)期的結(jié)果一致時,則判斷程序的修改是正確的。優(yōu)選地,在所述第一步中,對代碼的控制流分析,此后按照控制流的構(gòu)造規(guī)則確定程序中流圖的節(jié)點(diǎn),然后根據(jù)程序中的控制條件將所述節(jié)點(diǎn)用邊連接起來,從而構(gòu)成程序的流圖。優(yōu)選地,在所述第四步中,路徑選擇器對于所有的變更點(diǎn),在線性獨(dú)立測試路徑集中,檢查每條路徑的節(jié)點(diǎn)集,如果包含變更點(diǎn),則將該路徑添加到受影響路徑集中。優(yōu)選地,在第六步驟中,如果執(zhí)行的結(jié)果和預(yù)期的結(jié)果一致,則判斷程序的修改是正確的。優(yōu)選地,在所述第四步驟中,子樹選擇器對于所有的變更點(diǎn),在線性獨(dú)立集成子樹集中,檢查每個子樹的節(jié)點(diǎn)集,如果包含變更點(diǎn),則將該子樹添加到受影響子樹集中。優(yōu)選地,在所述第五步驟中,首先創(chuàng)建一個端到端的測試條件列表,從測試條件列表中選擇數(shù)據(jù)以便在測試每個子樹時設(shè)置判定節(jié)點(diǎn)的條件。
本發(fā)明的源代碼變更影響分析與測試方法相對于傳統(tǒng)的憑經(jīng)驗(yàn)分析源代碼變更影響面并實(shí)施測試的方法,具有較強(qiáng)的系統(tǒng)性。本發(fā)明的源代碼變更影響分析與測試方法能確定部件和/或單元級的代碼變更的影響范圍,不會遺漏測試路徑和集成子樹。對于軟件單元,構(gòu)造測試路徑選擇器獲取到變更代碼的有效測試路徑集,排除無效測試路徑;對于軟件部件,構(gòu)造集成子樹選擇器獲取到變更代碼的有效集成子樹集,排除無效集成子樹,提高白盒測試效率。而且,本發(fā)明的源代碼變更影響分析與測試方法可以避免設(shè)計(jì)多余的、重復(fù)的測試用例。因?yàn)闇y試的范圍縮小到了包含變更點(diǎn)測試路徑或者測試子樹,所以測試工作所需要的代價可以控制在一個合理的范圍內(nèi),使用最少的測試用例來完成變更后的代碼的測試,同時又能保證所有受影響的代碼都能夠被測試到,包括單元內(nèi)部和單元之間的代碼,從而達(dá)到變更后的代碼測試覆蓋率的最大化。本發(fā)明的方法所述源代碼不限于面向?qū)ο蟮能浖a,也能對非面向?qū)ο筌浖a進(jìn)行變更影響分析,具有通用性。
結(jié)合附圖,并通過參考下面的詳細(xì)描述,將會更容易地對本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點(diǎn)和特征,其中圖I示意性地示出了根據(jù)本發(fā)明實(shí)施例的源代碼變更影響分析與測試方法的流程圖。圖2示意性地示出了根據(jù)本發(fā)明實(shí)施例的流圖的示例。圖3示意性地示出了根據(jù)本發(fā)明實(shí)施例的線性獨(dú)立測試路徑的示例。圖4示意性地示出了根據(jù)本發(fā)明實(shí)施例的測試子樹集的示例。圖5示意性地示出了根據(jù)本發(fā)明實(shí)施例的測試子樹集的示例。需要說明的是,附圖用于說明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類似的元件標(biāo)有相同或者類似的標(biāo)號。
具體實(shí)施例方式為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例和附圖對本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。圖I示意性地示出了根據(jù)本發(fā)明實(shí)施例的源代碼變更影響分析與測試方法的流程圖。如圖I所示,本發(fā)明實(shí)施例提出了軟件部件與單元相結(jié)合的代碼變更影響分析的系統(tǒng)方法,從測試路徑和集成子樹的角度闡述了代碼變更的影響面分析與測試流程。該方法的順序是先進(jìn)行單元的代碼變更影響分析與測試,當(dāng)所有單元分析與測試工作完成后再進(jìn)行部件的代碼變更影響分析與測試。通過該方法可以獲取到針對變更代碼的有效測試路徑集,排除無效測試路徑集。具體地說,如圖I所示,本發(fā)明實(shí)施例的源代碼變更影響分析與測試方法包括
(I)單元級源代碼變更影響分析和測試(S10),以及(2)部件級源代碼變更影響分析和測試(S20)。<單元級源代碼變更影響分析和測試S10>
在進(jìn)行單元內(nèi)部的變更影響分析時,需確定程序的變更點(diǎn),然后在已經(jīng)創(chuàng)建的線性獨(dú)立路徑集合中進(jìn)行查找,獲取那些包含該變更點(diǎn)的線性獨(dú)立測試路徑,然后強(qiáng)制執(zhí)行這些受影響的路徑。在進(jìn)行部件內(nèi)部的單元之間的變更影響分析時,不用測試單元的內(nèi)部控制邏輯來測試單元的相互作用。這種情況下的變更影響分析,先在線性獨(dú)立集成子樹中查找,獲取包含該變更點(diǎn)線性獨(dú)立集成子樹,然后強(qiáng)制執(zhí)行這些受影響的子樹。單元級的代碼變更影響分析與測試主要考慮單元內(nèi)部的影響面。其分析與測試流程是首先構(gòu)造流圖,然后創(chuàng)建線性獨(dú)立的測試路徑集、確定變更點(diǎn)、在線性獨(dú)立路徑集中選取包含了變更點(diǎn)的路徑形成受影響路徑集,最后是強(qiáng)制執(zhí)行受影響的路徑,得到測試結(jié)果并與預(yù)期結(jié)果進(jìn)行對比,如圖I所 示。為了描述的方便,如圖2所示,將流圖標(biāo)記為G,線性獨(dú)立測試路徑集為P,測試集中的每一條測試路徑為Pi (I < i < np),np為測試集中的測試路徑數(shù),變更點(diǎn)記為C,受影響的路徑集記為PI,其中的每一條測試路徑為Pii (I彡i彡npi),npi為受影響集中的測試路徑數(shù)。單元級代碼變更影響分析與測試的第一步Sll是要構(gòu)造程序單元的流圖G。流圖使用節(jié)點(diǎn)和邊描述邏輯控制流。其中,在對代碼的控制流分析后,按照控制流的構(gòu)造規(guī)則,可以確定程序中流圖的節(jié)點(diǎn),加以編號,然后根據(jù)程序中的控制條件將這些節(jié)點(diǎn)用邊連接起來,則構(gòu)成程序的流圖。第二步S12是創(chuàng)建線性獨(dú)立的測試路徑集P。流圖G的圈復(fù)雜度V (G)的值提供了線性獨(dú)立的測試路徑集的上界,并由此得出覆蓋所有程序語句和分支所需的測試設(shè)計(jì)數(shù)量的上界。通常情況下,測試路徑集P的確定比較困難,尤其是在圈復(fù)雜度比較大的時候,因?yàn)樾枰斯さ胤治鲞@些路徑是否有重復(fù)。其中,圖3示出了線性獨(dú)立測試路徑示意圖。第三步S13是確定變更點(diǎn)C。對照已經(jīng)編號的源代碼,分析其中修改的部分,查找修改的代碼在流圖G中的節(jié)點(diǎn)(即,變更點(diǎn)C)。這種變更點(diǎn)可能不止一個,在實(shí)施變更影響分析與測試時,可以對每一個變更點(diǎn)單獨(dú)進(jìn)行變更影響分析。第四步S14是使用路徑選擇器在線性獨(dú)立測試路徑集中選取包含了變更點(diǎn)的路徑,以形成受影響路徑集PI。路徑選擇器的原理是對于所有的變更點(diǎn)Ci,在線性獨(dú)立測試路徑集中,檢查每條路徑的節(jié)點(diǎn)集,如果包含變更點(diǎn)Ci,則將該路徑添加到受影響路徑集PI中。受影響路徑集PI可以表示為
η
權(quán)利要求
1.一種軟件單元與部件與相結(jié)合的源代碼變更影響分析與測試方法,其特征在于包括單元級源代碼變更影響分析和測試部分以及部件級源代碼變更影響分析和測試部分。
2.根據(jù)權(quán)利要求I所述的源代碼變更影響分析與測試方法,其特征在于,其中,所述單元級源代碼變更影響分析和測試部分包括 第一步構(gòu)造程序單元的流圖,所述流圖使用節(jié)點(diǎn)和邊描述邏輯控制流; 第二步創(chuàng)建線性獨(dú)立的測試路徑集; 第三步查找修改的代碼在流圖中的節(jié)點(diǎn),并將其確定為變更點(diǎn); 第四步使用路徑選擇器在線性獨(dú)立測試路徑集中選取包含變更點(diǎn)的路徑,形成受影響路徑集; 第五步執(zhí)行受影響路徑集中的路徑; 第六步將執(zhí)行的結(jié)果和預(yù)期的結(jié)果進(jìn)行比較。
3.根據(jù)權(quán)利要求I所述的源代碼變更影響分析與測試方法,其特征在于,其中,所述部件級源代碼變更影響分析和測試部分包括 第一步驟構(gòu)造程序的調(diào)用圖,所述調(diào)用圖使用節(jié)點(diǎn)和邊描述程序的調(diào)用結(jié)構(gòu),節(jié)點(diǎn)代表程序的單元,邊表示調(diào)用關(guān)系; 第二步驟創(chuàng)建線性獨(dú)立的測試子樹集; 第三步驟確定修改的代碼所在的單元,作為變更點(diǎn); 第四步驟使用子樹選擇器在線性獨(dú)立測試子樹集中選取包含了變更點(diǎn)的子樹形成受影響子樹集; 第五步驟執(zhí)行受影響子樹集中的子樹; 第六步驟將執(zhí)行的結(jié)果和預(yù)期的結(jié)果進(jìn)行比較。
4.根據(jù)權(quán)利要求2所述的源代碼變更影響分析與測試方法,其特征在于,在所述第六步中,在測試執(zhí)行的結(jié)果和預(yù)期的結(jié)果一致時,則判斷程序的修改是正確的。
5.根據(jù)權(quán)利要求2或4所述的源代碼變更影響分析與測試方法,其特征在于,在所述第一步中,對代碼的控制流分析,此后按照控制流的構(gòu)造規(guī)則確定程序中流圖的節(jié)點(diǎn),然后根據(jù)程序中的控制條件將所述節(jié)點(diǎn)用邊連接起來,從而構(gòu)成程序的流圖。
6.根據(jù)權(quán)利要求2或4所述的源代碼變更影響分析與測試方法,其特征在于,在所述第四步中,路徑選擇器對于所有的變更點(diǎn),在線性獨(dú)立測試路徑集中,檢查每條路徑的節(jié)點(diǎn)集,如果包含變更點(diǎn),則將該路徑添加到受影響路徑集中。
7.根據(jù)權(quán)利要求3所述的源代碼變更影響分析與測試方法,其特征在于,在第六步驟中,如果測試執(zhí)行的結(jié)果和預(yù)期的結(jié)果一致,則判斷程序的修改是正確的。
8.根據(jù)權(quán)利要求I或2所述的源代碼變更影響分析與測試方法,其特征在于,在所述第四步驟中,子樹選擇器對于所有的變更點(diǎn),在線性獨(dú)立集成子樹集中,檢查每個子樹的節(jié)點(diǎn)集,如果包含變更點(diǎn),則將該子樹添加到受影響子樹集中。
9.根據(jù)權(quán)利要求I或2所述的源代碼變更影響分析與測試方法,其特征在于,在所述第五步驟中,首先創(chuàng)建一個端到端的測試條件列表,從測試條件列表中選擇數(shù)據(jù)以便在測試每個子樹時設(shè)置判定節(jié)點(diǎn)的條件。
10.一種采用了根據(jù)權(quán)利要求I至9之一所述的源代碼變更影響分析與測試方法。
全文摘要
一種軟件單元與部件與相結(jié)合的源代碼變更影響分析與測試方法。單元級源代碼變更影響分析和測試包括構(gòu)造程序單元流圖;創(chuàng)建線性獨(dú)立的測試路徑集;查找修改的代碼在流圖中的節(jié)點(diǎn)并確定為變更點(diǎn);使用路徑選擇器在線性獨(dú)立測試路徑集中選取包含了變更點(diǎn)的路徑以形成受影響路徑集;執(zhí)行受影響路徑集中的路徑;將執(zhí)行的結(jié)果和預(yù)期的結(jié)果進(jìn)行比較。部件級源代碼變更影響分析和測試包括構(gòu)造程序調(diào)用圖,調(diào)用圖使用節(jié)點(diǎn)和邊描述程序的調(diào)用結(jié)構(gòu);創(chuàng)建線性獨(dú)立的測試子樹集;確定修改的代碼所在的單元,作為變更點(diǎn);使用子樹選擇器在線性獨(dú)立測試子樹集中選取包含變更點(diǎn)的子樹形成受影響子樹集;執(zhí)行受影響子樹集中的子樹;比較執(zhí)行結(jié)果和預(yù)期結(jié)果。
文檔編號G06F11/36GK102880547SQ20121032522
公開日2013年1月16日 申請日期2012年9月5日 優(yōu)先權(quán)日2012年9月5日
發(fā)明者徐小春, 王禮生, 董超群, 張垚, 楊書軒, 黃東海, 望正氣 申請人:無錫江南計(jì)算技術(shù)研究所