Martin Fowler:高质量软件生产成本更低
“教父”級(jí)別的人物 Martin Fowler
ThoughtWorks 首席科學(xué)家Martin Fowler 指出,軟件開(kāi)發(fā)項(xiàng)目中存在一種常見(jiàn)爭(zhēng)論,即“花時(shí)間提高軟件質(zhì)量,還是專(zhuān)注于發(fā)布更有價(jià)值的功能?”
他認(rèn)為“提供功能的壓力常常主導(dǎo)著討論,導(dǎo)致許多開(kāi)發(fā)人員抱怨他們沒(méi)有時(shí)間研究架構(gòu)和代碼質(zhì)量”。于是,Martin 近日在個(gè)人博客發(fā)布了一篇名為《高質(zhì)量軟件值得這么多成本嗎?》的文章,就此展開(kāi)討論。
通常,這樣的反問(wèn)句答案顯然是否定的。不過(guò),Martin 接下來(lái)的闡述進(jìn)一步顛覆了問(wèn)題本身,這個(gè)問(wèn)題假定了質(zhì)量和成本之間的共同權(quán)衡,可在他看來(lái),這種權(quán)衡并不適用于軟件——“高質(zhì)量的軟件實(shí)際上生產(chǎn)成本更低”。
這種說(shuō)法是否顛覆了你的認(rèn)知?人們習(xí)慣于在質(zhì)量和成本之間進(jìn)行權(quán)衡,“一分錢(qián)一分貨”不無(wú)道理。
當(dāng)然,Martin 承認(rèn)該假設(shè)在大多數(shù)情況下是正確的,更高的質(zhì)量會(huì)花費(fèi)更多。但他強(qiáng)調(diào)這并非一個(gè)絕對(duì)規(guī)則。
軟件質(zhì)量意味諸多
Martin 首先對(duì)“軟件質(zhì)量”做出了界定。有很多方面可以囊括在內(nèi):用戶界面清晰嗎?軟件足夠可靠嗎?架構(gòu)合理、明確嗎?
用戶可以判斷用戶界面是否良好;高管可以判斷軟件是否使工作更高效;消費(fèi)者會(huì)注意到系統(tǒng)缺陷,特別是當(dāng)軟件出故障時(shí)。但用戶可能無(wú)法體會(huì)軟件架構(gòu)——這對(duì)開(kāi)發(fā)者來(lái)說(shuō)是軟件質(zhì)量的判定標(biāo)準(zhǔn)之一。
所以,這篇文章將軟件質(zhì)量屬性劃分為外部(例如 UI 和缺陷)和內(nèi)部(架構(gòu))。區(qū)別在于,用戶和消費(fèi)者可以看到軟件產(chǎn)品具有高外部質(zhì)量的原因,卻難以分辨出內(nèi)部質(zhì)量的高低。
內(nèi)部質(zhì)量看似對(duì)用戶無(wú)關(guān)緊要
用戶可以判斷他們是否想要支付更多費(fèi)用以獲取更好的用戶界面,但對(duì)于內(nèi)部模塊化結(jié)構(gòu)難以做出判斷。
試想一下,如果有兩個(gè)近乎完全相同的應(yīng)用程序,一個(gè)賣(mài) 6 美元,另一個(gè)售價(jià) 10 美元,區(qū)別僅僅在于后者的源碼整齊有序而前者較為混亂。這并不影響程序正常運(yùn)行,客戶為何要多花 4 美元購(gòu)買(mǎi)后者?
既然如此,為什么軟件開(kāi)發(fā)人員還要花時(shí)間和精力來(lái)提高工作的內(nèi)部質(zhì)量?
Martin 在此引出了“技術(shù)債務(wù)”(Technical Debt)的概念。由于代碼混亂而造成的難以清理的殘余項(xiàng)(cruft)便是積累技術(shù)債務(wù)的罪魁禍?zhǔn)祝瑸樵黾有鹿δ芩冻龅念~外努力則是債務(wù)利息。
如果模塊結(jié)構(gòu)足夠清晰,假設(shè)添加一個(gè)新功能需要四天時(shí)間,但由于邏輯混亂或數(shù)據(jù)難以理解等代碼規(guī)范問(wèn)題,這一工作可能將會(huì)被延長(zhǎng)至六天。
這些繁瑣的部分不僅會(huì)更加耗費(fèi)開(kāi)發(fā)人員的時(shí)間和精力,也加大了出錯(cuò)的可能性,那么以后將需要花費(fèi)更多成本來(lái)進(jìn)行修補(bǔ)。
由此看來(lái),內(nèi)部質(zhì)量實(shí)際上對(duì)用戶來(lái)說(shuō)也至關(guān)重要。因?yàn)楦玫膬?nèi)部質(zhì)量使得添加新功能更快、更容易,成本也更低。
內(nèi)部質(zhì)量的影響
Martin 表示,“內(nèi)部質(zhì)量的基本作用是降低未來(lái)變革的成本。但是編寫(xiě)好的軟件需要額外的努力,這在短期內(nèi)會(huì)產(chǎn)生一些成本”。為此,他提供了兩張圖表,以可視化的方式來(lái)呈現(xiàn)將內(nèi)部質(zhì)量的影響。
上圖是軟件內(nèi)部質(zhì)量較差的情況。可以看到,在最初一段時(shí)間,工作進(jìn)展很快,但隨著時(shí)間的推移,添加新功能變得愈發(fā)困難。這也是大多數(shù)軟件工作的境況。
專(zhuān)注于高內(nèi)部質(zhì)量很可能造成生產(chǎn)力下降,但開(kāi)發(fā)人員可以通過(guò)利用先前的工作輕松構(gòu)建新功能。這一目標(biāo)需要一支技術(shù)精湛,訓(xùn)練有素的團(tuán)隊(duì)來(lái)實(shí)現(xiàn)。
加上高內(nèi)部質(zhì)量的曲線之后,一些微妙之處顯現(xiàn)出來(lái):前期低內(nèi)部質(zhì)量比高內(nèi)部質(zhì)量的軟件更具有生產(chǎn)力,在此期間,質(zhì)量和成本之間存在某種權(quán)衡關(guān)系。問(wèn)題是,它能持續(xù)多久?
Martin 綜合參考了一些熟練開(kāi)發(fā)者的意見(jiàn),發(fā)現(xiàn)質(zhì)量差的代碼會(huì)在幾周內(nèi)顯著降低生產(chǎn)速度,擁有高內(nèi)部質(zhì)量的軟件隨后遠(yuǎn)遠(yuǎn)反超。因此,從長(zhǎng)遠(yuǎn)看來(lái),不必太費(fèi)心思在質(zhì)量與成本之間權(quán)衡。
即便最好的團(tuán)隊(duì)也會(huì)產(chǎn)生垃圾
即使是最優(yōu)秀的團(tuán)隊(duì)也會(huì)在工作時(shí)不可避免地產(chǎn)生一些無(wú)用且瑣碎的東西(cruft)。
許多人將構(gòu)建軟件比作建造摩天大樓,想想為什么高級(jí)程序員被稱(chēng)為“架構(gòu)師”?但軟件構(gòu)建于物理世界未知的不確定世界中,軟件開(kāi)發(fā)的構(gòu)建模塊——語(yǔ)言、庫(kù)和平臺(tái)——每隔幾年就會(huì)發(fā)生重大變化。
鑒于這種程度的變化,軟件項(xiàng)目總是創(chuàng)造出新穎的東西。Martin 說(shuō)他常常聽(tīng)到團(tuán)隊(duì)只有在花了一年左右的時(shí)間構(gòu)建它之后,才能真正理解軟件的架構(gòu)。即使是最好的團(tuán)隊(duì)也會(huì)在他們的軟件中肆意妄為。
不同的是,好的團(tuán)隊(duì)即使創(chuàng)造了垃圾,也能及時(shí)清理掉它們,他們可以繼續(xù)快速添加功能。此外,他們還會(huì)花時(shí)間創(chuàng)建自動(dòng)化測(cè)試,也經(jīng)常進(jìn)行重構(gòu),以便快速解決問(wèn)題、清理殘余。
Martin 用清理廚房來(lái)比喻這項(xiàng)工作:做飯時(shí)如果不快速清理臺(tái)面污漬,之后更難去除,所有骯臟的東西會(huì)妨礙烹飪下一道菜。
高質(zhì)量的軟件生產(chǎn)成本更低
總結(jié)一下:
-
忽視內(nèi)部質(zhì)量會(huì)導(dǎo)致 cruft 快速產(chǎn)生
-
這將進(jìn)一步延緩功能開(kāi)發(fā)
-
即使是一個(gè)偉大的團(tuán)隊(duì)也會(huì)產(chǎn)生這樣的問(wèn)題,但通過(guò)保持內(nèi)部質(zhì)量,可以控制它
-
高內(nèi)部質(zhì)量使團(tuán)隊(duì)能夠以更少的工作量、時(shí)間和成本開(kāi)發(fā)新功能
一些開(kāi)發(fā)團(tuán)隊(duì)向 Martin 訴苦:“管理層阻礙我們寫(xiě)出質(zhì)量好的代碼,因?yàn)樗枰ㄙM(fèi)太長(zhǎng)時(shí)間”。對(duì)此 Martin 再次呼吁,高內(nèi)部質(zhì)量實(shí)際上降低了未來(lái)成本,了解內(nèi)部質(zhì)量與成本之間的關(guān)系對(duì)于以最高效率開(kāi)發(fā)軟件來(lái)說(shuō)至關(guān)重要。
總結(jié)
以上是生活随笔為你收集整理的Martin Fowler:高质量软件生产成本更低的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 传微软已故联合创始人艾伦所创太空公司结束
- 下一篇: 从“闪电战”到全面战:荣耀开启“吓人的技