版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
演講人:王曉波重構(gòu)的意義重構(gòu)-Refactoring重構(gòu)的定義重構(gòu)的目的重構(gòu)和重寫重構(gòu)
名詞對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。重構(gòu)
動詞使用一系列重構(gòu)的手法,在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu)。a2m.msup.com.cn重構(gòu)-
Refactoring保持行為不變a2m.msup.com.cn盡管重構(gòu)會對代碼的內(nèi)部結(jié)構(gòu)進(jìn)行調(diào)整,但其功能和對外表現(xiàn)必須保持一致。內(nèi)部優(yōu)化重構(gòu)關(guān)注的是代碼的內(nèi)部實(shí)現(xiàn),通過改善代碼結(jié)構(gòu)來使其更具模塊化、更易理解和維護(hù)。持續(xù)性貫穿在軟件開發(fā)的各個(gè)階段,而不是一次性的任務(wù)。持續(xù)的重構(gòu)可以防止代碼質(zhì)量在開發(fā)過程中逐漸惡化。重構(gòu)-
Refactoring目標(biāo)01.
提高可讀性a2m.msup.com.cn清晰且易于理解的代碼使開發(fā)人員能夠更快速地理解和上手03.
減少重復(fù)和相似代碼消除重復(fù)代碼,減少維護(hù)多個(gè)相似代碼片段的成本02.
增加可維護(hù)性使得錯(cuò)誤更容易被發(fā)現(xiàn)和修復(fù),添加功能變得更加高效率04.
提升項(xiàng)目性能在重構(gòu)過程中常常能夠發(fā)現(xiàn)并修復(fù)性能瓶頸重構(gòu)的目的重構(gòu)和重寫如果重寫比重構(gòu)還容易,就別重構(gòu)了,此時(shí)重寫反而是更高效和正確的選擇!局部范圍,逐步進(jìn)行的低風(fēng)險(xiǎn),不改變外部行為時(shí)間成本低,開發(fā)中同步進(jìn)行不涉及系統(tǒng)架構(gòu)重新設(shè)計(jì)a2m.msup.com.cn重構(gòu)重構(gòu)和重寫重寫全面的,大規(guī)模的改動高風(fēng)險(xiǎn),引入新Bug或不兼容時(shí)間成本高,暫停其他工作系統(tǒng)架構(gòu)整個(gè)重新設(shè)計(jì)原則和挑戰(zhàn)重構(gòu)的原則何時(shí)重構(gòu)產(chǎn)品經(jīng)理挑戰(zhàn)風(fēng)險(xiǎn)管理挑戰(zhàn)團(tuán)隊(duì)協(xié)作挑戰(zhàn)重構(gòu)的原則強(qiáng)調(diào)在保證代碼外部行為不變的前提下,通過逐步的、小規(guī)模的改動來優(yōu)化代碼的內(nèi)部結(jié)構(gòu)。要正確地進(jìn)行重構(gòu),前提是得有一套穩(wěn)固的測試集合,幫助我們避免疏漏。030102重構(gòu)的原則a2m.msup.com.cn保持行為不變保持已有的測試用例關(guān)注代碼可讀性,風(fēng)格統(tǒng)一關(guān)注重構(gòu)后的性能變化,逐步優(yōu)化性能優(yōu)化消除,重復(fù)或相似功能的代碼優(yōu)化代碼設(shè)計(jì)和代碼架構(gòu)新功能理解代碼撿垃圾代碼評審重構(gòu)的最佳時(shí)機(jī)就在添加新功能之前,比如:已經(jīng)有函數(shù)提供了我需要的大部分功能,做一個(gè)簡單的重構(gòu),就能快速完成功能。當(dāng)我們花費(fèi)了數(shù)分鐘才弄懂“這段代碼到底在做什么”的時(shí)候,就需要考慮重構(gòu)了。撿垃圾方式的重構(gòu),雖然我已經(jīng)理解代碼在做什么,但是發(fā)現(xiàn)它們做得比較差。復(fù)審代碼時(shí)做重構(gòu),當(dāng)我們做
code
review
的時(shí)候,提出一些建議,加入重構(gòu)。何時(shí)重構(gòu)a2m.msup.com.cn“怎么和經(jīng)理說重構(gòu)的事情?”經(jīng)理會認(rèn)為,重構(gòu)要么是在彌補(bǔ)過去犯下的錯(cuò)誤,要么是不增加價(jià)值的浪費(fèi)人力。如果團(tuán)隊(duì)的經(jīng)理不具備技術(shù)或研發(fā)思維,他們不理解代碼的健康對生產(chǎn)率的影響,那么就:不要告訴經(jīng)理!重構(gòu)能讓軟件的新功能開發(fā)的更快,受進(jìn)度驅(qū)動的經(jīng)理會要求我們盡快的完成任務(wù)。因?yàn)橹貥?gòu)能讓持續(xù)交付任務(wù)更快,所以我們就做重構(gòu)。來自產(chǎn)品經(jīng)理的挑戰(zhàn)a2m.msup.com.cn引入新Bug歷史項(xiàng)目兼容性來自風(fēng)險(xiǎn)管理的挑戰(zhàn)a2m.msup.com.cn現(xiàn)有代碼理解可能比較困難,特別是大型,歷史悠久的項(xiàng)目,代碼缺乏文檔,理解起來會更加困難。重構(gòu)可能帶來一些不可預(yù)見的副作用,引入新的Bug之類。所以需要驗(yàn)證行為不能改變,要有充分的測試覆蓋,如果測試功能不完整,會有風(fēng)險(xiǎn)。隨著技術(shù)的發(fā)展,可能需要將代碼遷移到新的框架或語言,這增加了重構(gòu)的復(fù)雜性,重構(gòu)時(shí)要考慮新舊技術(shù)棧的兼容性,避免引入新的問題。避免沖突團(tuán)隊(duì)成員可能對重構(gòu)有不同的看法,確保團(tuán)隊(duì)成員在重構(gòu)過程中保持同步,避免沖突和重復(fù)工作。a2m.msup.com.cn代碼風(fēng)格團(tuán)隊(duì)成員風(fēng)格不一致,可能導(dǎo)致重構(gòu)后的代碼風(fēng)格不統(tǒng)一??梢允褂么a風(fēng)格檢查工具,如Prettier、ESLint等,統(tǒng)一代碼風(fēng)格。資源分配重構(gòu)可能與其他團(tuán)隊(duì)的開發(fā)任務(wù)沖突,導(dǎo)致資源和時(shí)間分配的困難。將重構(gòu)任務(wù)拆分為多個(gè)小的、可管理的迭代,合理分配優(yōu)先級。新成員新成員可能對現(xiàn)有代碼和重構(gòu)計(jì)劃不熟悉,導(dǎo)致融入困難??梢源罱ü蚕碇R庫,幫助新成員快速上手。來自團(tuán)隊(duì)協(xié)作的挑戰(zhàn)代碼的壞味道壞代碼案例其他壞味道壞味道本身并不僅僅是錯(cuò)誤或bug,也是代碼質(zhì)量的警示信號。a2m.msup.com.cn理解和識別這些壞味道,對于保持代碼的可維護(hù)性和質(zhì)量至關(guān)重要。代碼的壞味道重復(fù)代碼大量重復(fù)這是一段獲取時(shí)間和分鐘的代碼在整個(gè)項(xiàng)目的
31
文件中有
61
段重復(fù)神秘變量命名代碼中的,m,m1,hour,hour1
都不是一個(gè)好名字壞代碼案例a2m.msup.com.cn面向字符串編碼這是一段
Go
語言代碼,Order是數(shù)據(jù)庫取出來來的訂單信息不使用類和對象的屬性,使用字符串的類型作為屬性的key,失去了編輯器和編譯期的檢查壞代碼案例a2m.msup.com.cn霰彈式修改這段代碼,將
order
對象的
is_pool_order
屬性轉(zhuǎn)為
int
類型的代碼,散落在項(xiàng)目的各個(gè)地方,如果要修改邏輯,需要修改項(xiàng)目的很多處壞代碼案例a2m.msup.com.cn錯(cuò)誤的利用數(shù)據(jù)類型的特性Go語言
中對時(shí)間類型
Format
是對時(shí)間的格式化,返回的類型是String代碼中的意圖很明顯,比較
start_time和
now
哪個(gè)時(shí)間更大。但是,代碼中卻使用了
String
類型的比較,雖然也能符合邏輯預(yù)期,但充滿著壞味道壞代碼案例a2m.msup.com.cn手搓拼裝 j
s
o
n 字符串看過很多壞味道的項(xiàng)目,代碼拼接
xml,json
等數(shù)據(jù),雖然能正確運(yùn)行,但是有極大的隱患。應(yīng)該使用struct
或
class
來讓程序序列化生成。另外,變量名拼寫也發(fā)生了錯(cuò)誤,pricePamars
猜測應(yīng)該是
priceParam
。壞代碼案例a2m.msup.com.cn定時(shí)炸彈這段
Python
代碼可讀性很差,第
3572
行,name[0][0]
有空指針潛在問題。For
循環(huán)的兩層嵌套,時(shí)間復(fù)雜度是
n*m,一般
循環(huán)嵌套
可能都有點(diǎn)壞味道。第
3585
行的
break,意圖不明顯,看到
最后
return
data的代碼,猜測意圖break應(yīng)該跳出所有For循環(huán),但顯然這里的break
沒有符合預(yù)期。壞代碼案例a2m.msup.com.cn在我電腦上好好的呀!強(qiáng)制的依賴某個(gè)運(yùn)行環(huán)境,導(dǎo)致項(xiàng)目在他的電腦上運(yùn)行的很好,其他環(huán)境就未必。壞代碼案例a2m.msup.com.cn過長參數(shù)列表描述:方法的參數(shù)列表過長,調(diào)用復(fù)雜。影響:增加了調(diào)用復(fù)雜度和理解難度。解決方法:使用數(shù)據(jù)類封裝參數(shù),或者采用方法重載。a2m.msup.com.cn01依戀情結(jié)描述:一個(gè)類頻繁訪問另一個(gè)類的數(shù)據(jù)和方法。影響:職責(zé)劃分不明確,類的內(nèi)聚性低。解決方法:將功能移動到更相關(guān)的類中,提高內(nèi)聚性。02神秘命名描述:變量、方法或類的命名不清晰,不能直觀反映其功能。影響:增加了代碼的理解難度。解決方法:使用清晰、描述性且一致的命名。03數(shù)據(jù)暴露描述:類直接暴露內(nèi)部數(shù)據(jù),違背了封裝原則。影響:降低了數(shù)據(jù)的安全性和代碼的維護(hù)性。解決方法:使用getter和setter方法訪問數(shù)據(jù),保持?jǐn)?shù)據(jù)的封裝性。注釋和壞味道當(dāng)你看到一段代碼有著長長的注釋,然后發(fā)現(xiàn)這些注釋之所以存在乃是因?yàn)榇a很糟糕,就嗅到了壞味道。其他壞味道04總結(jié)重構(gòu)壞代碼是一個(gè)持續(xù)不斷的過程,
通過識別代碼中的壞味道,
制定重構(gòu)計(jì)劃,
編寫和運(yùn)行測試,
逐步執(zhí)行重構(gòu),
持續(xù)集成和部署,
并通過團(tuán)隊(duì)協(xié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版企業(yè)工傷免責(zé)補(bǔ)償合同書版B版
- 2025年度共享辦公空間租賃協(xié)議延期及使用權(quán)轉(zhuǎn)讓合同4篇
- 電機(jī)操作培訓(xùn)課程提高工作效率與安全性
- 二零二五版汽車銷售融資擔(dān)保合同4篇
- 2024版護(hù)膚品代理合同模板
- 二零二五版旅游項(xiàng)目開發(fā)合同履行擔(dān)保書3篇
- 2024版營銷合同范本
- 2025年度臨時(shí)攤位租賃合同修訂版實(shí)施細(xì)則4篇
- 個(gè)人與個(gè)人之間2024年度股票買賣合同2篇
- 2025年度綠色生態(tài)住宅建設(shè)宅基地使用權(quán)轉(zhuǎn)讓協(xié)議書4篇
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點(diǎn)詳解
- 《萬方數(shù)據(jù)資源介紹》課件
- 第一章-地震工程學(xué)概論
- 2024年浙江省中考數(shù)學(xué)試題及答案
- 2025屆江蘇省南京高考?xì)v史一模試卷含解析
- 浙江省金華市金東區(qū)2022-2024年中考二模英語試題匯編:任務(wù)型閱讀
- 青島版(五四制)四年級數(shù)學(xué)下冊全冊課件
- 大健康行業(yè)研究課件
- 租賃汽車可行性報(bào)告
- 計(jì)算機(jī)輔助設(shè)計(jì)AutoCAD繪圖-課程教案
評論
0/150
提交評論