究竟讓你付出了多大代價(jià)? |
發(fā)布時(shí)間: 2012/9/13 17:13:53 |
如果我們有一個(gè)財(cái)務(wù)債務(wù),我們知道我們今天需要還掉多少錢,我們也可以計(jì)算出我們將來需要付多少利息。而技術(shù)債務(wù)卻是模糊不清的,我們不知道我們已經(jīng)欠了多少債了 – 你可能已經(jīng)欠了許多無意的技術(shù)債務(wù)了 – 你也可能不知情的狀況下欠了許多債。我們沒辦法具體測量出我們已經(jīng)花了多少了 – 我們已經(jīng)付了多少利息了,如果我們今天不注意的話,我們將來也不會(huì)知道我們總共花了多少了。 一些人試圖將技術(shù)債務(wù)用具體的金融術(shù)語來表述。例如,根據(jù)CAST的軟件報(bào)告,“對于應(yīng)用程序,一行代碼平均要花$3.61”。由于某種原因,java的程序平均花銷要高些: 每行$5.42。這些數(shù)據(jù)來自于他們的客戶代碼的統(tǒng)計(jì)分析。 Sonar,一個(gè)管理代碼質(zhì)量的開源項(xiàng)目,也試著對一個(gè)代碼庫的技術(shù)成本進(jìn)行了計(jì)算。他們也用了統(tǒng)計(jì)分析的方法,對自動(dòng)測試用例的代碼覆蓋率,代碼覆蓋性,重復(fù)率,不遵循代碼慣例的代碼以及注釋的密度等進(jìn)行了分析。 這種方法來急速技術(shù)債務(wù)很有意思,但我們不能認(rèn)為這些能作為真正的數(shù)據(jù)來幫我們做出業(yè)務(wù)決策。盡管這些數(shù)字是精確的,但它們僅僅是主觀的猜測。他們假設(shè)技術(shù)賬單可以靠分析代碼的結(jié)構(gòu)來計(jì)算。但是計(jì)算技術(shù)債務(wù)并沒有那么簡單。 但是這個(gè)賬單太模糊了,不能用來評(píng)估具體的價(jià)格。你覺得哪個(gè)類型的開銷對你的損害最大,你如何知道何時(shí)你花了太多了?讓我們來看看不同的技術(shù)賬單,采用模糊的方法來計(jì)算你花了多少。 $$$ 在架構(gòu)或是平臺(tái)技術(shù)方面犯了一個(gè)基礎(chǔ)的錯(cuò)誤 – 你發(fā)現(xiàn)的時(shí)候已經(jīng)來不及了,用戶已經(jīng)在使用系統(tǒng)了;或者是數(shù)據(jù)庫或消息構(gòu)造不能擴(kuò)展,可靠性低;或者是由于核心的依賴問題,你沒辦法按照需要擴(kuò)展架構(gòu);或者是你對系統(tǒng)如何工作或是用戶如何使用系統(tǒng)進(jìn)行了一些不正確的預(yù)測,F(xiàn)在沒有選擇了,只能重新開始或者重寫系統(tǒng)的很大部分,能讓系統(tǒng)能繼續(xù)運(yùn)作,通常你沒有足夠的時(shí)間來正確重寫。 $$-$$$ 容易出錯(cuò)的代碼 – 80%的錯(cuò)誤出現(xiàn)在20%的代碼中。Capers Jones說過所有的大系統(tǒng)中,有很少的一部分函數(shù)是錯(cuò)誤的集中處,代碼很難理解,要修改它們是很危險(xiǎn)的而且代價(jià)昂貴的,因?yàn)樗鼈円婚_始就寫得很爛,或者是因?yàn)橐恍┒桃暤腻e(cuò)誤修正的積累,使得代碼隨著時(shí)間而腐爛。沒有重寫這些代碼是程序員犯的最昂貴的錯(cuò)誤。 $-$$ 系統(tǒng)測試不易 – 因?yàn)槟銢]有好的自動(dòng)測試用例,或者當(dāng)你改變代碼的時(shí)候,測試用例變得支離破碎。測試的開銷占更改代碼帶來的開銷的一半以上 – 當(dāng)你寫了更多的代碼,當(dāng)系統(tǒng)增加了更多的接口和功能的時(shí)候,測試的開銷會(huì)隨之增加。 $-$$ 不注意打包,發(fā)布和部署。太過依賴人手檢測,很容易在代碼上線的時(shí)候造成錯(cuò)誤。就像測試一樣,發(fā)布和部署帶來的開銷不會(huì)消失,會(huì)逐漸的增加。 $-$$ 代碼很神秘的工作,而沒有人知道為什么 – 通常涉及到關(guān)鍵性能或關(guān)鍵安全的底層代碼是由已經(jīng)離開公司很久的一個(gè)奇才所寫的?赡苁呛芷恋拇a,但團(tuán)隊(duì)里沒有人能理解它。它就是個(gè)定時(shí)炸彈,某一天,某個(gè)人可能會(huì)試著更改它,或修改它。 $-$$ 向前向后的兼容性。這是必須的,短期的債務(wù)。但當(dāng)你需要維護(hù)這些兼容版本的時(shí)間越長,代價(jià)會(huì)越大。 $-$$ 庫和中間件過期 – 你可能沒有來得及打補(bǔ)丁和升級(jí)了。盡管現(xiàn)在的代碼還很穩(wěn)定,但你可能遭受沒打補(bǔ)丁的安全性危險(xiǎn)。這個(gè)過程越久,你拉下的補(bǔ)丁越多,危險(xiǎn)越大 – 如果你不再作技術(shù)支持了,可能某一天又會(huì)有人找到你。 $-$$ 重復(fù)的,復(fù)制粘貼的代碼。這是最令人討厭的技術(shù)債務(wù)之一。幾乎每一個(gè)都會(huì)寫它們。但是到底有多糟糕?這個(gè)開銷取決于開發(fā)者寫了多少重復(fù)的代碼,他們多長時(shí)間要更改它們一次,在不同的復(fù)制部分有多少細(xì)小的不同,你能否很輕易的找到重復(fù)的代碼并追蹤它們。如果寫重復(fù)代碼的程序員還在團(tuán)隊(duì)里,并且能很好的追蹤代碼,這就不會(huì)有太大的開銷。 $-$$ 大家都知道的,很明顯的錯(cuò)誤,并且沒有被修復(fù)的。這個(gè)開銷取決于你有多少錯(cuò)誤和警告,它們到底有多么的糟糕。如果它們是這種的問題的話,它們應(yīng)該已經(jīng)被修復(fù)了。如果一個(gè)錯(cuò)誤沒有造成問題的話,它還是錯(cuò)誤嗎? $-$$ 低效的設(shè)計(jì)或構(gòu)建,過度消耗硬件,使用過多的內(nèi)存,網(wǎng)絡(luò)帶寬或cpu。硬件是很便宜的,但當(dāng)你要進(jìn)行擴(kuò)展的時(shí)候還是要花掉很多的。 $ 使用編程習(xí)慣和模式不一致 – 程序員不理解已經(jīng)存在的模式,或是不喜歡它們,而引進(jìn)新的模式,或者僅僅是想改變它們。這樣做會(huì)很糟糕,對程序員來說會(huì)很挫敗。但讓程序就這么存活下去的開銷往往要比全部清理干凈的開銷要小。 $ 沒有錯(cuò)誤處理和異常處理,或者方法不對。在上線階段會(huì)讓你很受傷,但通常開銷不會(huì)很大,至少你讓大部分都正常運(yùn)行。 $0.01 硬編碼,神秘的數(shù)字,代碼不遵循規(guī)范,混亂的命名,缺失的注釋,不整潔的代碼。這確實(shí)很糟糕,但這些都很容易經(jīng)過重構(gòu)的工作清理干凈。 $0.01 文檔過期 – 這經(jīng)常被認(rèn)作是技術(shù)債務(wù)。但老實(shí)講,大部分程序員都不讀文檔。如果沒有人使用文檔,那么就放棄它們。如果人們在使用它,為什么它們會(huì)過期呢? $0.00 應(yīng)該使用語言自帶的功能,庫,框架來寫的代碼卻用手重寫了。當(dāng)某人意識(shí)到的時(shí)候是很失望的,但如果這些代碼沒有太多的錯(cuò)誤的時(shí)候,這是個(gè)沉沒成本,而不是會(huì)隨時(shí)間增長的成本。 不同的債務(wù)有不同的開銷。找出你的開銷主要在什么地方,已經(jīng)如何處理它們,不是一件容易的事情。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |