自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

寫給工程人員的技術(shù)債完全指南

譯文
新聞
技術(shù)債是個(gè)復(fù)雜的主題。本文將帶您了解什么是技術(shù)債,其特征與分類,需要監(jiān)控的指標(biāo),以及如何有效地通過管理來加速軟件的開發(fā)過程。

【51CTO.com快譯】通常而言,債務(wù)是一個(gè)能夠讓人產(chǎn)生消極感覺的詞匯。大家往往會(huì)聯(lián)想到學(xué)生貸、醫(yī)療費(fèi)、以及抵押付款等景象。不過,一些金融上的債務(wù)還是多少對人有益的。而技術(shù)債也是如此。

[[352954]]

作為一個(gè)隱喻,技術(shù)債(也稱為代碼債務(wù))是指開發(fā)團(tuán)隊(duì)為了加快項(xiàng)目或功能的交付速度,在后期需要重構(gòu)時(shí)會(huì)發(fā)生的情況。顯然,優(yōu)先事項(xiàng)是更快的開發(fā)過程,而不是更高質(zhì)量的代碼。

和金融債務(wù)類似,技術(shù)債對于組織來說是一把雙刃劍。為了合理地使用它,工程師和團(tuán)隊(duì)負(fù)責(zé)人必須監(jiān)控他們手頭有多少技術(shù)債,并學(xué)習(xí)如何對其進(jìn)行良好的管理。而對于組織而言,這將是一項(xiàng)艱巨的任務(wù),尤其是當(dāng)他們對技術(shù)債的優(yōu)缺點(diǎn)尚不清楚時(shí)。

技術(shù)債的基本特征

Scrum已經(jīng)成為了軟件開發(fā)人員在尋求以更高效的方式交付產(chǎn)品時(shí),使用到的流行框架。眾所周知,客戶經(jīng)常會(huì)有新的需求出現(xiàn),并且會(huì)改變主意。因此,開放性的Scrum以事情的不可預(yù)測性為重要原則,并讓用戶在使用該框架時(shí)產(chǎn)生技術(shù)債。

在此,我們借用Scrum培訓(xùn)師Stefan Wolpers(請參見--https://www.scrum.org/resources/blog/technical-debt-scrum-who-responsible#:~:text=%E2%80%9CTechnical%20debt%20(also%20known%20as,approach%20that%20would%20take%20longer.%E2%80%9D)曾經(jīng)提到過的,如下兩種不同類型的Scrum技術(shù)債:

  • 首先創(chuàng)建一個(gè)由性能欠佳的代碼所組成的短期解決方案,以便開發(fā)團(tuán)隊(duì)可以更快地交付產(chǎn)品。同時(shí),團(tuán)隊(duì)期望在初次發(fā)布之后,回過頭來改善代碼的質(zhì)量。
  • 隨著開發(fā)團(tuán)隊(duì)發(fā)現(xiàn)有關(guān)待解決問題信息的增多,另一類技術(shù)債也會(huì)被動(dòng)地產(chǎn)生。即:隨著新需求的出現(xiàn),往日起作用的解決方案可能在將來就失效了。因此,這些需要調(diào)整和重構(gòu)的代碼,會(huì)包含一定數(shù)量的債務(wù)。

Wolper同時(shí)認(rèn)為:Scrum團(tuán)隊(duì)?wèi)?yīng)該重視如下方面:

  • 為了簡便管理,應(yīng)優(yōu)先考慮技術(shù)債的透明度。團(tuán)隊(duì)需要將技術(shù)債的可視化突顯效果放在首位,并在每次Sprint(沖刺)會(huì)議期間審查技術(shù)債的各項(xiàng)需求。
  • 跟蹤技術(shù)債。團(tuán)隊(duì)通過盡可能地使用諸如圈復(fù)雜度(cyclomatic complexity)、代碼覆蓋率、SQALE評(píng)級(jí)、以及違反規(guī)則等深入的代碼度量標(biāo)準(zhǔn),對各類錯(cuò)誤進(jìn)行記錄和計(jì)數(shù)。
  • 快速定期償還債務(wù)。Scrum團(tuán)隊(duì)?wèi)?yīng)該考慮在每個(gè)Sprint周期中,將其15-20%的資源分配給重構(gòu)代碼并修復(fù)錯(cuò)誤。
  • 調(diào)整產(chǎn)品的積壓,將其與償還的技術(shù)債任務(wù)關(guān)聯(lián)。您可以將債務(wù)整理成要解決的Sprint狀態(tài),以有助于防止債務(wù)被遺忘。
  • 調(diào)整對“完成”的定義,即:在滿足了那些可管理的技術(shù)債的既定標(biāo)準(zhǔn)之前,請不要將其狀態(tài)設(shè)置為完成。
  • 規(guī)范程序。為團(tuán)隊(duì)如何處理添加新的功能(包括引入技術(shù)債),制定可重復(fù)的公式。

