發(fā)現(xiàn)并修復(fù)五種架構(gòu)技術(shù)債務(wù)

開發(fā)人員、架構(gòu)師和應(yīng)用程序團隊不斷追逐技術(shù)債務(wù)。不管是好是壞,這是一個令人煩惱的問題,經(jīng)常被踢到路上,直到為時已晚,應(yīng)用程序開發(fā)放緩,新功能延期,測試周期增加,成本上升。在最公開的情況下,應(yīng)用程序會完全崩潰——就像我們最近在西南航空公司、Twitter、FAA 和其他從未公開過的網(wǎng)站上看到的那樣——但你知道你是誰。技術(shù)債務(wù)從源代碼的味道中呈現(xiàn)出多種形式從安全風(fēng)險到更嚴重的架構(gòu)技術(shù)債務(wù)問題。存在用于掃描源代碼質(zhì)量和安全性的優(yōu)秀工具,但由于缺乏可觀察性、工具和最佳實踐,跟蹤、基線化和檢測架構(gòu)漂移一直很困難。
架構(gòu)技術(shù)債務(wù)到底是什么,我為什么要關(guān)心?如果您是負責(zé)維護和擴展舊的 Java 或 .NET 單體的架構(gòu)師或開發(fā)人員,您可能已經(jīng)非常熟悉這個問題。單體應(yīng)用程序?qū)嶋H上是由其架構(gòu)(單體)模式定義的,它帶有密集的依賴關(guān)系、長依賴鏈,本質(zhì)上是一個大泥球,對于任何試圖理解和跟蹤的架構(gòu)師來說都是不透明的。這就是架構(gòu)技術(shù)債務(wù)的本質(zhì):類糾纏、深度依賴、死代碼、長依賴鏈、密集拓撲以及缺乏通用代碼庫,它們困擾著單體、舊應(yīng)用程序,甚至最近的微服務(wù)已經(jīng)開始類似于巨石本身。
架構(gòu)可觀察性
到目前為止,軟件架構(gòu)師缺乏從他們的角度理解、跟蹤和管理技術(shù)債務(wù)的可觀察性和工具。架構(gòu)債務(wù)不是源代碼質(zhì)量或圈復(fù)雜度,盡管這些是需要跟蹤和管理的關(guān)鍵技術(shù)債務(wù)元素。問題的切入要深得多,因為這些結(jié)構(gòu)性問題直接影響產(chǎn)品質(zhì)量、功能交付提前期和測試時間。學(xué)術(shù)研究強調(diào)了分析依賴關(guān)系如何為返工、重構(gòu)和應(yīng)用程序現(xiàn)代化的復(fù)雜性提供主要預(yù)測指標(biāo)。
架構(gòu)可觀察性照亮了應(yīng)用程序黑匣子和泥球應(yīng)用程序,使不透明變得透明,因此架構(gòu)師可以左移進入正在進行的軟件開發(fā)生命周期。這使他們能夠在結(jié)構(gòu)異常爆發(fā)為更大的問題之前,以迭代、連續(xù)的方式管理、監(jiān)控和修復(fù)結(jié)構(gòu)異常。可觀察的架構(gòu)從工具開始,首先建立基線、設(shè)置閾值并檢查架構(gòu)漂移以主動檢測關(guān)鍵異常。
需要追蹤的五種關(guān)鍵建筑債務(wù)形式
克服架構(gòu)債務(wù)是一項挑戰(zhàn),但任何時候開始都不晚。在過去十年中,許多單體應(yīng)用已經(jīng)被提升并轉(zhuǎn)移到云端,這應(yīng)該是您的首要目標(biāo)。有五個關(guān)鍵因素需要分析、跟蹤和制定修復(fù)計劃。
- 死代碼:最難找到的死代碼是駐留在應(yīng)用程序和公共庫中的可訪問遺留代碼,這些代碼已過時或不再被任何當(dāng)前用戶流訪問。它通常被認為是“僵尸代碼”,因為它潛伏在陰影中,沒有開發(fā)人員真正愿意接觸它。找到它需要結(jié)合動態(tài)和靜態(tài)分析來確定代碼是否存在但從未在生產(chǎn)中訪問過。死代碼不同于“無法訪問的代碼”,因為代碼實際上在技術(shù)上是可以訪問的,但實際上不再使用。死代碼會隨著時間的推移而發(fā)展和傳播,使重構(gòu)和現(xiàn)代化工作變得膨脹和復(fù)雜化。
- 服務(wù)蠕變:通過手動或自動方式設(shè)置基線服務(wù)拓撲。逐條列出應(yīng)用程序中的核心業(yè)務(wù)服務(wù)和公共服務(wù),最好是在整個團隊可以跟蹤的共享位置。定期審核應(yīng)用程序結(jié)構(gòu)以查看是否添加或刪除了新服務(wù),以及是否出于適當(dāng)?shù)臉I(yè)務(wù)或技術(shù)原因。
- 公共類:準(zhǔn)備重構(gòu)或重新架構(gòu)項目的關(guān)鍵方面之一是確定公共類,這些公共類應(yīng)包含充當(dāng)共享公共庫的核心平臺服務(wù)。這一關(guān)鍵的現(xiàn)代化最佳實踐將減少重復(fù)代碼和依賴性,將通用服務(wù)集中在一個地方。定期觀察應(yīng)用程序以檢查應(yīng)添加到公共庫中的新公共類,以防止進一步積累技術(shù)債務(wù)。
- 服務(wù)排他性:一旦您從整體中提取了一個或多個微服務(wù),為這些服務(wù)的排他性設(shè)定基線并尋找架構(gòu)漂移將及早標(biāo)記未來的技術(shù)債務(wù)。測量和基線服務(wù)排他性以確定服務(wù)的獨立類和資源的百分比,以在引入擴展架構(gòu)技術(shù)債務(wù)的新依賴項時發(fā)出警報。
- 高負債類別:某些類別比其他類別承擔(dān)更多的技術(shù)債務(wù)。根據(jù)依賴項、依賴項和大小分析和設(shè)置“高債務(wù)”類分數(shù),以確定重構(gòu)的最佳候選者,這將對減少技術(shù)債務(wù)產(chǎn)生最大影響。
使用自動化工具的主動架構(gòu)監(jiān)督將使架構(gòu)師能夠通過設(shè)置觀察、分析和設(shè)置配置基線測量和閾值的時間表來應(yīng)對這些類型的變化。
架構(gòu)漂移管理
持續(xù)的現(xiàn)代化要求架構(gòu)師不僅在應(yīng)用程序的初始設(shè)計或需要重新架構(gòu)或重構(gòu)時,而且在其應(yīng)用程序的整個生命周期中都扮演更積極的角色。架構(gòu)漂移管理為架構(gòu)師提供了他們所需的可觀察性和工具,以保持其架構(gòu)的領(lǐng)先地位,隨著時間的推移實現(xiàn)現(xiàn)代化,并避免下一次技術(shù)債務(wù)災(zāi)難。































