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

分支語(yǔ)句重構(gòu)算法的研究與應(yīng)用

2018-03-19 02:44:48趙會(huì)群孫雨
關(guān)鍵詞:案例

趙會(huì)群,孫雨

北方工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,北京100144

分支語(yǔ)句重構(gòu)算法的研究與應(yīng)用

趙會(huì)群,孫雨

北方工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,北京100144

CNKI網(wǎng)絡(luò)出版:2017-04-14,http://kns.cnki.net/kcms/detail/11.2127.TP.20170414.1723.020.html

1 引言

軟件產(chǎn)品的后期維護(hù)問(wèn)題往往是由于軟件自身的設(shè)計(jì)不當(dāng),然而,這種由軟件產(chǎn)品質(zhì)量引起的問(wèn)題不僅會(huì)給用戶帶來(lái)經(jīng)濟(jì)損失,還會(huì)在諸如軍事、醫(yī)療、航天、通信、交通等相關(guān)領(lǐng)域帶來(lái)災(zāi)難性的后果。軟件的安全性和可靠性就顯得尤為重要,而要保證軟件的正常運(yùn)作,為人們提供最優(yōu)質(zhì)的服務(wù),就需要對(duì)軟件進(jìn)行不斷地維護(hù)與測(cè)試,這其中非常重要的一項(xiàng)工作就是軟件重構(gòu)[1]。

代碼重構(gòu)是對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整[2],目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本[3]。面向結(jié)構(gòu)分析需求的代碼重構(gòu)的基本思想是,通過(guò)對(duì)代碼結(jié)構(gòu)的分析與研究,確定對(duì)應(yīng)的重構(gòu)方法,以便對(duì)代碼在結(jié)構(gòu)上的識(shí)別與劃分更加精準(zhǔn)與高效。

關(guān)于重構(gòu)的研究,前人已經(jīng)做了大量的研究,在重構(gòu)工具的設(shè)計(jì)與實(shí)現(xiàn)方面,由李龍[4]等實(shí)現(xiàn)了一個(gè)基于AADL架構(gòu)的軟件重構(gòu)工具,軟件架構(gòu)的重構(gòu)主要通過(guò)軟件模態(tài)的遷移實(shí)現(xiàn),運(yùn)用生成的AADL模態(tài)的動(dòng)態(tài)藍(lán)圖動(dòng)態(tài)模擬目標(biāo)軟件系統(tǒng)的模態(tài)遷移過(guò)程,從而便于進(jìn)行代碼重構(gòu),最終實(shí)現(xiàn)該軟件重構(gòu)工具。在代碼壞味的處理方面,高原[5]等人對(duì)代碼壞味處理順序的優(yōu)先級(jí)進(jìn)行了研究,選取具有代表性的10種代碼壞味,從每種代碼壞味的產(chǎn)生原因、癥狀,對(duì)軟件的影響以及相應(yīng)的處理這4個(gè)方面進(jìn)行分析,考慮重構(gòu)操作與相對(duì)應(yīng)的代碼壞味的關(guān)系,分析重構(gòu)操作的先后順序,最終得出代碼壞味處理順序的優(yōu)先級(jí)。在代碼的類(lèi)提取方面,由Bavota[6]等對(duì)如何識(shí)別提煉類(lèi)重構(gòu)機(jī)會(huì)進(jìn)行了研究,運(yùn)用的方法是將結(jié)構(gòu)和語(yǔ)義凝聚。他們利用結(jié)構(gòu)和語(yǔ)義在方法之間的關(guān)系,提出了一個(gè)基于圖理論的提取類(lèi)重構(gòu)方法,這個(gè)方法強(qiáng)調(diào)了語(yǔ)義和結(jié)構(gòu)相結(jié)合措施的益處,也強(qiáng)調(diào)了該方法在軟件開(kāi)發(fā)環(huán)境中的潛在有用性。在代碼的搬移函數(shù)方面,由Han[7]提出了一個(gè)自動(dòng)化的方法來(lái)識(shí)別多個(gè)獨(dú)立搬移函數(shù)重構(gòu)候選點(diǎn),并且可以同時(shí)應(yīng)用以最大化提高軟件的可維護(hù)性,此方法運(yùn)用最高獨(dú)立集的概念,確定多個(gè)重構(gòu)操作可以同時(shí)被運(yùn)用。運(yùn)用實(shí)踐證明該方法增強(qiáng)了重構(gòu)識(shí)別過(guò)程的時(shí)效和效益,提高軟件可維護(hù)性,與一次選擇一個(gè)重構(gòu)候選點(diǎn)的方法相比,需要較少的計(jì)算成本。在預(yù)測(cè)維護(hù)工作方面,由Yamashita[8]等研究了在多大程度上可以通過(guò)代碼味道檢測(cè)來(lái)預(yù)測(cè)維護(hù)問(wèn)題,代碼味道作為糟糕代碼和不良設(shè)計(jì)的指示燈,很容易在軟件維護(hù)和演化階段引起一些問(wèn)題。這項(xiàng)研究做了一個(gè)非常詳細(xì)的調(diào)查,通過(guò)已知的現(xiàn)有的代碼味道去預(yù)測(cè)維護(hù)階段可能會(huì)出現(xiàn)的問(wèn)題。最終從觀察中得到的結(jié)論是代碼味道只是維護(hù)難點(diǎn)的一個(gè)部分指示器,并不是占絕大部分或者全部責(zé)任。

