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