重構(gòu)真的能提高代碼質(zhì)量嗎?
| 與傳統(tǒng)觀點(diǎn)相反,新的研究發(fā)現(xiàn),想要為了更高效和更具可維護(hù)性,而去重組軟件代碼,我們所花的時(shí)間和精力并不一定是值得的。 | 
重構(gòu)軟件,也就是,重組現(xiàn)有的源代碼,以使其更高效,更具可讀性和可維護(hù)性,這可能是所有開(kāi)發(fā)人員時(shí)不時(shí)在做的一件事情。當(dāng)然,重構(gòu)背后隱含的假設(shè) 是,將來(lái)的收益——可節(jié)省的人力物力,要能大于現(xiàn)在投入的成本——所耗費(fèi)的時(shí)間和努力。然而,新的實(shí)驗(yàn)研究表明,情況可能并不像你想像得那樣美好,重構(gòu)或 許并不能大幅度地改善軟件代碼質(zhì)量,有時(shí)候甚至是完全沒(méi)有起到一點(diǎn)改善作用。
此研究是由研究人員在斯里蘭卡完成,近期發(fā)表于國(guó)際周刊“International Journal of Software Engineering & Applications”上,題目為《An Empirical Evaluation of Impact of Refactoring On Internal and External Measures of Code Quality》。目的是測(cè)試常見(jiàn)的重構(gòu)技術(shù)是否真的可以改進(jìn)外部(例如,代碼是不是更易于維護(hù)?)和內(nèi)部(例如,代碼行數(shù))兩個(gè)方面的軟件質(zhì)量。
研究人員選擇了一個(gè)小型的應(yīng)用程序(約4500行C#代碼),原先是Kelaniya大學(xué)的教學(xué)人員用于制定日程計(jì)劃和管理在線文檔的應(yīng)用程序。然后在其代碼上實(shí)施10種常見(jiàn)的重構(gòu)技術(shù)(例如,用子類替換類型碼,用多態(tài)替換條件語(yǔ)句)。
為了衡量重構(gòu)對(duì)外部軟件質(zhì)量的效果,研究人員從Kelaniya大學(xué),挑了一些懂得面向?qū)ο缶幊毯虲#的計(jì)算機(jī)專業(yè)的學(xué)生。其中一半學(xué)生通過(guò)可分析性和可變性評(píng)價(jià)了重構(gòu)后的代碼,而另一半則去評(píng)估未重構(gòu)的代碼。
運(yùn)行每個(gè)代碼庫(kù)1000次然后平均結(jié)果,來(lái)分別衡量重構(gòu)和非重構(gòu)代碼的執(zhí)行時(shí)間和資源利用。
使用Visual Studio分別計(jì)算重構(gòu)和非重構(gòu)內(nèi)部代碼的軟件質(zhì)量。這些指標(biāo)是:可維護(hù)性指數(shù)、時(shí)間復(fù)雜度、繼承深度、類耦合,以及代碼行。
下面是這些研究人員得出的主要結(jié)論:
- 
    
重構(gòu)并不能使得代碼更易于分析
 - 
    
重構(gòu)并不能使得代碼更容易改變
 - 
    
重構(gòu)代碼并不能使得代碼跑得更快
 - 
    
重構(gòu)代碼不會(huì)導(dǎo)致資源利用降低
 
***的利好是,有證據(jù)表明,重構(gòu)過(guò)的代碼的確更易于維護(hù)
不過(guò),上述研究結(jié)果依然待驗(yàn)證,因?yàn)樵囼?yàn)對(duì)象是一個(gè)小樣本——一個(gè)小型的應(yīng)用程序和固定的重構(gòu)技術(shù)組。所以,就目前而言,此結(jié)果還是別用到實(shí)際工作上的好。
譯文鏈接:http://www.codeceo.com/article/refactor-and-code-qulity.html
英文原文:Study finds that refactoring doesn’t improve code quality















 
 
 







 
 
 
 