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