本文所做的重構(gòu)工作借鑒了以上相關(guān)工作的工作經(jīng)驗(yàn),從分析代碼的壞味道開(kāi)始,到提出具體的解決方案,到最后達(dá)到重構(gòu)的效果[9]。

一般程序的偽代碼中,會(huì)存在一系列的條件語(yǔ)句,而條件語(yǔ)句中又會(huì)嵌套條件語(yǔ)句,多重嵌套后導(dǎo)致程序邏輯結(jié)構(gòu)復(fù)雜化,不利于分析程序的執(zhí)行路徑。在軟件測(cè)試中,基本路徑測(cè)試法是一種很常見(jiàn)的測(cè)試方法,它是一種白箱測(cè)試技術(shù),基本路徑測(cè)試方法允許測(cè)試用例設(shè)計(jì)者導(dǎo)出一個(gè)過(guò)程設(shè)計(jì)的邏輯復(fù)雜性測(cè)度,并使用該測(cè)度作為指南來(lái)定義執(zhí)行路徑的基本集。而要得到執(zhí)行路徑的基本集,首先要分析程序的執(zhí)行路徑[10],這時(shí)清晰的程序邏輯結(jié)構(gòu)就顯得尤為重要。

傳統(tǒng)的條件語(yǔ)句形式都是以if-else關(guān)鍵詞的形式出現(xiàn)的,還有特殊的if-else嵌套形式,多重的嵌套使得程序的邏輯結(jié)構(gòu)復(fù)雜化,不夠清晰易懂,測(cè)試時(shí),會(huì)導(dǎo)致分析程序的執(zhí)行路徑花費(fèi)更多的時(shí)間。據(jù)此,本文提出了一種對(duì)嵌套條件語(yǔ)句進(jìn)行優(yōu)化的自動(dòng)化重構(gòu)方法,依據(jù)重構(gòu)理論知識(shí)中代碼壞味的判定方法[11],運(yùn)用語(yǔ)法分析中的自下而上分析方法和歸約思想[12],將嵌套的條件語(yǔ)句轉(zhuǎn)化為線性排列的條件語(yǔ)句,簡(jiǎn)化了程序的邏輯結(jié)構(gòu),提高了代碼的可讀性,也提高了路徑分析的精度,應(yīng)用于改進(jìn)后的路徑集生成工具可以得到更準(zhǔn)確的結(jié)果,對(duì)提高測(cè)試效率有很大幫助。本文主要實(shí)現(xiàn)了一種代碼自動(dòng)化重構(gòu)的工具,同時(shí)改進(jìn)了另一個(gè)相關(guān)工具(路徑集生成工具)中生成模型代數(shù)[13]表達(dá)式的算法(準(zhǔn)確度較低),該重構(gòu)工具的應(yīng)用提高了路徑集生成工具的效率。

接下來(lái)的第2章介紹了重構(gòu)條件分支語(yǔ)句工具的實(shí)現(xiàn)過(guò)程;第3章介紹了改進(jìn)的生成代數(shù)表達(dá)式算法;第4章介紹了實(shí)驗(yàn)結(jié)果與分析過(guò)程;最后進(jìn)行了總結(jié)。

