新聞中心
隨著時(shí)間的推移,軟件項(xiàng)目會(huì)變得越來(lái)越大,項(xiàng)目中組件之間的依賴關(guān)系也會(huì)變得越來(lái)越錯(cuò)綜復(fù)雜,項(xiàng)目的維護(hù)也會(huì)變得越來(lái)越困難。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),隴南企業(yè)網(wǎng)站建設(shè),隴南品牌網(wǎng)站建設(shè),網(wǎng)站定制,隴南網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,隴南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Plumbr(Java內(nèi)存泄露檢測(cè)器)開(kāi)發(fā)團(tuán)隊(duì)的一篇博文揭示他們這個(gè)項(xiàng)目在開(kāi)發(fā)過(guò)程中,其代碼復(fù)雜性是如何演變的。
本文中的這些代碼依賴圖是該團(tuán)隊(duì)在項(xiàng)目開(kāi)發(fā)過(guò)程中使用Structure 101來(lái) 生成的。通過(guò)Structure,開(kāi)發(fā)者可以定義一個(gè)規(guī)則來(lái)約束代碼之間的交互和依賴關(guān)系,從而簡(jiǎn)化開(kāi)發(fā)和重構(gòu)過(guò)程中的代碼復(fù)雜度管理。但在Plumbr 項(xiàng)目一開(kāi)始,并沒(méi)有使用Structure,只使用了其中的Restructure產(chǎn)品來(lái)可視化項(xiàng)目中的依賴。但在后面項(xiàng)目越做越大時(shí),團(tuán)隊(duì)才開(kāi)始考慮使 用Structure。
Restructure使用如下兩個(gè)指標(biāo)來(lái)表示代碼的質(zhì)量:
- Tangle(混亂度):用來(lái)表示代碼構(gòu)件(比如包、類)之間的關(guān)系是否錯(cuò)綜復(fù)雜
- Fat(肥胖度):用于表示單獨(dú)的類、包是否龐大且雜亂
嚴(yán)格來(lái)說(shuō),并不是Tangle和Fat數(shù)值小就意味著你的代碼庫(kù)比較好。但是這兩個(gè)指標(biāo)確實(shí)能為你的代碼優(yōu)化工作帶來(lái)一些幫助,比如規(guī)模較小的單個(gè)代碼片 (Fat數(shù)值?。└菀鬃屓死斫?,依賴關(guān)系少(Tangle數(shù)值小)的代碼更具可預(yù)測(cè)性,這樣的代碼中的bug就會(huì)更少,代碼也更容易維護(hù)。
下面就來(lái)看看Plumbr項(xiàng)目代碼的復(fù)雜性的演變。
故事始于2011年初,那時(shí)剛開(kāi)始創(chuàng)建代碼庫(kù)。從下面的截圖中可以看到,代碼的Tangle數(shù)非常低(圖左上角色譜中的小黑點(diǎn)),可以說(shuō)這為將來(lái)的開(kāi)發(fā)工作打下了一個(gè)堅(jiān)實(shí)的基礎(chǔ)。但實(shí)際情況是,項(xiàng)目團(tuán)隊(duì)僅僅只寫(xiě)了幾千行源代碼,還沒(méi)來(lái)得及寫(xiě)更多東西。
但是只過(guò)了6個(gè)月,就呈現(xiàn)出了不同的畫(huà)面。如下圖所示,F(xiàn)at數(shù)依然很低,但是依賴關(guān)系已經(jīng)開(kāi)始變得混亂(看小黑點(diǎn)的縱坐標(biāo)軸)。
又過(guò)了6個(gè)月,可以看到項(xiàng)目代碼Fat數(shù)依然很低,Tangle數(shù)依然很高。但是你可以看到一些包(allocation、io、lifecycle)現(xiàn)在已經(jīng)從混亂的代碼庫(kù)中獨(dú)立了出來(lái)。其實(shí),該團(tuán)隊(duì)在這個(gè)時(shí)期的后段使用了Structure 101來(lái)管理代碼。
又過(guò)了半年時(shí)間,事情似乎走向了極端?,F(xiàn)在除了依賴關(guān)系異常混亂外,代碼的Fat情況也相當(dāng)嚴(yán)重。這時(shí)項(xiàng)目團(tuán)隊(duì)開(kāi)始全面使用Structure 101產(chǎn)品來(lái)分析下面這張圖片,并問(wèn)自己一些有實(shí)際意義的問(wèn)題,比如:
- 為什么report代碼要依賴一個(gè)引用包?
- 為什么在文件系統(tǒng)工具和日志包之間有這么一個(gè)強(qiáng)周期性依賴?
當(dāng)然,即使沒(méi)有Structure 101這個(gè)工具,也應(yīng)該問(wèn)自己一些類似的問(wèn)題。但不可否認(rèn),該工具對(duì)問(wèn)題進(jìn)行了可視化,對(duì)于優(yōu)化代碼有很大的幫助。
#p#
發(fā)現(xiàn)問(wèn)題后,項(xiàng)目團(tuán)隊(duì)就開(kāi)始采取措施進(jìn)行優(yōu)化。下面這張圖片大約是半年前的,可以看到,所有添加的新代碼已經(jīng)變得整潔,比如同級(jí)組件(fs、http等)之間的依賴關(guān)系現(xiàn)在已經(jīng)得到了改善。
下面這張圖片是一周前的。雖然代碼庫(kù)比半年前增長(zhǎng)了25%,但是Tangle數(shù)已經(jīng)成功地從39,000減少到了16,000,代碼變得更加整潔、結(jié)構(gòu)更加自然了。另外,項(xiàng)目團(tuán)隊(duì)的開(kāi)發(fā)水平也有了一定的提高。
結(jié)論
項(xiàng)目代碼復(fù)雜性的管理要貫穿項(xiàng)目始終,這樣到項(xiàng)目后期,維護(hù)起來(lái)也不會(huì)特別困難?;蛘吣憧梢灾贫ㄒ恍┮蕾囈?guī)則,然后在開(kāi)發(fā)過(guò)程中強(qiáng)制執(zhí)行。
這個(gè)故事是一個(gè)很好的樣本,展示了一個(gè)小團(tuán)隊(duì)如何在一個(gè)相對(duì)短的時(shí)間內(nèi)創(chuàng)建一個(gè)混亂的代碼庫(kù)。你也可以設(shè)想一下,如果一個(gè)10人開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)一個(gè)預(yù)期壽命為10年的項(xiàng)目,最終的項(xiàng)目依賴關(guān)系圖會(huì)是什么樣的呢?
文章標(biāo)題:如何管理和優(yōu)化日益增長(zhǎng)的代碼復(fù)雜度?
本文URL:http://fisionsoft.com.cn/article/cdiosho.html


咨詢
建站咨詢
