原創|使用教程|編輯:鄭恭琳|2020-12-02 10:26:43.730|閱讀 210 次
概述:
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在處理遺留代碼時,您需要一種可持續的方式來管理變更。使用遺留代碼可能會成為敏捷和DevOps的障礙,但是您可以利用適當的技術來克服挑戰。
許多人使用“遺留代碼”一詞來簡單地指代舊代碼。但是“舊”和“遺留”對不同的人意味著不同的事情。在這里,我將遺留代碼的定義用作團隊尚不了解的任何現有代碼。
有關代碼的知識可能不完整,原因有幾個,例如:
無論如何,我們要明確一點:遺留代碼是規則,而不是例外。當今世界上許多軟件基礎架構都在遺留代碼上運行。問題是,當我們需要進行更改時,我們如何減輕與遺留代碼相關的風險?在這篇文章中,我將為您提供一些解決方案,以有效地處理遺留代碼。
遺留代碼的問題不是它的年代久遠,而是您不了解更改它如何影響現有功能。如果您要過渡到新的開發方法(例如敏捷或DevOps),則與遺留代碼相關的知識鴻溝可能會成為障礙。
敏捷和DevOps已成為創建軟件的主要方法,因為它們可以幫助團隊在最小的可銷售功能準備就緒后快速迭代和發布應用程序。短而頻繁的開發周期是迭代開發方法的特點,但是這些方法沒有余地。用于在處理遺留代碼時減輕潛在問題的結果。嘗試快速迭代您不了解的代碼可能會引入新的問題。
現實情況是,在開始新項目時,這些技術更容易應用。對于已經存在了一段時間的項目,團隊通常會使用涉及遺留代碼的系統。開發人員可能不知道現有代碼庫如何工作,但仍必須修復缺陷或擴展功能而不會引入新問題。甚至表面上或看似很小的更改都可能對應用程序產生重大影響。
為什么技術債務很重要(或不重要)
軟件開發游戲旨在不斷地平衡軟件質量、上市時間和開發成本。在大多數情況下,我們會根據市場情況進行權衡以實現業務目標。隨著時間的流逝,我們積累了技術債務。
什么是技術債務?
技術債務是減輕與實施不完善解決方案有關的風險的成本,以實現您的上市時間或開發成本目標。(例如,放棄升級到庫是因為這樣做會延遲發布,這代表了技術上的債務,這是以后需要更新庫的時間形式。)
在許多情況下,繼承的遺留代碼庫負擔沉重,因為它們具有可測試性差、覆蓋率低、代碼過于復雜等形式的技術債務。技術債務可能使較新的軟件開發實踐的應用不堪重負,因為團隊始終面臨著是否應對該債務的問題。
您應該擔心技術債務嗎?
確切地說,每個應用程序都有技術債務,許多組織可以投入大量資源來償還它,而沒有實現任何實質性利益。歸根結底,決定投入資源以償還技術債務的決定取決于您計劃更改的應用程序部分。但是,除非您開始采取一些其他步驟,否則您將不會知道(我會暫時介紹)。
擴大對遺留代碼的覆蓋
當組織繼承遺留代碼庫進行處理時,他們通常會采用覆蓋策略,以幫助他們為新開發創建基準。遺留代碼已經在現場并且可以正常工作,因此重點在于確保新代碼的質量。為了遵守覆蓋范圍政策,許多組織通過任何必要的手段來提高對遺留代碼的覆蓋范圍。低覆蓋率會拖累整體指標,這使得難以準確衡量新開發項目的覆蓋率。如果您知道您使用的是覆蓋范圍廣的遺留代碼,則總體項目指標可以表明新開發是否朝著正確的方向發展。
此策略的基本原理是合理的,但是問題是組織為了遵守其覆蓋策略而盲目生成測試。結果,該項目中加載了無法維護的測試,這些測試提供了錯誤的軟件質量意識。如果您不打算接觸代碼或不關心測試的可維護性或質量,則可以使用市場上可以幫助您實現此目標的幾種測試生成工具之一。
創建有意義的、可維護的Java測試
需要明確的是,我不主張盲目生成測試。相反,請使用可幫助您快速創建有意義的測試以覆蓋Java遺留代碼的工具。Parasoft Jtest提供了一個點擊界面,該界面為開發人員提供了基于現有代碼的自動測試創建過程。由此產生的回歸套件是有意義的、可維護的和可擴展的。
與其嘗試在宏級別上工作,不如創建一個基線并將質量活動的范圍縮小到受計劃更改影響的代碼區域。在進行了評估以評估代碼的范圍和狀態之后,您應該創建捕獲當前行為的測試,以便團隊可以了解更改如何影響現有功能。
然后,您可以利用一系列技術,這些技術可以在重構遺留代碼時幫助您收集分析數據,并確保您對代碼更改的投資可以提高舊系統的安全性和可靠性。
1.定義您的范圍。
了解更改如何影響系統行為需要至少一個數據點。首先選擇基準構建,然后開始跟蹤指標。設置范圍并查看遺留代碼的三個特征:
您有多少個違反靜態分析的違規行為,嚴重程度如何?您需要了解代碼中內置了多少潛在缺陷。
您目前的測試范圍是什么?低覆蓋率表示與變更相關的潛在風險。
需要多少清潔?諸如復雜性、注釋等之類的其他指標可以提供有關軟件質量狀態的觀點。
Parasoft提供了一個強大的分析平臺,用于捕獲、關聯和報告違反代碼分析的行為、測試結果、覆蓋率分析以及其他軟件質量數據。該平臺不僅提供靜態報告,還可以應用其他分析,以幫助您確定應用程序中受更改影響的部分。
利用資源組的概念,您可以標識一組特定的文件或目錄、范圍覆蓋、靜態分析違例以及針對這些特定資源的指標數據。此信息有助于您在代碼的這些部分內進行更改之前為代碼庫的各個區域創建基線。
2.捕獲行為。
有了初始數據點,下一步就是通過創建測試來開始捕獲系統的當前行為。建立高質量的回歸套件不僅可以捕獲現有行為,而且還可以擴大覆蓋范圍,這是確保更改不會破壞功能的安全網。
Parasoft Jtest非常適合此任務,因為它使您能夠基于現有代碼批量創建JUnit測試的基線,包括斷言。Jtest還具有創建測試的能力,該測試可以直接訪問私有方法,以防最初沒有考慮可測試性的情況下編寫原始代碼。
最好通過有意義的測試來擴大覆蓋范圍。在覆蓋范圍差距分析期間,Jtest可以識別現有的測試,可以對其進行克隆和變異,以達到未測試的代碼部分。創建這些現有測試需要進行大量工作,Jtest中的克隆和變異功能可以提高測試創建投資的回報。
您應該爭取盡可能高的覆蓋率,但是在大多數情況下,在整個代碼庫上實現100%覆蓋率是不切實際的。我們將討論可以用作安全網的其他技術,以確保稍后再覆蓋修改后的代碼。
從功能的角度出發,當您擁有良好的覆蓋范圍時,就可以開始進行更改和修改測試。
3.改進隔離的舊代碼。
捕獲到系統的行為后,您可以開始修復違規,解決PR或應用要關注的更改,而將破壞現有功能的風險降至最低。Parasoft可以幫助您管理現有的技術債務,并將靜態分析違規等數據放入適當的工作流中,在這些工作流中可以輕松地對其進行優先級排序、抑制或解決,以提高應用程序的整體質量。每次構建之間的更改也應作為正在進行的過程的一部分進行監控,以確保軟件質量不會惡化。
解決遺留代碼中的技術債務的最佳時間是在進行更改時。報告的數據應包括在有關項目的總體統計信息中。技術債務可能不會立即對應用程序產生影響,但是您應該應用最佳實踐來系統地控制和管理它。在需要進行更改時,只要重構遺留代碼,就可以逐步減少債務。
此過程有助于確保更改范圍不會對現有功能造成負面影響,但您還需要確保團隊遵循良好的做法,不斷向前發展。繼續保持較高的覆蓋率并隨著代碼的發展編寫或更新測試需要在文化層面上予以支持。這就是為什么我們采用的技術可以在修改后的代碼(即新的或更改的代碼)不符合覆蓋政策時自動通知您。
通過分析指定基準構建之間的更改,您可以集中精力并監視整個代碼庫中的更改,以確保沒有任何漏洞。在整個代碼庫中實現100%的覆蓋率是不切實際的,但是通過監視修改后的代碼的覆蓋率,團隊可以專注于正在積極研究的代碼部分,并有信心測試所有更改。
總而言之,全球的軟件都基于已在團隊之間傳遞的代碼運行。 處理遺留代碼是日常工作。 隨著開發人員對維護或擴展功能進行更改,有關代碼知識的空白會帶來潛在的風險,此處使用的流程和技術應有助于您信心滿滿地承擔團隊中幾乎所有的代碼庫。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn