精品主題,實戰(zhàn)科普,最新行業(yè)熱點話題,隨時掌握云上咨訊。
重構(gòu)軟件,就是重組現(xiàn)有的源碼,讓其更加易讀、高效和可維護,這也是所有開發(fā)人員時不時都會做的事情。然而,最新研發(fā)發(fā)現(xiàn),重構(gòu)并不會給軟件代碼質(zhì)量帶來多大的提升。
最新研發(fā)發(fā)現(xiàn),與流行的信念相反,重組軟件代碼并不會帶來更好地可維護性和效率。重構(gòu)軟件,就是重組現(xiàn)有的源碼,讓其更加易讀、高效和可維護,這也是所有開發(fā)人員時不時都會做的事情。然而,最新研發(fā)發(fā)現(xiàn),重構(gòu)并不會給軟件代碼質(zhì)量帶來多大的提升。
研究員Sri Lanka做了項調(diào)查,目的是為了測試常用的重構(gòu)技術(shù)是否會改進內(nèi)外部軟件質(zhì)量。最近,他把調(diào)查結(jié)果發(fā)布到了國際周刊《Software Engineering & Applications》上,標(biāo)題為:An Empirical Evaluation of Impact of Refactoring On Internal and External Measures of Code Quality。研究人員選用了一個小規(guī)模的應(yīng)用程序(約4500行C#代碼),由Kelaniya大學(xué)的學(xué)術(shù)研究員來調(diào)度事件和進行在線文檔的評估。研究人員把十種常見的重構(gòu)技術(shù)都運用到代碼中(例如:以子類取代類型碼、Replace Conditional with Polymorphism等)。對軟件內(nèi)外部代碼都進行了重構(gòu),并且與未重構(gòu)的代碼進行了評測和評估,得出的主要結(jié)論有:
重構(gòu)并未讓代碼易于解析
重構(gòu)并未讓代碼易于改變
重構(gòu)并未讓代碼運行加快
重構(gòu)并未提高資源利用率
與此同時,通過調(diào)查發(fā)現(xiàn),重構(gòu)的代碼更加易于維護。重構(gòu)代碼的可維護性指數(shù)評分要比沒有重構(gòu)的代碼高出4%,但作者認(rèn)為,這只是一個綜合指標(biāo)。然而,使用其他內(nèi)部質(zhì)量指標(biāo),重構(gòu)代碼的執(zhí)行(深度繼承)結(jié)果與未重構(gòu)代碼一樣,而就循環(huán)復(fù)雜度、類耦合、代碼行這幾方面,重構(gòu)代碼的執(zhí)行效果并沒有未重構(gòu)的好。
這份調(diào)查結(jié)果僅僅是基于小型的應(yīng)用程序和修復(fù)固定的重構(gòu)技術(shù),所以,作者承認(rèn)其會得到部分人的質(zhì)疑。當(dāng)然,對于不喜歡重構(gòu)的人來說,這份結(jié)果給了它們一個不重構(gòu)的理由。
最后通常,只要一提到重構(gòu),大家腦海首先蹦出的是重構(gòu)所帶來的
好處,然而當(dāng)大家面對需要重構(gòu)的代碼時,表情肯定是難過甚至絕望的。那么,在花費了時間和精力后,重構(gòu)后的代碼是否能有想象中的那么高效、易讀、可維護呢?有過重構(gòu)經(jīng)驗的程序員不妨來跟我們分享一下心得體會吧。