版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
演讲人:王晓波重构的意义重构-Refactoring重构的定义重构的目的重构和重写重构
名词对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构
动词使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构。a2m.msup.com.cn重构-
Refactoring保持行为不变a2m.msup.com.cn尽管重构会对代码的内部结构进行调整,但其功能和对外表现必须保持一致。内部优化重构关注的是代码的内部实现,通过改善代码结构来使其更具模块化、更易理解和维护。持续性贯穿在软件开发的各个阶段,而不是一次性的任务。持续的重构可以防止代码质量在开发过程中逐渐恶化。重构-
Refactoring目标01.
提高可读性a2m.msup.com.cn清晰且易于理解的代码使开发人员能够更快速地理解和上手03.
减少重复和相似代码消除重复代码,减少维护多个相似代码片段的成本02.
增加可维护性使得错误更容易被发现和修复,添加功能变得更加高效率04.
提升项目性能在重构过程中常常能够发现并修复性能瓶颈重构的目的重构和重写如果重写比重构还容易,就别重构了,此时重写反而是更高效和正确的选择!局部范围,逐步进行的低风险,不改变外部行为时间成本低,开发中同步进行不涉及系统架构重新设计a2m.msup.com.cn重构重构和重写重写全面的,大规模的改动高风险,引入新Bug或不兼容时间成本高,暂停其他工作系统架构整个重新设计原则和挑战重构的原则何时重构产品经理挑战风险管理挑战团队协作挑战重构的原则强调在保证代码外部行为不变的前提下,通过逐步的、小规模的改动来优化代码的内部结构。要正确地进行重构,前提是得有一套稳固的测试集合,帮助我们避免疏漏。030102重构的原则a2m.msup.com.cn保持行为不变保持已有的测试用例关注代码可读性,风格统一关注重构后的性能变化,逐步优化性能优化消除,重复或相似功能的代码优化代码设计和代码架构新功能理解代码捡垃圾代码评审重构的最佳时机就在添加新功能之前,比如:已经有函数提供了我需要的大部分功能,做一个简单的重构,就能快速完成功能。当我们花费了数分钟才弄懂“这段代码到底在做什么”的时候,就需要考虑重构了。捡垃圾方式的重构,虽然我已经理解代码在做什么,但是发现它们做得比较差。复审代码时做重构,当我们做
code
review
的时候,提出一些建议,加入重构。何时重构a2m.msup.com.cn“怎么和经理说重构的事情?”经理会认为,重构要么是在弥补过去犯下的错误,要么是不增加价值的浪费人力。如果团队的经理不具备技术或研发思维,他们不理解代码的健康对生产率的影响,那么就:不要告诉经理!重构能让软件的新功能开发的更快,受进度驱动的经理会要求我们尽快的完成任务。因为重构能让持续交付任务更快,所以我们就做重构。来自产品经理的挑战a2m.msup.com.cn引入新Bug历史项目兼容性来自风险管理的挑战a2m.msup.com.cn现有代码理解可能比较困难,特别是大型,历史悠久的项目,代码缺乏文档,理解起来会更加困难。重构可能带来一些不可预见的副作用,引入新的Bug之类。所以需要验证行为不能改变,要有充分的测试覆盖,如果测试功能不完整,会有风险。随着技术的发展,可能需要将代码迁移到新的框架或语言,这增加了重构的复杂性,重构时要考虑新旧技术栈的兼容性,避免引入新的问题。避免冲突团队成员可能对重构有不同的看法,确保团队成员在重构过程中保持同步,避免冲突和重复工作。a2m.msup.com.cn代码风格团队成员风格不一致,可能导致重构后的代码风格不统一。可以使用代码风格检查工具,如Prettier、ESLint等,统一代码风格。资源分配重构可能与其他团队的开发任务冲突,导致资源和时间分配的困难。将重构任务拆分为多个小的、可管理的迭代,合理分配优先级。新成员新成员可能对现有代码和重构计划不熟悉,导致融入困难。可以搭建共享知识库,帮助新成员快速上手。来自团队协作的挑战代码的坏味道坏代码案例其他坏味道坏味道本身并不仅仅是错误或bug,也是代码质量的警示信号。a2m.msup.com.cn理解和识别这些坏味道,对于保持代码的可维护性和质量至关重要。代码的坏味道重复代码大量重复这是一段获取时间和分钟的代码在整个项目的
31
文件中有
61
段重复神秘变量命名代码中的,m,m1,hour,hour1
都不是一个好名字坏代码案例a2m.msup.com.cn面向字符串编码这是一段
Go
语言代码,Order是数据库取出来来的订单信息不使用类和对象的属性,使用字符串的类型作为属性的key,失去了编辑器和编译期的检查坏代码案例a2m.msup.com.cn霰弹式修改这段代码,将
order
对象的
is_pool_order
属性转为
int
类型的代码,散落在项目的各个地方,如果要修改逻辑,需要修改项目的很多处坏代码案例a2m.msup.com.cn错误的利用数据类型的特性Go语言
中对时间类型
Format
是对时间的格式化,返回的类型是String代码中的意图很明显,比较
start_time和
now
哪个时间更大。但是,代码中却使用了
String
类型的比较,虽然也能符合逻辑预期,但充满着坏味道坏代码案例a2m.msup.com.cn手搓拼装 j
s
o
n 字符串看过很多坏味道的项目,代码拼接
xml,json
等数据,虽然能正确运行,但是有极大的隐患。应该使用struct
或
class
来让程序序列化生成。另外,变量名拼写也发生了错误,pricePamars
猜测应该是
priceParam
。坏代码案例a2m.msup.com.cn定时炸弹这段
Python
代码可读性很差,第
3572
行,name[0][0]
有空指针潜在问题。For
循环的两层嵌套,时间复杂度是
n*m,一般
循环嵌套
可能都有点坏味道。第
3585
行的
break,意图不明显,看到
最后
return
data的代码,猜测意图break应该跳出所有For循环,但显然这里的break
没有符合预期。坏代码案例a2m.msup.com.cn在我电脑上好好的呀!强制的依赖某个运行环境,导致项目在他的电脑上运行的很好,其他环境就未必。坏代码案例a2m.msup.com.cn过长参数列表描述:方法的参数列表过长,调用复杂。影响:增加了调用复杂度和理解难度。解决方法:使用数据类封装参数,或者采用方法重载。a2m.msup.com.cn01依恋情结描述:一个类频繁访问另一个类的数据和方法。影响:职责划分不明确,类的内聚性低。解决方法:将功能移动到更相关的类中,提高内聚性。02神秘命名描述:变量、方法或类的命名不清晰,不能直观反映其功能。影响:增加了代码的理解难度。解决方法:使用清晰、描述性且一致的命名。03数据暴露描述:类直接暴露内部数据,违背了封装原则。影响:降低了数据的安全性和代码的维护性。解决方法:使用getter和setter方法访问数据,保持数据的封装性。注释和坏味道当你看到一段代码有着长长的注释,然后发现这些注释之所以存在乃是因为代码很糟糕,就嗅到了坏味道。其他坏味道04总结重构坏代码是一个持续不断的过程,
通过识别代码中的坏味道,
制定重构计划,
编写和运行测试,
逐步执行重构,
持续集成和部署,
并通过团队协
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版企业工伤免责补偿合同书版B版
- 2025年度共享办公空间租赁协议延期及使用权转让合同4篇
- 电机操作培训课程提高工作效率与安全性
- 二零二五版汽车销售融资担保合同4篇
- 2024版护肤品代理合同模板
- 二零二五版旅游项目开发合同履行担保书3篇
- 2024版营销合同范本
- 2025年度临时摊位租赁合同修订版实施细则4篇
- 个人与个人之间2024年度股票买卖合同2篇
- 2025年度绿色生态住宅建设宅基地使用权转让协议书4篇
- 物业民法典知识培训课件
- 2023年初中毕业生信息技术中考知识点详解
- 《万方数据资源介绍》课件
- 第一章-地震工程学概论
- 2024年浙江省中考数学试题及答案
- 2025届江苏省南京高考历史一模试卷含解析
- 浙江省金华市金东区2022-2024年中考二模英语试题汇编:任务型阅读
- 青岛版(五四制)四年级数学下册全册课件
- 大健康行业研究课件
- 租赁汽车可行性报告
- 计算机辅助设计AutoCAD绘图-课程教案
评论
0/150
提交评论