技術(shù)債有哪些不同類型?

目前,大多數(shù)專家普遍認(rèn)為技術(shù)債有故意和無意的兩種類型。其中:

  • 當(dāng)組織為了縮短上市時(shí)間而選擇留出改進(jìn)代碼的空間時(shí),就會(huì)產(chǎn)生故意的(也稱為主動(dòng))技術(shù)債。
  • 當(dāng)在發(fā)布了一段時(shí)間create后需要提高代碼的質(zhì)量時(shí),就會(huì)產(chǎn)生無意的(也稱為偶然的、過時(shí)的、被動(dòng)的)技術(shù)債。這些既可能是由于第一次發(fā)布不佳所致,也可能是由于代碼過時(shí)而自然產(chǎn)生的更新需求。

另一種觀點(diǎn)則根據(jù)技術(shù)的具體類別,以及組織預(yù)期的更好服務(wù),提出了如下13種不同類型的技術(shù)債,每一種債務(wù)都包含了標(biāo)題中的特定問題:

  • 建筑債務(wù)
  • 構(gòu)建債務(wù)
  • 代碼債務(wù)
  • 缺陷債務(wù)
  • 設(shè)計(jì)債務(wù)
  • 文件債務(wù)
  • 基礎(chǔ)設(shè)施債務(wù)
  • 人員債務(wù)
  • 處理債務(wù)
  • 需求債務(wù)
  • 服務(wù)債務(wù)
  • 測試自動(dòng)化債務(wù)
  • 測試債務(wù)

Martin Fowler在故意和無意的分類基礎(chǔ)上增加了魯莽和謹(jǐn)慎兩個(gè)維度,提出了技術(shù)債的四象限。其中謹(jǐn)慎的技術(shù)債來自一個(gè)知道如何做的團(tuán)隊(duì),而當(dāng)人們太草率時(shí),魯莽的債務(wù)就會(huì)產(chǎn)生。兩者的區(qū)別在于:審慎的團(tuán)隊(duì)是在了解其行為的基礎(chǔ)上,故意地去使用技術(shù)債。而魯莽的團(tuán)隊(duì)則像是剛剛經(jīng)歷了雙十一剁手節(jié)一樣,碰到債務(wù)的不斷增加。

可見,對于所有的軟件工程團(tuán)隊(duì)而言,無論他們的專業(yè)知識(shí)或經(jīng)驗(yàn)如何,適當(dāng)承擔(dān)一定程度的債務(wù)是可以接受的。也就是說,在謹(jǐn)慎的情況下,一些可以預(yù)期的債務(wù)會(huì)促進(jìn)團(tuán)隊(duì)知曉應(yīng)當(dāng)對手頭的項(xiàng)目做些什么,以及哪些是稍后要進(jìn)行的一些新工作。他們不但會(huì)盡力減少魯莽的債務(wù),還能減少不良代碼,以提高軟件的質(zhì)量。

應(yīng)當(dāng)始終避免哪種類型的技術(shù)債?

審慎的技術(shù)債雖然對軟件組織來說有一定的好處,但是如果累積得多了,從量變發(fā)生了質(zhì)變,也可能會(huì)成為魯莽的技術(shù)債。也就是說,當(dāng)軟件隨著時(shí)間的流逝,惡化到產(chǎn)生錯(cuò)誤、甚至影響其功能和可用性時(shí),就會(huì)成為Bit rot(也稱為“軟件熵”)。例如:當(dāng)開發(fā)人員需要對其不甚了解的歷史遺留代碼進(jìn)行較小的增量更改時(shí),軟件本身的復(fù)雜性和潛在問題會(huì)隨即增加。一些工程師甚至可能違反NFR(Non-functional requirement,非功能要求),完全破壞代碼,進(jìn)而對軟件的整體功能產(chǎn)生影響。解決此類技術(shù)債的唯一方法便是重構(gòu)整個(gè)過程。

而且,在大多數(shù)情況下,團(tuán)隊(duì)并不會(huì)察覺到自己的一些微小變化,實(shí)際上會(huì)導(dǎo)致債務(wù)總額的增加。雖然我們也可以使用Wolper的透明化概念,協(xié)助避免此類災(zāi)難的發(fā)生,但是從根本上說,團(tuán)隊(duì)還是應(yīng)當(dāng)對目標(biāo)軟件具有充分的了解,從而避免在無意中添加可能阻礙系統(tǒng)的代碼。