2 重構(gòu)分支語(yǔ)句的實(shí)現(xiàn)方法

該方法是以編譯原理中語(yǔ)法分析方法為基礎(chǔ),運(yùn)用其中的歸約思想,在不改變偽代碼功能的基礎(chǔ)上,實(shí)現(xiàn)if-else嵌套語(yǔ)句的變換,最終實(shí)現(xiàn)偽代碼的重構(gòu)。方法的大概過(guò)程如下所示:

步驟1準(zhǔn)備源偽代碼。

步驟2對(duì)偽代碼進(jìn)行提取,替換,收集關(guān)鍵行,運(yùn)用關(guān)鍵詞來(lái)偵測(cè)其所在的行,將else替換為if形式,再收集所有的if條件表達(dá)式。

步驟3運(yùn)用編譯原理中語(yǔ)法分析的自下而上分析方法,利用其中的歸約思想,將if嵌套的代碼塊變換為單一if條件。

步驟4得到組合條件,最終可用于進(jìn)行直接替換。

步驟5首先偵測(cè)出替換點(diǎn),進(jìn)行代碼塊的差異性分析,定位出需要替換的代碼塊位置,替換完畢進(jìn)行相應(yīng)的刪減,除去已無(wú)關(guān)的行。

步驟6得到重構(gòu)之后的偽代碼。

2.1 生成組合條件

語(yǔ)法分析的方法——自下而上分析的原理是,從輸入串開(kāi)始,逐步進(jìn)行“歸約”,直到文法的開(kāi)始符號(hào),即從樹(shù)末端開(kāi)始,構(gòu)造語(yǔ)法樹(shù)。采用“移進(jìn)-歸約”思想進(jìn)行自下而上分析,用一個(gè)寄存符號(hào)的先進(jìn)后出棧,把輸入符號(hào)一個(gè)一個(gè)地移入到棧里,當(dāng)棧頂形成某個(gè)產(chǎn)生式的候選式時(shí),即把棧頂?shù)倪@一部分替換成(規(guī)約為)該生產(chǎn)式的左部符號(hào)。邊輸入單詞符號(hào)(移進(jìn)到棧里),邊歸約。過(guò)程中處理的核心問(wèn)題是:識(shí)別可歸約串。

在if-else重構(gòu)的算法中運(yùn)用了類(lèi)似于歸約的基本思想,在將if條件入棧的同時(shí),把匹配else的出現(xiàn)作為識(shí)別到了可歸約串,繼而得到可替換的if組合條件。整個(gè)過(guò)程也是邊輸入、邊做類(lèi)似歸約的操作。相關(guān)算法見(jiàn)算法1。

算法1生成組合條件算法getIfMap()

輸入:初步處理偽代碼提取的關(guān)鍵行。

輸出:組合條件。

while(關(guān)鍵行不為空)

2.2 重構(gòu)嵌套語(yǔ)句

偵測(cè)替換點(diǎn)時(shí),要進(jìn)行代碼塊的差異性分析,首次遇到的單行if并不能作為替換點(diǎn),首次遇到雙層嵌套時(shí),或者是三層嵌套,表示替換點(diǎn)已被偵測(cè)到,需要進(jìn)行相應(yīng)的替換與刪減,最終得到重構(gòu)代碼,相關(guān)算法見(jiàn)算法2。

算法2重構(gòu)if嵌套changeIfNest()

輸入:組合條件。

輸出:重構(gòu)后的偽代碼。

鋼-混凝土組合結(jié)構(gòu)橋梁是指鋼腹板或鋼桁架組成的鋼梁與混凝土面板通過(guò)抗剪連接件連接在一起的橋梁結(jié)構(gòu)形式,這種結(jié)構(gòu)可以讓鋼材和混凝土共同承受主梁的荷載.

while(原偽代碼不為空)

if遇到相鄰兩行都包含if then取一個(gè)組合條件來(lái)替換,移除多余的if行;

if遇到相鄰三行都包含if then繼續(xù)取組合條件來(lái)替換,并移除多余if行;

if遇到單行if,而此時(shí)組合條件集不為空then直接進(jìn)行替換;

endwhile

3 生成模型代數(shù)表達(dá)式算法的改進(jìn)

