Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >告诉大家代码重构有什么好处

告诉大家代码重构有什么好处

作者头像
IT大咖说
发布于 2022-03-08 09:10:10
发布于 2022-03-08 09:10:10
1.2K0
举报
文章被收录于专栏:IT大咖说IT大咖说

在本指南中,您将了解重构源代码的所有内容:好处、挑战、工具和最佳实践,以及重构和技术债务之间的区别。

一个人在他的笔记本电脑上工作A man working on his laptop computer

我们都在寻找清理代码、降低复杂性和改进功能的方法。重构提供了前进的道路。

◆ 本指南将涵盖以下主题:

  1. 什么是重构?
  2. 重构有什么好处?
  3. 技术债务与重构
  4. 重构指标
  5. 代码重构示例
  6. 代码重构工具
  7. 重构和工程经理面临的挑战
  8. 高级管理层对重构的支持
  9. 队支持和重构:冲刺还是马拉松?
  10. 文档和重构

◆ 什么是重构?

根据两本关于重构的书籍的作者 Martin Fowler的说法

“重构是改变软件系统的过程,它不会改变代码的外部行为,但会改善其内部结构。这是一种清理代码的严格方法,可以最大限度地减少引入错误的机会。本质上,当你重构时,你是在改进编写代码后的设计。”

◆ 重构有什么好处?

     源代码重构提供了许多优势。它将混乱、不正确和/或重复的代码变成干净的代码。它解决了多个开发人员贡献自己的代码时可能出现的标准化问题。重构提供了更高的可读性并提高了源代码的可维护性以及整体结构和功能。重构可以使代码更容易扩展和添加新功能。删除不必要的部分(例如重复)也可以使代码使用更少的内存并更快地执行。

     例如,在 2014 年,Kickstarter 工程师面临用户数量呈指数增长导致查询性能下降的挑战。作为回应,他们将 MySQL 查询重构为 Redis,并将典型的加载时间缩短了 100 毫秒以上,从而减少了加载时间的差异,并使网站整体速度更快。

◆ 技术债务与重构

      使用虚拟现实模拟器对抗窗户上的粘合剂的商人的全长Full length of businessman

简而言之,重构是消除或减少技术债务的一种方式。

重构对于保持长期的代码质量、安全性和性能至关重要。如果不定期进行保理,开发人员就会背负巨额的技术债务。随着错过更多代码重构的机会,这种债务会增加,因此,新的开发变得困难,尤其是基于遗留代码的开发。

◆ 重构指标

使用指标可以让您确定您真正需要对代码执行的主要修复操作的优先级。它阻止您尝试一次完成所有事情,并首先专注于最重要的任务。

此外,您需要衡量源代码重构效果的指标——这不仅仅是改变低效代码,而是改变低效代码以增加价值。**要获得真正的价值,您需要进行单元测试(例如单元测试失败的数量)和功能测试。其他指标可能包括发现更少的错误和降低圈复杂度——重构应该旨在降低复杂度。具有高复杂度的方法或函数(例如超过 350 行的那些)是很好的重构目标。

在工作流和任务方面,重构如何与更广泛的团队目标或里程碑相适应也是值得考虑的。这应该包括更小的代码大小和更易于理解的代码。

◆ 代码重构示例

代码重构的例子有很多,但为简洁起见,我们将重点介绍几个:

  • 红色、绿色、重构

重构与单元测试密切相关。最常见的形式之一是敏捷方法固有的测试驱动开发 (TDD)。在编写代码之前编写测试。本质上,测试应该驱动程序,说明代码应该做什么。

Red、Green、Refactor 是 TDD 的一个例子:

  • 红色:编写没有实现代码的测试套件,确保它失败。
  • 绿色:编写实现代码,足以让测试套件通过。
  • 重构:寻找优化和改进代码的方法。
  • 提取方法又名提取函数
  • 将现有方法中的一段代码移动到一个明确命名的新方法中,以解释其功能。这种技术有助于降低复杂性并提高代码的可读性。
  • 提取变量