技術(shù)債的指標(biāo)有哪些?

和任何良好的管理計(jì)劃類似,組織需要通過了解各項(xiàng)指標(biāo),才能獲得對于技術(shù)債的控制權(quán)。下面是一些值得參考與衡量的指標(biāo):

軟件缺陷

軟件開發(fā)者應(yīng)當(dāng)持續(xù)記錄和跟蹤發(fā)現(xiàn)到的缺陷,其中包括未修復(fù)的缺陷和已修復(fù)的缺陷。對于未修復(fù)的缺陷,開發(fā)團(tuán)隊(duì)可以在敏捷迭代中持續(xù)專注和修復(fù)它們。而通過跟蹤已修復(fù)的缺陷,團(tuán)隊(duì)則能夠衡量其技術(shù)債的管理流程與效率。

代碼質(zhì)量

如果說軟件缺陷直接影響的是軟件的最終用戶,那么代碼的復(fù)雜性則會(huì)阻礙團(tuán)隊(duì)的開發(fā)與維護(hù)。下面是有關(guān)代碼復(fù)雜度的指標(biāo):

  • 圈復(fù)雜度
  • 類的耦合
  • 代碼行數(shù)
  • 繼承的深度

當(dāng)然,這些指標(biāo)應(yīng)該越低越好。通過密切關(guān)注這些指標(biāo),團(tuán)隊(duì)還能夠準(zhǔn)確地獲悉有待重寫或重構(gòu)的代碼,以降低復(fù)雜性,并改善軟件的后端。

代碼的內(nèi)聚

與代碼質(zhì)量類似,專注代碼的內(nèi)聚性,將有助于簡化代碼的復(fù)雜性。較高的代碼內(nèi)聚性通常意味著目標(biāo)代碼更具有可維護(hù)性、可重用性和魯棒性。同時(shí),該指標(biāo)還可以最大程度地減少需要開發(fā)人員的數(shù)量,以及大幅降低復(fù)雜性,減少Bit rot。

代碼所有權(quán)

“人多手雜”在此可以被用來形容更多的開發(fā)人員,產(chǎn)生更多的工作量,導(dǎo)致更大的問題,以及更多的無意技術(shù)債。因此,我們需要祭出“代碼所有權(quán)”的指標(biāo),來解答“誰在關(guān)注哪塊代碼?”,以及“如果出現(xiàn)問題該找誰?”等問題。

此類指標(biāo)將向項(xiàng)目管理人員展示從事某項(xiàng)代碼工作的人員數(shù)量,以及花費(fèi)在控制上的時(shí)間。據(jù)此,我們可以避免由于完整的代碼部分被掌握在某個(gè)成員手里,而他可能因?yàn)楸欢略诼飞?,而耽誤了項(xiàng)目進(jìn)度等單點(diǎn)故障。因此,我們可以將代碼庫分割成不同的域,然后授權(quán)給團(tuán)隊(duì)中不同的開發(fā)人員角色。

代碼變化(Churn)

代碼段被重寫或替換等活動(dòng)都可以被視為發(fā)生了代碼變化。如果開發(fā)人員不得不圍繞著某段代碼持續(xù)解決相似的錯(cuò)誤,那么就意味著此處的技術(shù)債非常嚴(yán)重。據(jù)此,團(tuán)隊(duì)也可以識(shí)別并確定代碼的哪些部分需要重構(gòu)。因此,團(tuán)隊(duì)需要特別注意那些經(jīng)常發(fā)生變化的代碼,以便快速發(fā)現(xiàn)問題,進(jìn)而避免問題的加劇和技術(shù)債的累積。

值得一提的是,簡單地跟蹤上述技術(shù)債的各項(xiàng)指標(biāo),并不能自動(dòng)消除所有的債務(wù),我們?nèi)匀恍枰鼮橛行У墓芾韺?shí)踐。

有關(guān)技術(shù)債的調(diào)查