重構(gòu)之后的偽代碼可以用于生成基本路徑集的工具,該工具可生成用于測(cè)試的基本路徑集。在生成基本路徑集工具中,生成模型代數(shù)表達(dá)式的算法存在一定的不足。

生成模型代數(shù)表達(dá)式的過(guò)程如下,首先運(yùn)用編譯原理中關(guān)于基本塊的劃分原理,對(duì)偽代碼進(jìn)行標(biāo)記劃分。需要對(duì)偽代碼進(jìn)行邏輯結(jié)構(gòu)的分析,判斷基本語(yǔ)句的流程關(guān)系,所做的標(biāo)記能夠與相應(yīng)的控制流圖表示一致,該算法掃描該偽代碼的結(jié)構(gòu)與標(biāo)記,生成模型代數(shù)表達(dá)式。而該表達(dá)式最終提取解析出來(lái)的各個(gè)子表達(dá)式所表示的路徑與控制流圖的路徑完全相同,才是最終正確的結(jié)果。但先前的算法在此環(huán)節(jié)有部分功能的缺失,未能足夠準(zhǔn)確地生成預(yù)期的模型代數(shù)表達(dá)式。本章對(duì)該算法做出了改進(jìn),具體見(jiàn)算法3。

算法3改進(jìn)的生成模型代數(shù)表達(dá)式算法

//讀取經(jīng)過(guò)基本快劃分的偽代碼ReadPseudo_Code(Path)

//構(gòu)件結(jié)點(diǎn)的前驅(qū)后繼關(guān)系表

GenerateSuccessorMap

//通過(guò)遞歸方法生成模型代數(shù)表達(dá)式

//遞歸出口,該結(jié)點(diǎn)不存在后繼結(jié)點(diǎn)或結(jié)點(diǎn)出/現(xiàn)循環(huán)

此處添加一個(gè)變量,用來(lái)判斷結(jié)點(diǎn)是否是目標(biāo)值}

本次改進(jìn)的兩個(gè)函數(shù)分別是String generateSubExpression(Integer index){}和boolean isLoop(Integer index,int i){}。原來(lái)的算法在遇到循環(huán)條件的時(shí)候,無(wú)法實(shí)現(xiàn)結(jié)點(diǎn)的倒序遍歷,且由于遞歸條件的不夠完善,在生成的模型代數(shù)表達(dá)式中無(wú)法出現(xiàn)相同的子表達(dá)式。基于這樣的兩個(gè)問(wèn)題,對(duì)兩個(gè)函數(shù)進(jìn)行了相應(yīng)的擴(kuò)展。通過(guò)后面的案例對(duì)比,可以看出本次算法改進(jìn)的有效性,能夠準(zhǔn)確地生成代數(shù)模型表達(dá)式。

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

首先針對(duì)嵌套分支語(yǔ)句重構(gòu)方法進(jìn)行具體案例分析,驗(yàn)證該重構(gòu)方法的有效性。之后應(yīng)用于選取的另外四個(gè)案例當(dāng)中,并運(yùn)用于生成基本路徑集的工具中,同時(shí)引入改進(jìn)后的算法,得到了重構(gòu)與改進(jìn)前后的不同實(shí)驗(yàn)結(jié)果,通過(guò)統(tǒng)計(jì)、對(duì)比、分析、驗(yàn)證了重構(gòu)方法的通用性及改進(jìn)算法的有效性。

4.1 重構(gòu)案例研究

案例:任意輸入三邊的值,判斷三角形的類(lèi)型。

偽代碼如圖1所示。

圖1 初始偽代碼

首先依據(jù)if,else關(guān)鍵詞對(duì)偽代碼進(jìn)行掃描提取、替換、收集,得到用于生成組合條件的關(guān)鍵行。將關(guān)鍵行作為算法1的輸入,得到的組合條件如圖2所示。

圖2 組合條件

然后將得到的組合條件作為算法2的輸入,得到的重構(gòu)后的偽代碼如圖3所示。

圖3 重構(gòu)后的偽代碼