如果您遇到一个难以理解的表达式,或者它在整个代码中的多个位置重复,则提取变量重构可以将此类表达式的结果或其部分放入一个不太复杂且更易于理解的单独变量中。这降低了复杂性和代码重复。

  • 抽象分支

抽象分支用于以渐进的方式对软件系统进行大规模更改,允许您在更改仍在进行时定期发布系统。这消除了在尝试合并代码时可能出现问题的分支上重构代码的复杂性。

  • 组合方法

过长的代码难以理解且难以更改。Compose 方法是指可用于简化方法和删除代码重复的一系列操作。其中包括 Inline Method、Inline Temp、Replace Temp with Query、拆分临时变量和删除参数分配。

◆ 代码重构工具

您需要专业的重构工具吗?Martin Fowler 说自动化工具很有帮助,但不是必不可少的。他指出:

*“许多语言都有可以自动执行许多常见重构的 IDE。这些是我的工具包中非常有价值的部分,可以让我更快地进行重构。但这些工具并不是必不可少的——我经常在没有工具支持的情况下使用编程语言工作,在这种情况下,我依赖于采取小步骤,并使用频繁的测试来检测错误。”

许多开发环境使重构的机械方面自动化。关键的代码重构工具是:

  • Visual studio intellicode
  • Eclipse IDE
  • Spring Tool Suite 4
  • Rider
  • IntelliJ IDEA
  • SonarQube
  • Stepsize

◆ 重构和工程经理面临的挑战

要解决导致需要重构的问题,需要探索公司的运作方式。在开始重构过程之前,请回答几个问题:

  • 哪些任务获得第一优先权?
  • 发展速度如何?
  • 开发人员是否感到快速发布代码的压力?
  • 有哪些流程来处理技术债务?
  • 进行了哪些类型的代码审查?
  • 您的团队是否具备重构的适当技能?
  • 公司的文件标准是什么?

如果不解决导致需要重构的潜在问题,问题只会激增。

◆ 高级管理层对重构的支持

投资基础设施和维护在您的公司中可能并不受欢迎。

很容易争辩说,重构所花费的时间就是远离新工作所花费的时间。

但值得关注重构的更大好处以及它们与工作流、客户、收入和业务增长的关系。重构做得好,可以改进需要运行良好的代码,以提供吸引新客户和回头客的有效更新和趋势功能。这就是软件公司即使在产品成功发布很久之后仍然保持竞争力的方式。

更好的是通过量化团队当前花费多少时间来修复由于原始代码中的问题而导致的错误或错误,从而获得高级管理层对重构的支持。具体来说,是一天一小时吗?一天两小时?保持一周以上的记录,当您得知您的团队每年花费数周或数月来修复遗留代码时,您可能会感到震惊。

◆ 团队支持和重构:冲刺还是马拉松?

计算机网络Computer network

重构对你的团队来说很难吗?一提到它,人们会呻吟吗?成功重构的最大标志是计划好的、有目的地和记录的操作。Ron Jeffries 是极限编程软件开发方法的三位创始人之一,他将重构比作清理领域:

“我们采用我们被要求构建的下一个功能,而不是绕过所有杂草和灌木,我们花时间清理其中一些路径。”

然而,他强调糟糕的代码需要很长时间才能清理干净,并支持一种比简单地深入研究更深思熟虑的方法:

“我们改进了我们工作的代码,而忽略了我们不需要工作的代码。很可能,我们会再次访问这个地方。

通常在同一个 Sprint 中,我们发现后续功能实际上使用了我们之前清理过的区域。我们立即开始从增量重构中受益。如果我们等到大批量进行,我们会付出更多努力,将任何福利推迟到更晚,并且可能会在尚未提供福利的地方浪费精力。”

产品工程师兼首席技术官Andreas Klinger是 Fix-it Friday 的粉丝。