根據(jù)卡內(nèi)基梅隆大學(xué)軟件工程學(xué)院的一項(xiàng)行業(yè)調(diào)查(請參見--https://insights.sei.cmu.edu/sei_blog/2015/07/a-field-study-of-technical-debt.html)發(fā)現(xiàn):糟糕的架構(gòu)往往是技術(shù)債的首要來源,其次是過于復(fù)雜的代碼,第三則是缺少文檔和測試之間的緊密聯(lián)系。而更糟糕的是,有65%的受訪者表示他們沒有適當(dāng)?shù)募夹g(shù)債管理應(yīng)用。這就意味著由于缺乏策略來應(yīng)對技術(shù)債,因此他們選擇不去實(shí)施任何解決方案!

一位擁有與多家公司(從《財(cái)富》500強(qiáng)到初創(chuàng)公司)合作超過20年經(jīng)驗(yàn)的軟件開發(fā)人員建議:開發(fā)團(tuán)隊(duì)?wèi)?yīng)當(dāng)像投資信用卡業(yè)務(wù)那樣去投資技術(shù)債,而且投資的重點(diǎn)應(yīng)放在如下兩個(gè)地方:

  • 公司的文化,將人員對應(yīng)到復(fù)雜的系統(tǒng)上,各司其職。
  • 代碼庫的構(gòu)建,執(zhí)行更深入和更頻繁的質(zhì)量保障測試。在組織已經(jīng)積累了大量技術(shù)債的情況下,您可以將此類測試自動(dòng)化。投資的內(nèi)容至少涉及到通過某種形式的代碼審查,以確保問題能夠被盡早地解決。當(dāng)然,這也意味著需要更加頻繁地進(jìn)行重構(gòu)。

不過,上述兩方面的投資只是一個(gè)起點(diǎn),我們?nèi)匀粡?qiáng)調(diào)需要管理自己的技術(shù)債。如果沒有一個(gè)明確的策略,技術(shù)債會(huì)繼續(xù)增加,并在線上和線下制造更多的問題,正如上述調(diào)查中所提到的那樣。

如何管理技術(shù)債?

就像金融債務(wù)一樣,只有通過制定計(jì)劃,實(shí)施管理,才能減少技術(shù)債。當(dāng)然,正所謂“知易行難”,我們真正管理起來并不容易。它需要持續(xù)的監(jiān)控和投入,并將其納入軟件開發(fā)的必要組成部分。而且,由于技術(shù)債很容易脫離業(yè)務(wù)目標(biāo),因此對其管理有助于讓開發(fā)與業(yè)務(wù)目標(biāo)保持一致。

據(jù)預(yù)測,到2024年,技術(shù)債務(wù)將給全球科技公司帶來4萬億美元的損失。而實(shí)施了技術(shù)債管理與補(bǔ)救的公司將會(huì)縮短50%客戶產(chǎn)品交付時(shí)間。

目前,市場上已有一些新的技術(shù)應(yīng)用捕捉到了此類軟件需求,并提出了相應(yīng)的解決方案。例如,Stepsize之類的軟件,便可以使開發(fā)團(tuán)隊(duì)輕松地獲取債務(wù)報(bào)告,對它們進(jìn)行分類,并確定有待解決的最重要債務(wù)。通過監(jiān)控并管理積累的所有技術(shù)債,它們可以協(xié)助軟件工程團(tuán)隊(duì)在無需大幅改變常規(guī)工作流程的前提下,及時(shí)交付出色的軟件產(chǎn)品。

原文標(biāo)題:The Engineer’s Complete Guide to Technical Debt,作者:Alex Omeyer

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2020-05-11 09:54:33

JavaScript開發(fā)技術(shù)

2020-08-12 07:53:39

技術(shù)債技術(shù)科學(xué)

2023-09-20 21:30:14

單元測試完全指南

2023-09-21 22:12:06

單元測試數(shù)據(jù)工程

2019-03-22 10:10:44

AndroidiOS移動(dòng)系統(tǒng)

2022-05-12 10:11:32

通信行業(yè)運(yùn)營商裁員

2020-10-15 14:53:36

技術(shù)管理工程師

2019-03-19 10:05:11

技術(shù)研發(fā)指標(biāo)

2009-12-31 14:34:02

ISDN終端

2019-03-20 14:44:53

數(shù)據(jù)庫MySQLExcel

2018-10-11 05:37:11

2010-09-16 12:40:04

PPPOE SERVE

2018-11-26 06:22:32

WiFi無線網(wǎng)絡(luò)路由器

2023-10-08 18:07:42

Kubernetes開源容器

2020-06-16 07:46:01

Web開發(fā)工具

2018-08-03 12:52:51

首頁彈窗iOS

2018-08-08 20:35:58

APP結(jié)構(gòu)指南導(dǎo)航

2010-12-30 10:04:49

Linux入門

2019-07-29 16:05:48

前端DockerNode.js

2024-10-23 21:21:32

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)