重構(gòu)后的偽代碼能夠保持程序原有功能,同時(shí)實(shí)現(xiàn)了代碼邏輯結(jié)構(gòu)的調(diào)整,簡(jiǎn)化結(jié)構(gòu),增強(qiáng)程序的可讀性,遵循了重構(gòu)的基本概念要求。本次的重構(gòu)方法為以后生成基本路徑集提供了清晰的程序邏輯結(jié)構(gòu),容易建立語(yǔ)句之間的對(duì)應(yīng)關(guān)系,便于進(jìn)行基本塊的標(biāo)記劃分,提高了效率,對(duì)之后生成測(cè)試路徑集有很大幫助,同時(shí)說(shuō)明該重構(gòu)方法在生成測(cè)試基本路徑集這一方面具有一定意義,即為測(cè)試工作提供了方便。

4.2 重構(gòu)方法應(yīng)用案例研究

案例:計(jì)算不超過(guò)100個(gè)數(shù)字的平均值,同時(shí)計(jì)算總和與有效數(shù)字個(gè)數(shù)。具體的程序偽代碼如圖4所示。

圖4 待測(cè)路徑的程序偽代碼

(1)重構(gòu)與改進(jìn)之前

劃分基本塊后的程序流圖,如圖5所示。

圖5 重構(gòu)前程序流程圖

生成的代數(shù)表達(dá)式:(與預(yù)期不一致)

預(yù)期的代數(shù)表達(dá)式:

基本路徑:->>>

獨(dú)立路徑:->>>

(2)重構(gòu)與改進(jìn)之后

劃分基本塊之后的程序流程圖如圖6所示。

圖6 重構(gòu)后程序流程圖

生成的代數(shù)表達(dá)式:(與預(yù)期一致)

預(yù)期的代數(shù)表達(dá)式:

基本路徑:->>>

獨(dú)立路徑:->>>

在使用路徑集生成工具之前,首先用重構(gòu)方法對(duì)偽代碼進(jìn)行重構(gòu),然后再進(jìn)行基本路徑集的生成工作。由于改進(jìn)算法之前生成的代數(shù)表達(dá)式與預(yù)期的不一致,在生成的過(guò)程中存在一些結(jié)點(diǎn)不可達(dá)的路徑,即路徑不完整。改進(jìn)算法之后生成的代數(shù)表達(dá)式可以與期望的表達(dá)式完全一致,最終生成與程序流程圖完全一致的基本路徑集。

現(xiàn)補(bǔ)充介紹一個(gè)代碼相對(duì)復(fù)雜的案例,充分證明重構(gòu)工具和改進(jìn)算法的有效性。

案例:NextDate是一個(gè)有三個(gè)變量(月份、日期和年)的函數(shù)。函數(shù)返回輸入日期后面的那個(gè)日期。變量月份、日期和年都是整數(shù)值,并滿足以下條件:c1:1≤日期≤31;c2:1≤月份≤12;c3:1840≤年≤2016。

重構(gòu)前偽代碼如圖7,重構(gòu)后偽代碼如圖8。

運(yùn)用基本路徑集生成工具掃描此案例的偽代碼,生成基本路徑集。

改進(jìn)前結(jié)果如下:

獨(dú)立路徑:->>>

存在大量終點(diǎn)不可達(dá)現(xiàn)象。

改進(jìn)后結(jié)果如下:

獨(dú)立路徑:->>>

所有路徑均可達(dá)到終點(diǎn)。

4.3 案例對(duì)比分析

本文研究的是文獻(xiàn)[6]提出的五個(gè)案例,對(duì)其進(jìn)行重構(gòu)與應(yīng)用,也方便對(duì)重構(gòu)算法與改進(jìn)算法所產(chǎn)生的效果進(jìn)行先后對(duì)比。五個(gè)案例分別為:

案例1輸入a,b值,經(jīng)過(guò)處理后輸出相應(yīng)的a,b值。

案例2計(jì)算不超過(guò)100個(gè)數(shù)字的平均值,同時(shí)計(jì)算總和與有效數(shù)字個(gè)數(shù)。

案例3任意輸入三邊的值,判斷三角形的類(lèi)型。

案例4通過(guò)一定的規(guī)則,計(jì)算傭金的問(wèn)題。

案例5輸入年月日,計(jì)算該日期后面的日期。

圖7 重構(gòu)前偽代碼

圖8 重構(gòu)后偽代碼

