《4-陈皓-做“踏实”的代码重构.pdf》由会员分享,可在线阅读,更多相关《4-陈皓-做“踏实”的代码重构.pdf(35页珍藏版)》请在三个皮匠报告上搜索。
1、做“踏实”的代码重构2023 深圳站陈皓曾就职于通信领域和互联网领域大型企业,负责大型软件架构设计、代码质量提升、研发效能提升等工作兴趣领域:代码重构、架构设计,自动化测试2023 深圳站目录CONTENTS重构:披着羊皮的狼01 我们是不是关注错地方了?02 双向递进03 4 Tips04 重构过程的全景图05 2023 深圳站重构看起来对系统的质量、长期效率、人员提升都有正向作用,但往往过程中经常陷入困境系统/代码的多维度提升降低成本并加快软件开发过程人员能力提升时间远超预期引入大量新问题失去信心和信任理 想现 实重构:披着羊皮的狼可读性、可维护性、可扩展性、性能、新技术更快速的新增功能、
2、偿还技术债沉淀知识、养成习惯、提升技能.进退两难、被迫回退新问题的容忍低更低内部失去信心、外部失去信任、难有下次了失控状态2023 深圳站最大的“羊皮”“重构(Refactoring)是一种对软件内部结构的调整,目的是在不改变软件可观察行为的前提下,使其更容易理解和修改。”理论上现实中修改/调整(重构)/重写动作前提目的不影响发布/不影响功能可维护性/提升质量/优化性能踏实的重构?什么是重构?如何在修改/调整(重构)/重写可维护性/提升质量/优化性能的现实中进度可控不出问题?2023 深圳站踏实的重构?如何在修改/调整(重构)/重写可维护性/提升质量/优化性能的现实中进度可控不出问题?首先,不
3、出问题是进度可控的前提。那么,如何保证重构过程中,不出问题?质量防护网2023 深圳站CodeBeforeRefactoringOperationsCodeAfter质量防护网质量防护网思考:就算所有测试都通过了,重构后,是不是一定没问题?另外:不重构就很难加测试,不加测试又“不能”重构,不重构就很难加测试 加的测试很有可能是没有意义的,因为重构后,被测代码很可能没有了2023 深圳站CodeBeforeRefactoringOperationsCodeAfter质量防护网质量防护网思考:重构过程中,通常是哪个过程引入了问题?2023 深圳站3x+2y+4x+5y+y+3x=?2023 深圳站
4、3x+2y+4x+5y+y+3x=10 x+8yCodeBeforeCodeAfterRefactoringOperationsValidation:x=0,y=0 x=1,y=2Refactoring Operations=Equivalent Transformations(重构)(等价变换)为什么相等?2023 深圳站等价变换Equivalence Transformation验证Validation测试Testing关注点顺序在代码重构过程中,我们首先应该考虑的是,每一个操作是否是等价变换首先应该被考虑的然后,基于预期行为,针对“等价变换”进行验证然后,测试是否有非预期行为2023 深
5、圳站等价变换对于一个数学表达式或等式,通过一系列变换得到一个与原来等价的表达式或等式,即两者等价,但表达方式不同。重构一种对软件内部结构的调整,目的是在不改变软件可观察行为的前提下,使其更容易理解和修改。定义实例1.交换律2.结合律3.分配律4.合并同类项和因式分解5.平方差公式和平方和公式?1.Rename2.删除没被使用的函数3.移动函数位置4.抽取函数,替换消除完全重复的代码5.新写一个类,并没有使用6.2023 深圳站重构帮我们总结的“等价变换”方法6.1提炼函数(Extract Function)6.2内联函数(Inline Function)6.3提炼变量(Extract Vari
6、able)6.4内联变量(Inline Variable)6.5改变函数声明(Change Function Declaration)6.6封装变量(Encapsulate Variable)6.7变量改名(Rename Variable)6.8引入参数对象(Introduce Parameter Object)6.9函数组合成类(Combine Functions into Class)6.10函数组合成变换(Combine Functions into Transform)6.11拆分阶段(Split Phase)7.1封装记录(Encapsulate Record)7.2封装集合(Enc