“Fix-it Friday 的规则很简单:除非您当前的项目着火了,否则请利用周五来投资进行一些小的改进。让工程师选择他们的工作。尽量不要通过微观管理从中获取“乐趣”。有些人会尝试新的库。有些会从积压中删除错误。两者都很好。尝试鼓励任务的平衡。”

无论您采用哪种方法,都需要加以考虑。询问您的团队哪些代码最妨碍他们的工作效率。

  • 什么代码修复会对您的其他代码产生最大的影响?
  • 哪些修复将提供最大的回报?

您不太可能有大量时间专门用于重构而牺牲所有其他项目,但不要低估定期、一致、专用的小型重构的影响。这些加起来并结合起来,有一个显着的好处。

◆ 文档和重构

标准化命名约定等文档可以确保每个人都在同一页面上。Xerox 高级开发人员对审查重构的研究发现,缺乏文档是最大的挑战之一。

记录您的重构工作会导致花费时间,并为未来的团队成员提供上下文。

另外,记录你的成功——重构的最大收获是什么?这些可以纳入同行评审吗?

◆ 淹没在需要重构和技术债务的代码中?

选择一个比较好的编辑器优先的问题跟踪器,用于帮助工程师实现健康的代码库:

  • 直接从编辑器创建和查看代码问题
  • 跟踪和优先考虑代码改进,如技术债务
  • 使用我们的 Jira 集成为您的 sprint 添加关键问题

来源:

