寫給工程人員的技術債完全指南

2021-01-11 騰訊網

【51CTO.com快譯】通常而言,債務是一個能夠讓人產生消極感覺的詞彙。大家往往會聯想到學生貸、醫療費、以及抵押付款等景象。不過,一些金融上的債務還是多少對人有益的。而技術債也是如此。

作為一個隱喻,技術債(也稱為代碼債務)是指開發團隊為了加快項目或功能的交付速度,在後期需要重構時會發生的情況。顯然,優先事項是更快的開發過程,而不是更高質量的代碼。

和金融債務類似,技術債對於組織來說是一把雙刃劍。為了合理地使用它,工程師和團隊負責人必須監控他們手頭有多少技術債,並學習如何對其進行良好的管理。而對於組織而言,這將是一項艱巨的任務,尤其是當他們對技術債的優缺點尚不清楚時。

技術債的基本特徵

Scrum已經成為了軟體開發人員在尋求以更高效的方式交付產品時,使用到的流行框架。眾所周知,客戶經常會有新的需求出現,並且會改變主意。因此,開放性的Scrum以事情的不可預測性為重要原則,並讓用戶在使用該框架時產生技術債。

在此,我們借用Scrum培訓師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)曾經提到過的,如下兩種不同類型的Scrum技術債:

首先創建一個由性能欠佳的代碼所組成的短期解決方案,以便開發團隊可以更快地交付產品。同時,團隊期望在初次發布之後,回過頭來改善代碼的質量。

隨著開發團隊發現有關待解決問題信息的增多,另一類技術債也會被動地產生。即:隨著新需求的出現,往日起作用的解決方案可能在將來就失效了。因此,這些需要調整和重構的代碼,會包含一定數量的債務。

Wolper同時認為:Scrum團隊應該重視如下方面:

為了簡便管理,應優先考慮技術債的透明度。團隊需要將技術債的可視化突顯效果放在首位,並在每次Sprint(衝刺)會議期間審查技術債的各項需求。

跟蹤技術債。團隊通過儘可能地使用諸如圈複雜度(cyclomatic complexity)、代碼覆蓋率、SQALE評級、以及違反規則等深入的代碼度量標準,對各類錯誤進行記錄和計數。

快速定期償還債務。Scrum團隊應該考慮在每個Sprint周期中,將其15-20%的資源分配給重構代碼並修復錯誤。

調整產品的積壓,將其與償還的技術債任務關聯。您可以將債務整理成要解決的Sprint狀態,以有助於防止債務被遺忘。

調整對「完成」的定義,即:在滿足了那些可管理的技術債的既定標準之前,請不要將其狀態設置為完成。

規範程序。為團隊如何處理添加新的功能(包括引入技術債),制定可重複的公式。

技術債有哪些不同類型?

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

當組織為了縮短上市時間而選擇留出改進代碼的空間時,就會產生故意的(也稱為主動)技術債。

當在發布了一段時間create後需要提高代碼的質量時,就會產生無意的(也稱為偶然的、過時的、被動的)技術債。這些既可能是由於第一次發布不佳所致,也可能是由於代碼過時而自然產生的更新需求。

另一種觀點則根據技術的具體類別,以及組織預期的更好服務,提出了如下13種不同類型的技術債,每一種債務都包含了標題中的特定問題:

建築債務

構建債務

代碼債務

缺陷債務

設計債務

文件債務

基礎設施債務

人員債務

處理債務

需求債務

服務債務

測試自動化債務

測試債務

Martin Fowler在故意和無意的分類基礎上增加了魯莽和謹慎兩個維度,提出了技術債的四象限。其中謹慎的技術債來自一個知道如何做的團隊,而當人們太草率時,魯莽的債務就會產生。兩者的區別在於:審慎的團隊是在了解其行為的基礎上,故意地去使用技術債。而魯莽的團隊則像是剛剛經歷了雙十一剁手節一樣,碰到債務的不斷增加。