本次實(shí)驗(yàn)對(duì)每一個(gè)案例都進(jìn)行了重構(gòu),將得到的結(jié)果重新進(jìn)行基本塊的劃分,然后用改進(jìn)工具生成每一個(gè)案例的基本路徑集。為了數(shù)據(jù)的直觀簡(jiǎn)潔,便于進(jìn)行對(duì)比,將得到的數(shù)據(jù)統(tǒng)計(jì)在兩張表格中進(jìn)行分析。

具體的實(shí)驗(yàn)數(shù)據(jù)可見(jiàn)表1和表2。

表1 重構(gòu)前案例集數(shù)據(jù)

表2 重構(gòu)后案例集數(shù)據(jù)

表1和表2中列出了結(jié)點(diǎn)數(shù)量,基本路徑數(shù)量,路徑完整性。

前后的不同之處表現(xiàn)在兩個(gè)方面:劃分基本塊所用時(shí)間的不同和路徑長(zhǎng)度完整性的不同。重構(gòu)之前,由于嵌套語(yǔ)句的邏輯結(jié)構(gòu)比較復(fù)雜,導(dǎo)致劃分基本塊要用更多的時(shí)間,自動(dòng)化重構(gòu)[14]之后,可以減短所用時(shí)間。重構(gòu)之前得到的基本路徑會(huì)有終點(diǎn)不可達(dá)的現(xiàn)象,即路徑不完整,有失準(zhǔn)確性,改進(jìn)生成模型代數(shù)表達(dá)式的算法后,可以確保所有路徑的完整性。

通過(guò)此案例集的實(shí)驗(yàn)結(jié)果可以驗(yàn)證本次偽代碼重構(gòu)及改進(jìn)生成模型代數(shù)表達(dá)式算法的有效性。

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

本文所做的研究,以基于模型代數(shù)的基本路徑集的自動(dòng)生成工具為基礎(chǔ),該工具是一種求基本路徑集的全新思路,能夠較為有效地生成待測(cè)程序的基本路徑。該工具通過(guò)掃描程序的偽代碼,最終生成與該偽代碼的流圖中相對(duì)應(yīng)的基本路徑集,而在掃描偽代碼的過(guò)程中,生成的代數(shù)表達(dá)式存在一定的不足,本文首先對(duì)偽代碼進(jìn)行重構(gòu),而后改進(jìn)生成代數(shù)表達(dá)式的算法,最終使得該工具能夠非常準(zhǔn)確地生成待測(cè)程序的基本路徑。

通過(guò)面向結(jié)構(gòu)分析需求的代碼重構(gòu)之后,代碼會(huì)具有更加清晰易懂的程序結(jié)構(gòu)(可見(jiàn)4.1節(jié)重構(gòu)案例研究),便于進(jìn)行分析程序的執(zhí)行路徑,使得路徑集生成工具的性能也得到提升。將本方法與技術(shù)運(yùn)用在基于模型代數(shù)的基本路徑集自動(dòng)生成工具中,該工具對(duì)偽代碼的識(shí)別有一定的規(guī)則要求,造成代數(shù)表達(dá)式的生成存在一定的不足,通過(guò)本次重構(gòu)及算法的改進(jìn),能夠解決以上的不足之處,提高了劃分基本塊的效率,更快地生成了準(zhǔn)確的基本測(cè)試路徑集。更加具體地體現(xiàn)了代碼重構(gòu)的重要意義,使重構(gòu)能夠更為廣泛地應(yīng)用到不良代碼當(dāng)中[15],而不僅僅只是停留在理論層面,同時(shí)驗(yàn)證了該代碼重構(gòu)工具的有效性,而且對(duì)測(cè)試自動(dòng)化有重要意義。這樣的實(shí)踐使得面向結(jié)構(gòu)的重構(gòu)的理論與應(yīng)用彼此融會(huì)貫通,豐富了理論,擴(kuò)展了應(yīng)用范圍。當(dāng)然,在實(shí)驗(yàn)過(guò)程中,為了便于對(duì)比所選取的案例是較為簡(jiǎn)短的,該算法能否解決更大規(guī)模的案例有待進(jìn)一步進(jìn)行研究和解決。

[1] Fowler M.重構(gòu)改善既有代碼的設(shè)計(jì)[M].北京:人民郵電出版社,2013.

[2] 王忠杰,徐曉飛,戰(zhàn)德臣.面向復(fù)用成本優(yōu)化的構(gòu)件重構(gòu)方法[J].軟件學(xué)報(bào),2005,16(12):2157-2165.