https://www.cnblogs.com/microstone123/p/15948784.html

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
代码重构之道
导语 最近看到有同学提问:“代码重构有意义吗?”,“关于代码重构有什么好的方法论吗?”,个人对代码重构非常感兴趣,在13年就开发接触代码重构的概念,学习相关理论方法,一直在坚持实践,现在基本已养成一种习惯了,所以周末系统梳理了重构原理、相关概念和操作技巧,抛砖引玉,跟大家分享交流。 什么是重构? Refactoring是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高其可理解性,降低其修改成本。 为什么重构? 1.改进软件的设计 《重构》里有一段话非常有启发性:“一开始我所做的重构都像这样停
QQ音乐前端团队
2020/07/21
1.2K0
如何进行代码重构以提高代码质量和可维护性?
代码重构是指对已有的代码进行优化和改进,以提高其质量、可读性和可维护性的过程。下面是一些常用的方法和技巧来进行代码重构。
程序员阿伟
2024/12/09
1960
深度剖析技术债务对项目周期的隐形侵蚀与破解之道:评估技术债务对项目周期的影响
在软件开发的浩瀚宇宙中,技术债务是一个无法忽视的星际尘埃,它悄无声息地积累,却能在不经意间成为阻碍项目前行的巨石。技术债务,这个由Ward Cunningham在1992年提出的比喻,形象地描绘了在软件开发过程中因采取快捷方式或妥协方案而累积的潜在额外工作。本文旨在深度剖析技术债务如何在无形中侵蚀项目周期,探讨其影响机制,并提出行之有效的破解之道,以期为项目管理者和开发者提供一份导航图,助其穿越技术债务的迷雾,确保项目的顺利推进。
Towserliu
2024/06/28
2260
深度剖析技术债务对项目周期的隐形侵蚀与破解之道:评估技术债务对项目周期的影响
代码重构策略
1.添加新功能前:在添加新功能之前,如果发现现有的代码结构不够清晰或者设计不合理,那么进行重构可以帮助更好地实现新功能,并减少潜在的问题。
一个风轻云淡
2024/06/15
2410
技术债务在工作中意味着什么
技术债务被称为“债务”,因为你要缴利息。打个比分如果你借钱,你就得缴利息。只要你不还债,利息就会加到你的收入中。如果你还让利息加到债务中,那么随着时间的推移,利息本身就会超过你的收入。
mariolu
2024/07/05
1230
如何将技术债务纳入路线图
多年来,Honeycomb 稳步增长,吸引了更多客户的同时也面临着扩展的挑战。伴随着成长的阵痛,Honeycomb 学习、适应,克服了一个又一个的障碍。这其中也伴随着各种各样的副作用,每一种都不一样,每一种都不可预测,每一种都将公司的系统推向了极限。尽管面临着这些挑战,该组织的基础设施仍然保持稳健,虽然我们在遇到新的意外情况时也会有点紧张。
深度学习与Python
2024/04/13
1550
如何将技术债务纳入路线图
每一座屎山代码背后,都藏着一堆熟读代码规范的研发
韩寒在《他的国》中写道:“我们懂很多道理,却依然过不好这一生”,人们虽然知道很多道理,但并不一定能将这些道理应用到实际生活中。这种现象在生活中很常见,我们听了很多的成功学的道理,但实际上,成功和幸福不是仅仅靠这些道理就能实现的,需要不断地努力和实践,才能实现自己的目标。而在开发的过程中也会遇到类似的问题,明明熟读《代码整洁之道》,却依旧只能写低效代码,行业内经常调侃“一个优秀的程序员可以带动多人就业”,这些中间欠缺的是什么?如何快速落实?本文将从几个方面进行分析,欢迎阅读。
腾讯云开发者
2023/09/07
5230
每一座屎山代码背后,都藏着一堆熟读代码规范的研发
2021年,是时候把技术债务管理提上日程了
开发人员面临着前所未有的压力:从传统的基础设施转移到现代的基础设施,减少效率低下的情况,并创建构建客户满意度和增加收入的产品。许多企业都在以DevOps的思维方式前进,但在他们前进的过程中,他们可能会忘记一件事,技术债务。的确,开发者可能会快速移动并破坏某些内容,但却从未真正去修复它们。因此,技术债务的积累,导致工程生产力的下降和生产成本的上升。
陈哥聊测试
2021/02/25
3880
Go代码重构:23倍的性能爆增
几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构。
sunsky
2020/08/20
7240
整洁代码之道——重构
写在前面 现在的软件系统开发难度主要在于其复杂度和规模,客户需求也不再像Winston Royce瀑布模型期望那样在系统编码前完成所有的设计满足用户软件需求。在这个信息爆炸技术日新月异的时代,需求总是在不断的变化,随之在2001年业界17位大牛聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场,提出了“Agile”(敏捷)软件开发价值观,并在他们的努力推动下,开始在业界流行起来。在《代码整洁之道》一书中提出:一种软件质量,可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比,
wangxl
2018/03/08
1.6K0
整洁代码之道——重构
软件架构:问题起源和应对
在职业的某个阶段,许多开发人员都会面对这样一个挑战:软件架构变得非常复杂,缺乏清晰的组织结构,甚至对最有经验的开发者来说也是一项艰巨的任务。尤其是在加入一家新公司时,这种情况更为常见。你可能会被要求接手一个遗留项目,或者加入一个已经在进行的团队。这时候,最初的反应往往是沮丧。抱怨的声音此起彼伏:代码缺乏测试,需要在多个地方进行修改,甚至连最基本的标准都没有。这些都是经常遇到的问题。
FunTester
2025/01/23
1010
软件架构:问题起源和应对
代码重构和测试驱动开发(TDD)的区别和联系
在软件开发过程中,代码重构和测试驱动开发(TDD)是两种常见的技术实践,它们旨在改善代码质量、可维护性和可扩展性。虽然它们的目标有所不同,但它们之间存在一定的联系。本文将介绍代码重构和TDD的区别和联系,包括它们的目标、技巧和好处。
Echo_Wish
2024/02/29
1820
程序员是如何看待“祖传代码”的?
祖传代码是软件开发历史上的一个见证。它记录了过去几十年甚至更长时间的技术发展和演变过程。祖传代码不仅仅是代码本身,它还承载着历史、文化、教育和知识的价值。对祖传代码的尊重和合理利用,可以帮助我们更好地理解过去,指导现在,并启发未来。
正在走向自律
2024/12/18
1450
程序员是如何看待“祖传代码”的?
代码质量与技术债
我们可以通过各种类型的检测手段来给出其质量高低的度量。但是,如果直接拿出一段源代码放在我们面前,问这段代码的质量好坏时,我们又该如何作答呢?
腾讯移动品质中心TMQ
2018/06/22
3.1K3
代码重构之道
如果我纯粹为今天工作,明天我将完全无法工作。 -- 某子 程序员要面向未来编程。代码重构永远是程序员们无法回避的话题,当你的软件在编写的那一刻起,重构就不可避免。做一个系统,我们为什么要费劲地不断抽象,竭尽全力让自己的代码能够被重用,说白了就是让我们今日所付出的时间,让未来的我们能够更轻松地工作而已。 有位读者让我就 Martin Fowler 的『重构 - 改善既有代码的设计』一书,谈谈重构。我诚惶诚恐。这本书我很久很久以前买过,至今还躺在北京家中的书柜里;当时对系统领悟还不够深,所以很多思想都并未参透,
tyrchen
2018/03/28
9910
代码重构之道
代码重构新手教程:如何将烂代码变成好代码?
作者 | 王莉敏 策划 | 蔡芳芳 作为有几年工作经验的程序员,都会对 bad code 不满意。如何将烂代码变成好代码,本文将由浅入深、一步步带你理解重构的奥秘,让你对重构有个基本的了解。本文基于文章《The Simple Ways to Refactor Terrible Code》编译整理而成。 任何一个有几年工作经验的程序员都经历过这样的场景:回顾早期写的代码,会陷入深深的怀疑,这么烂的代码是我写的吗?相比起刚入行时候的你,这几年不管是自己发奋学习,如阅读《编程模式》、《重构:改善现有代码的设计》等
深度学习与Python
2023/04/01
7190
代码重构新手教程:如何将烂代码变成好代码?
开发高质量软件的5大原则
多少次的惨痛教训告诉我们,在软件应用发布维护版本或者补丁之前,应该避免使用其最新版本。虽然每个人都知道初始发布版本V和稳定发布版本V.n之间存在软件质量鸿沟,这个问题却一直没有得到解决。 本文将会讨论5个具有可操作性的原则,以帮助开发团队跨越质量鸿沟 1. 使用代码覆盖率反映测试完整性 软件测试的目的都是为了保证软件能在最终用户使用时是正常运行的。然而,软件测试面临着挑战,如何保证测试的完整性?很多开发组织会制定测试规程去匹配需求文档或者用户文档。这种测试方法可以验证正常操作路径,但是测试边界、错误场景都无
DevOps时代
2018/02/02
2.2K0
开发高质量软件的5大原则
用大模型API优化工作流:一次代码重构的AI之旅
在数字化转型的浪潮中,AI 技术正逐渐渗透到各个领域,改变着我们的工作方式。近期,我经历了一次利用大模型 API 对工作流进行优化的代码重构项目,收获颇丰,在此与大家分享这段充满挑战与创新的 AI 之旅。
江南清风起
2025/03/17
1250
从单体迁移到微服务的7个重要原则
多年来,我多次参与并密切观察了将单体遗留系统迁移到微服务架构的工作。通过这些痛苦的经历,我学到了很多,掉进过很多陷阱,也遇到过很多挑战。其中的一次尝试让我个人损失了一大笔钱,同时也是毁掉一家相关公司的一个关键因素。在这里我不详述细节,但我肯定不想让别人也经历这样的痛苦。
深度学习与Python
2020/12/17
4000
产品经理如何帮助减少技术债务 ?
产品经理拥有广泛的知识,能够接触到公司的不同部门和利益相关者。这使得他们处于一个理想的位置,可以围绕预防和应对技术债务创造一种工作文化。我们提供了一些有用的策略。
陈哥聊测试
2021/03/03
4500
相关推荐
代码重构之道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档