可見,對於所有的軟體工程團隊而言,無論他們的專業知識或經驗如何,適當承擔一定程度的債務是可以接受的。也就是說,在謹慎的情況下,一些可以預期的債務會促進團隊知曉應當對手頭的項目做些什麼,以及哪些是稍後要進行的一些新工作。他們不但會盡力減少魯莽的債務,還能減少不良代碼,以提高軟體的質量。

應當始終避免哪種類型的技術債?

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

而且,在大多數情況下,團隊並不會察覺到自己的一些微小變化,實際上會導致債務總額的增加。雖然我們也可以使用Wolper的透明化概念,協助避免此類災難的發生,但是從根本上說,團隊還是應當對目標軟體具有充分的了解,從而避免在無意中添加可能阻礙系統的代碼。

技術債的指標有哪些?

和任何良好的管理計劃類似,組織需要通過了解各項指標,才能獲得對於技術債的控制權。下面是一些值得參考與衡量的指標:

軟體缺陷

軟體開發者應當持續記錄和跟蹤發現到的缺陷,其中包括未修復的缺陷和已修復的缺陷。對於未修復的缺陷,開發團隊可以在敏捷迭代中持續專注和修復它們。而通過跟蹤已修復的缺陷,團隊則能夠衡量其技術債的管理流程與效率。

代碼質量

如果說軟體缺陷直接影響的是軟體的最終用戶,那麼代碼的複雜性則會阻礙團隊的開發與維護。下面是有關代碼複雜度的指標:

圈複雜度

類的耦合

代碼行數

繼承的深度

當然,這些指標應該越低越好。通過密切關注這些指標,團隊還能夠準確地獲悉有待重寫或重構的代碼,以降低複雜性,並改善軟體的後端。

代碼的內聚

與代碼質量類似,專注代碼的內聚性,將有助於簡化代碼的複雜性。較高的代碼內聚性通常意味著目標代碼更具有可維護性、可重用性和魯棒性。同時,該指標還可以最大程度地減少需要開發人員的數量,以及大幅降低複雜性,減少Bit rot。

代碼所有權

「人多手雜」在此可以被用來形容更多的開發人員,產生更多的工作量,導致更大的問題,以及更多的無意技術債。因此,我們需要祭出「代碼所有權」的指標,來解答「誰在關注哪塊代碼?」,以及「如果出現問題該找誰?」等問題。

此類指標將向項目管理人員展示從事某項代碼工作的人員數量,以及花費在控制上的時間。據此,我們可以避免由於完整的代碼部分被掌握在某個成員手裡,而他可能因為被堵在路上,而耽誤了項目進度等單點故障。因此,我們可以將代碼庫分割成不同的域,然後授權給團隊中不同的開發人員角色。

代碼變化(Churn)

代碼段被重寫或替換等活動都可以被視為發生了代碼變化。如果開發人員不得不圍繞著某段代碼持續解決相似的錯誤,那麼就意味著此處的技術債非常嚴重。據此,團隊也可以識別並確定代碼的哪些部分需要重構。因此,團隊需要特別注意那些經常發生變化的代碼,以便快速發現問題,進而避免問題的加劇和技術債的累積。

值得一提的是,簡單地跟蹤上述技術債的各項指標,並不能自動消除所有的債務,我們仍然需要更為有效的管理實踐。

有關技術債的調查

