什么是代码重构
编辑在计算机编程和软件设计中,代码重构是重构现有计算机代码的过程——改变因式分解——而不改变其外部行为。重构旨在改进软件的设计、结构和/或实现(其非功能属性),同时保留其功能。重构的潜在优势可能包括提高代码的可读性和降低复杂性;这些可以提高源代码的可维护性并创建更简单、更简洁或更具表现力的内部架构或对象模型以提高可扩展性。重构的另一个潜在目标是提高性能。软件工程师面临着编写执行速度更快或使用更少内存的程序的持续挑战。
通常,重构应用一系列标准化的基本微重构,每一个(通常)都是计算机程序源代码中的微小变化,要么保留软件的行为,要么至少不修改其与功能要求的一致性。许多开发环境为执行这些基本重构的机械方面提供了自动化支持。如果做得好,代码重构可以帮助软件开发人员发现和修复隐藏或休眠的错误或漏洞通过简化底层逻辑和消除不必要的复杂程度,在系统中实现。如果做得不好,它可能无法满足不更改外部功能的要求,从而可能引入新的错误。
代码重构的好处
编辑重构活动有两大类好处。
- 可维护性。更容易修复错误,因为源代码易于阅读并且其作者的意图易于掌握。这可以通过将大型单片例程减少为一组单独的简洁、命名良好、单一用途的方法来实现。可以通过将方法移至更合适的类或删除误导性注释来实现。
- 可扩展性。如果应用程序使用可识别的设计模式,则更容易扩展应用程序的功能,并且它提供了一些以前可能不存在的灵活性。
性能工程可以消除程序中的低效率问题,即所谓的软件膨胀,这是由旨在最小化应用程序开发时间而不是运行时间的传统软件开发策略引起的。性能工程还可以针对运行它的硬件定制软件,例如,利用并行处理器和向量单元。
代码重构的挑战
编辑重构需要提取软件系统结构、数据模型和应用程序内部依赖关系,以获取现有软件系统的知识。团队的更替意味着对系统当前状态以及离职开发人员做出的设计决策的了解缺失或不准确。进一步的代码重构活动可能需要额外的努力来重新获得这些知识。重构活动会产生架构修改,这些修改会恶化软件系统的结构架构。这种恶化会影响架构属性,例如可维护性和可理解性,这可能导致软件系统的完全重新开发。
当使用提供有关算法和代码执行序列的数据的工具和技术时,代码重构活动受到软件智能的保护。为软件系统结构、数据模型和组件内依赖项的内部状态提供可理解的格式是形成高级理解然后细化需要修改的内容以及如何修改的视图的关键要素。
代码重构的测试
编辑应该在重构之前设置自动单元测试,以确保例程仍然按预期运行。当使用单个原子提交执行时,单元测试甚至可以为大型重构带来稳定性。允许跨多个项目的安全和原子重构的常用策略是将所有项目存储在单个存储库中,称为monorepo。
有了单元测试,重构就变成了一个迭代循环,即进行小程序转换,对其进行测试以确保正确性,然后再进行另一个小转换。如果在任何时候测试失败,最后的小更改将被撤消并以不同的方式重复。通过许多小步骤,程序从原来的位置移动到您想要的位置。为了使这个非常迭代的过程变得实用,测试必须运行得非常快,否则程序员将不得不花费大部分时间等待测试完成。极限编程和其他敏捷软件开发的支持者将此活动描述为软件开发周期的一个组成部分。
技术
编辑以下是一些微重构的示例;其中一些可能仅适用于某些语言或语言类型。可以在MartinFowler的重构书和网站中找到更长的列表。许多开发环境为这些微重构提供自动化支持。例如,程序员可以单击变量的名称,然后从上下文菜单中选择重构的“封装字段”。然后,IDE会提示您提供其他详细信息,通常是合理的默认值和代码更改的预览。在程序员确认后,它将在整个代码中执行所需的更改。
- 允许更多理解的技术
- 程序依赖图-数据和控制依赖的显式表示
- 系统依赖图-PDG之间过程调用的表示
- 软件智能——对初始状态进行逆向工程以了解现有的应用程序内依赖关系
- 允许更多抽象的技术
- 封装字段——强制代码使用getter和setter方法访问字段
- 泛化类型——创建更通用的类型以允许更多的代码共享
- 用状态/策略替换类型检查代码
- 用多态性替换条件
- 将代码分解成更多逻辑片段的技术
- 组件化将代码分解为可重用的语义单元,这些单元呈现清晰、定义明确、易于使用的接口。
- 提取类将部分代码从现有类移动到新类中。
- 提取方法,将较大方法的一部分转换为新方法。通过将代码分解成更小的部分,它更容易理解。这也适用于函数。
- 改进代码名称和位置的技术
- 移动方法或移动字段——移动到更合适的类或源文件
- 重命名方法或重命名字段-将名称更改为更好地揭示其用途的新名称
- Pullup–在面向对象编程(OOP)中,移动到超类
- 下推——在OOP中,移动到子类
- 自动克隆检测
硬件重构
编辑虽然术语重构最初仅指对软件代码的重构,但近年来用硬件描述语言编写的代码也被重构了。术语硬件重构被用作在硬件描述语言中重构代码的简写术语。由于大多数硬件工程师不认为硬件描述语言是编程语言,因此硬件重构将被视为与传统代码重构不同的领域。
Zeng和Huss提出了模拟硬件描述(在VHDL-AMS中)的自动重构。在他们的方法中,重构保留了硬件设计的模拟行为。改进的非功能测量是重构的代码可以由标准综合工具处理,而原始代码不能。Synopsys的同事MikeKeating也研究了数字硬件描述语言的重构,尽管是手动重构。他的目标是让复杂系统更容易理解,从而提高设计人员的生产力。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/131801/