[3] 陳生慶,張立臣,陳廣明.面向方面軟件重構(gòu)等價(jià)性形式化證明方法[J].計(jì)算機(jī)科學(xué),2006,33(7):257-261.

[4] 李龍,董云衛(wèi),覃楊森,等.基于AADL的軟件重構(gòu)工具設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2011,38(7):121-125.

[5] 高原,劉輝,樊孝忠,等.代碼壞味的處理順序[J].軟件學(xué)報(bào),2012,23(8):1965-1977.

[6] Bavota G,Lucia A D,Oliveto R.Identifying extract class refactoring opportunities using structural and semantic cohesion measures[J].Journal of Systems and Software,2011,84(3):397-414.

[7] Han A R,Bae D H,Cha S.An efficient approach to identify multiple and independent move method refactoring candidates[J].Information and Software Technology,2015,59(C):53-66.

[8] Yamashita A,Moonen L.To what extent can maintenance problems be predicted by code smell detection?-An empirical study[J].Information and Software Technology,2013,55(12):2223-2242.

[9] Liu Hui,Liu Yang,Xue Guo.Case study on software refactoring tactics[J].IET Software,2014,8(1):1-11.

[10] 孫晶,張學(xué)娜.面向測(cè)試和模型檢測(cè)需求的程序建模技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2015(9):2693-2696.

[11] Hermans F,Pinzger M,Deursen A V.Detecting and refactoring code smells in spreadsheet formulas[J].Empir Software Engineering,2015,20(2):549-575.

[12] 陳火旺,劉春林.程序設(shè)計(jì)語(yǔ)言編譯原理[M].3版.北京:國(guó)防工業(yè)出版社,2006.

[13] 趙會(huì)群,盧飛.基于模型代數(shù)的基本路徑集的自動(dòng)生成[J].計(jì)算機(jī)科學(xué),2017,44(4):114-117.

[14] 陳林,徐寶文,錢(qián)巨,等.一種基于類(lèi)型傳播分析的泛型實(shí)例重構(gòu)方法[J].軟件學(xué)報(bào),2009,20(10):2617-2627.

[15] Distante D,Garrido A,Camelier-Carvajal J.Business processes refactoring to improve usability in E-commerce applications[J].Electronic Commerce Research,2014,14(4):497-529.

ZHAO Huiqun,SUN Yu.Research and application of refactoring algorithm of branch statements.Computer Engineering andApplications,2018,54(6):30-36.

ZHAO Huiqun,SUN Yu

College of Computer Science,North China University of Technology,Beijing 100144,China

Due to the multiple nested of conditional branch statements,logic structure of the code is not clear and the code is difficult to read,the efficiency of dividing basic block is reduced when generating basic path set.On this basis,a method is proposed for automatic code refactoring.It uses bottom-up analysis and reduction,following compiler syntax analysis method,can realize automatic adjustment to the nested if-else conditional statement,and is more clearer to the structure of code,the code will be more suitable for the tool of generating basic path set.This method improves the efficiency of the tool of generating basic path set.For the tool of generating basic path set based on the model algebraic,it improves the algorithm of generating model algebraic expressions,and can generate basic path set accurately.Finally,through the comparison of the experiment,it verifies the effectiveness of the refactoring and the improved algorithm.

multiple nested;automated refactoring;bottom-up analysis;reduction;model algebraic expression

由于條件分支語(yǔ)句的多重嵌套,導(dǎo)致代碼的邏輯結(jié)構(gòu)不清晰,可讀性差,降低了生成基本路徑集時(shí)劃分基本塊的效率。據(jù)此,提出一種代碼自動(dòng)化重構(gòu)方法,該方法運(yùn)用編譯原理中語(yǔ)法分析的自下而上分析方法和歸約思想,能夠?qū)η短椎膇f-else條件語(yǔ)句實(shí)現(xiàn)自動(dòng)化調(diào)整,實(shí)現(xiàn)代碼結(jié)構(gòu)的清晰化,更適用于生成基本路徑集的工具,該方法提高了生成基本路徑集的效率。而對(duì)于基于模型代數(shù)的基本路徑集生成工具,改進(jìn)了生成模型代數(shù)表達(dá)式的算法,并且能夠準(zhǔn)確地生成基本路徑集。最后通過(guò)實(shí)驗(yàn)對(duì)案例進(jìn)行對(duì)比,驗(yàn)證了重構(gòu)方法及改進(jìn)算法的有效性。