根據卡內基梅隆大學軟體工程學院的一項行業調查(請參見--https://insights.sei.cmu.edu/sei_blog/2015/07/a-field-study-of-technical-debt.html)發現:糟糕的架構往往是技術債的首要來源,其次是過於複雜的代碼,第三則是缺少文檔和測試之間的緊密聯繫。而更糟糕的是,有65%的受訪者表示他們沒有適當的技術債管理應用。這就意味著由於缺乏策略來應對技術債,因此他們選擇不去實施任何解決方案!

一位擁有與多家公司(從《財富》500強到初創公司)合作超過20年經驗的軟體開發人員建議:開發團隊應當像投資信用卡業務那樣去投資技術債,而且投資的重點應放在如下兩個地方:

公司的文化,將人員對應到複雜的系統上,各司其職。

代碼庫的構建,執行更深入和更頻繁的質量保障測試。在組織已經積累了大量技術債的情況下,您可以將此類測試自動化。投資的內容至少涉及到通過某種形式的代碼審查,以確保問題能夠被儘早地解決。當然,這也意味著需要更加頻繁地進行重構。

不過,上述兩方面的投資只是一個起點,我們仍然強調需要管理自己的技術債。如果沒有一個明確的策略,技術債會繼續增加,並在線上和線下製造更多的問題,正如上述調查中所提到的那樣。

如何管理技術債?

就像金融債務一樣,只有通過制定計劃,實施管理,才能減少技術債。當然,正所謂「知易行難」,我們真正管理起來並不容易。它需要持續的監控和投入,並將其納入軟體開發的必要組成部分。而且,由於技術債很容易脫離業務目標,因此對其管理有助於讓開發與業務目標保持一致。

據預測,到2024年,技術債務將給全球科技公司帶來4萬億美元的損失。而實施了技術債管理與補救的公司將會縮短50%客戶產品交付時間。

目前,市場上已有一些新的技術應用捕捉到了此類軟體需求,並提出了相應的解決方案。例如,Stepsize之類的軟體,便可以使開發團隊輕鬆地獲取債務報告,對它們進行分類,並確定有待解決的最重要債務。通過監控並管理積累的所有技術債,它們可以協助軟體工程團隊在無需大幅改變常規工作流程的前提下,及時交付出色的軟體產品。

原文標題:The Engineer’s Complete Guide to Technical Debt,作者:Alex Omeyer

【51CTO譯稿,合作站點轉載請註明原文譯者和出處為51CTO.com】

相關焦點

  • 專業解答:「區塊鏈工程技術人員」和「區塊鏈應用操作員」是做什麼...
    最近,人社部等三部門發布了9個新職業,其中包括「區塊鏈工程技術人員」和「區塊鏈應用操作員」兩個區塊鏈職業,今天我們就來看看這兩個新增的區塊鏈職業到底是做什麼的?在人社部網站《關於發布區塊鏈工程技術人員等職業信息的通知》中,明確了區塊鏈工程技術人員、區塊鏈應用操作員具體定義和主要工作任務。區塊鏈工程技術人員,是指從事區塊鏈架構設計、底層技術、系統應用、系統測試、系統部署、運行維護的工程技術人員。
  • ...工程技術(農業工程)系列中級專業技術資格評審有關事項的通知
    關於2019年北京市農業技術系列、工程技術(農業工程)系列中級專業技術資格評審有關事項的通知 北京市農村工作委員會2019-07-02 10:02:22 閱讀(4612)
  • 火箭軍工程大學文職人員:一樣的暑期 別樣的精彩
    一樣的暑期 別樣的精彩——掃描火箭軍工程大學文職人員的「暑期模式」■吳熙昊 解放軍報特約記者
  • 空軍工程大學2021校園招聘軍隊文職人員簡章
    一、單位簡介空軍工程大學坐落於千年古都西安,是空軍最高技術學府,是高素質新型軍事人才的搖籃和軍事科技創新的重要基地,更是青年學子獻身國防、實現人生理想的知識殿堂,被列入全軍「雙重」建設院校和陝西省「國內一流大學」建設計劃。大學於1999年由原空軍工程學院、飛彈學院和電訊工程學院合併組建,3所學院均具有近60年的辦學歷史。
  • 空軍工程大學2021年文職人員招聘預公告
    大學主要承擔航空工程、防空反導、通信導航、空管領航、裝備管理、無人裝備工程等領域的複合型指揮和技術軍官,以及20餘個國家的留學生培訓任務。本科培訓任務佔空軍地面生長軍官的60%以上,碩士佔空軍院校培訓總數的55%,博士佔70%以上,目前在校學員1萬餘人,培訓規模僅次於國防科技大學。
  • 上海市《水產養殖尾水新型汙染物末端處置可行技術指南(試行)》
    北極星水處理網訊:北極星水處理網獲悉,近日,上海市生態環境局發布《水產養殖尾水新型汙染物處理可行技術指南(試行)》。本指南提出了淡水池塘養殖尾水末端處理模式下,排放尾水中抗生素類新型汙染物處理過程工程設計、參數配置、運行維護、生態淨化效果、排放水質等技術要求。
  • 新版《建設項目環境影響報告表》內容、格式及編制技術指南
    【能源人都在看,點擊右上角加'關注'】北極星環保網訊:日前,生態環境部發布關於印發《建設項目環境影響報告表》內容、格式及編制技術指南的通知。根據建設項目環境影響特點將報告表分為汙染影響類和生態影響類,配套制定了《建設項目環境影響報告表編制技術指南(汙染影響類)(試行)》和《建設項目環境影響報告表編制技術指南(生態影響類)(試行)》。《建設項目環境影響報告表》內容、格式及編制技術指南,自2021年4月1日起實施。
  • 聖潔防水參加《建設工程防水質量常見問題防治指南》發布會
    2020年12月12日,由深圳市建築工程質量安全監督總站、深圳市市政工程質量安全監督總站、深圳市防水協會主編的《建設工程防水質量常見問題防治指南》發布會和主題宣講會在江蘇揚州江蘇省華建建設股份有限公司會議室召開,本次會議由華建股份獨家承辦,深圳城市建設類行業聯合黨委第一書記胡建文、揚州住建局副調研員朱兆權、深圳市政站站長李偉波、深圳質監總站副站長許維寧、
  • 金華金東區信息技術應用能力提升工程2.0啟動
    2020年11月26日,浙江省金華市金東區中小學教師信息技術應用能力提升工程2.0啟動會暨學校管理團隊培訓會在金華市金東區第二實驗小學召開。這標誌著金東區2020年中小學教師信息技術應用能力提升工程2.0實施學校培訓工作正式啟動。
  • 航天工程大學士官學校文職人員招聘宣講公告
    航天工程大學士官學校文職人員招聘宣講公告   一、 學校簡介   中國人民解放軍航天工程大學士官學校位於居庸關長城腳下,十三陵水庫南畔,地處北京昌平城區,交通便利,周邊各類生活設施齊全。   四、招聘對象   學校招聘對象為普通高等學校畢業生或者社會人才從事教學、科研實驗等文職人員崗位工作。按照《中國人民解放軍文職人員條列》規定,文職人員是軍隊從事管理工作和專業技術工作的非現役人員,是軍隊人員的重要組成部分。文職人員依法享有國家工作人員相應的權利,履行相應的義務。
  • 火箭軍工程大學基礎部招考文職人員!
    昨天,他找到了樂樂老師,表達了自己想要辭職報考火箭軍工程大學基礎部文職人員的想法。那麼,這個讓公務員都想辭職報考的金飯碗是什麼?截至2015年底,中國人民解放軍火箭軍工程大學下設3個學院、7個專業系、2個研究生管理大隊和若干學員旅,形成了以飛彈高技術應用工程為特色,以技術為基礎、技術與指揮相結合,以研究生教育為龍頭、以本科教育為主體、兼有任職教育等多層次人才培養體系。
  • 姿勢跑法中國區總教練徐國峰寫給跑者的技術指南《你可以跑得更快》
    徐國峰的《你可以跑得更快:跑者都應該懂的跑步關鍵數據》正是解決這些困擾的科學指南。與其說這是本運動指南,倒不如說更像一位貼身的私人教練,因為它正是出於跑圈一位資深教練之手——徐國峰。這位曾擔任Garmin總教練、姿勢跑法中國地區總教練的作者,在跑圈有著「跑步先鋒」的稱號。他對跑步的技術、體能與肌力訓練都有著相當豐富的理論研究與實踐經驗,在耐力運動方面已有十本相關著作與譯作。
  • 《日日滋養》:寫給所有女性的美好生活進階指南
    日日滋養是一種生活方式這是一本寫給所有女性的美好生活進階指南,旨在幫助女性讀者擺脫日常生活中的無力感,收穫積極生活的勇氣。 本書作者周一妍,是資深媒體人、二級心理諮詢師、整理文化傳播領先自媒體平臺「第1整理術」的創始人、國內第一位登上TEDx分享整理話題的特邀嘉賓,被譽為「中國整理文化奠基人」。日日滋養是一個可以時刻陪伴你的生活方式。
  • 航天工程大學2021年文職人員公開招考宣講
    2017年7月,經習主席和中央軍委批准,以原裝備學院為基礎重建為航天工程大學,地位更加重要、責任更加重大、使命更加光榮。大學主要面向全國全軍培養航天領域指揮軍官、技術軍官、士官、文職人員和軍民融合人才,承擔航天領域關鍵技術研究、軍民融合和國際合作等任務。
  • 梁育詩:黃金、美債、美股演繹『鬥牛士進行曲』
    今年以來,黃金、美債、美股一路高歌猛進,牛氣顯現,互相映輝,表現出猶如『鬥牛』氣概。在《西班牙鬥牛士進行曲》中,以高亢的小號來演奏,但是當音樂椅一停,派對也就會結束。黃金、美債和美股等今年表現亮眼,成為表現較佳資產品種。
  • 華南農業大學2015年在職人員攻讀工程碩士、獸醫碩士、農業推廣...
    2015年,我校計劃招收在職人員攻讀工程碩士39名、獸醫碩士100名、農業碩士234名、風景園林碩士100名。    一、報考條件    (一)工程碩士(ME)    具備以下條件之一的在職工程技術或工程管理人員,以及在學校從事工程技術與工程管理教學的教師可以報考:    1、2012年7月31日前獲得國民教育序列大學學士學位。
  • 中國疾控中心發布《中國流感疫苗預防接種技術指南(2019-2020)》!
    為更好地指導我國流感預防控制和疫苗應用工作,中國疾控中心組織有關專家編制和印發了《中國流感疫苗預防接種技術指南(2019-2020)》。該指南內容主要包括流感病原學、流行病學、季節性等特徵,不同人群流感所致的健康和經濟負擔,流感疫苗種類及免疫原性、效力、效果、成本收益、安全性,及2019-2020年度接種建議。
  • 兩部門關於深化工程技術人才
    4.打通高技能人才與工程技術人才職業發展通道。按照兩類人才貫通條件大體平衡、適當向高技能人才傾斜的原則,搭建高技能人才與工程技術人才成長立交橋。在工程技術領域生產一線崗位,從事技術技能工作的高技能人才,具有高級工以上職業資格或職業技能等級,符合工程技術人才職稱評價基本標準條件,可參加工程系列職稱評審。
  • 區塊鏈技術類力作《aelf區塊鏈應用架構指南》橫空出世
    但《aelf區塊鏈應用架構指南》一書,經過三位專家作者(杜行舟、孟繁軻、郝玉琨)的潛心打磨,將精華知識點總結分展,進行深入淺出的講解。在闡釋知識點時,儘可能的避免公式、代碼和術語等概念,幫助初學者能輕鬆get到全書的知識精華。
  • 【軍隊文職】2020年陸軍工程大學文職人員招聘公告
    【導讀】華圖寧夏軍隊文職考試網同步華中科技大學大學生就業信息網發布:【軍隊文職】2020年陸軍工程大學文職人員招聘公告,詳細信息請閱讀下文!、工程技術與作戰指揮融合的教學研究型綜合性大學。