多重嵌套;自動(dòng)化重構(gòu);自下而上分析;歸約;模型代數(shù)表達(dá)式

2016-10-13

2017-01-16

1002-8331(2018)06-0030-07

A

TP312

10.3778/j.issn.1002-8331.1610-0151

國(guó)家自然科學(xué)基金(No.61070030,No.61370051)。

趙會(huì)群(1960—),男,博士,教授,研究領(lǐng)域?yàn)檐浖w系結(jié)構(gòu),軟件測(cè)試;孫雨(1989—),女,碩士研究生,研究領(lǐng)域?yàn)檐浖貥?gòu),E-mail:sunyu7412@163.com。

猜你喜歡
案例
案例點(diǎn)評(píng)
幼兒100(2023年36期)2023-10-23 11:41:48
THE STARSHIP CEDIA 2020案例大賽獲獎(jiǎng)案例
LAKERIDGE CEDIA 2020案例大賽獲獎(jiǎng)案例
案例4 奔跑吧,少年!
TWO VILLAS IN ONE CEDIA 2020案例大賽獲獎(jiǎng)案例
Superheroes CEDIA案例大賽優(yōu)秀案例
Smarter Homes Experience Centre CEDIA案例大賽優(yōu)秀案例
隨機(jī)變量分布及統(tǒng)計(jì)案例拔高卷
發(fā)生在你我身邊的那些治超案例
隨機(jī)變量分布及統(tǒng)計(jì)案例拔高卷
主站蜘蛛池模板: 中日韩一区二区三区中文免费视频| 看国产毛片| 亚洲人视频在线观看| 国产网站一区二区三区| 国产精品成人不卡在线观看 | 激情無極限的亚洲一区免费| 午夜精品福利影院| 婷婷亚洲视频| 国产精品无码AⅤ在线观看播放| 国产无码高清视频不卡| 色综合天天操| 一级毛片免费观看不卡视频| 久久久黄色片| 亚瑟天堂久久一区二区影院| 玖玖精品在线| 人与鲁专区| 99精品这里只有精品高清视频| 中文字幕永久在线观看| 日韩精品一区二区深田咏美| 欧美日韩中文国产va另类| 精品91自产拍在线| 99热这里只有精品在线观看| 91系列在线观看| 国产成人综合在线观看| 国产一区二区三区在线观看免费| 午夜国产精品视频| 久久国产精品麻豆系列| 99热国产这里只有精品无卡顿"| 国产高清毛片| 麻豆精品久久久久久久99蜜桃| 婷五月综合| 极品私人尤物在线精品首页 | 亚洲欧美国产五月天综合| 青草免费在线观看| 精品天海翼一区二区| a级毛片免费在线观看| 亚洲一区国色天香| 91无码人妻精品一区| 欧洲精品视频在线观看| 99这里只有精品6| 无码日韩人妻精品久久蜜桃| AV无码一区二区三区四区| 国产成人精品优优av| 综合色区亚洲熟妇在线| 中国国产A一级毛片| 午夜欧美理论2019理论| 久久亚洲国产视频| 欧美曰批视频免费播放免费| 成人日韩视频| 欧美成人手机在线视频| 欧美日在线观看| 国产拍揄自揄精品视频网站| 黄色片中文字幕| 国产视频a| 久草热视频在线| 毛片免费在线视频| 91在线视频福利| 91视频区| 国产色伊人| 伊人成色综合网| AV不卡国产在线观看| 激情无码视频在线看| 毛片在线区| 韩日无码在线不卡| 天天做天天爱夜夜爽毛片毛片| 亚洲精品无码抽插日韩| 国产麻豆aⅴ精品无码| 精品一区二区无码av| 亚洲嫩模喷白浆| 视频一区亚洲| 精品成人免费自拍视频| 伊在人亚洲香蕉精品播放| 国产一级在线观看www色| 婷婷色一区二区三区| 91伊人国产| 毛片基地美国正在播放亚洲| 在线亚洲小视频| 国产制服丝袜91在线| 国产一区免费在线观看| 国产在线观看91精品亚瑟| 亚洲日韩在线满18点击进入| 少妇露出福利视频|