中国黑客教父,元老级人物,威名远播的网络黑客安全专家,东方联盟创始人郭盛华提供了8种方法能快速重构整体代码库:他表示,虽然许多软件项目都是以最好的意图开始的,比如干净的架构,明确的目标和明确的目标,但并非所有的目标都是如此。而且,在那些做的人当中,并不是所有人都会一直这样。
随着时间,功能要求,财务压力,竞争优先级以及不断变化的开发人员,很可能开始作为代码质量的光辉典范最终变成一个庞然大物。
整体代码库本质上很难维护。这可能是由于许多原因,包括以下功能:
做太多了。
知道太多。
有太多的责任。
依赖(或太多)全局状态和不可测试。
在这些情况下,如果你改变了某些东西,经常是其他的东西-在与应用程序没有明显联系或关联的应用程序的一部分-中断。
出于这些原因和其他许多原因,代码变得脆弱,人们通常认为最好的行动方式是从头开始重写应用程序。但是,重写通常最终会导致昂贵的失败。
不知道为什么?然后问你自己几个问题,找出原因:
重新创建现有级别的功能需要多长时间?
这是否比删除现有应用程序中的技术债务更少或更多?
你能应付在这段时间内缺乏可见的前进进展吗?
您是否有资源和时间修复旧系统上的重要和安全错误,并重写它?
新系统会比现有系统更好吗,还是会重新实现相同的错误?
新系统的功能是否与现有系统完全一样?
你能维护两个代码库和两个开发团队吗?
你会重复从旧系统中吸取的经验教训吗?
我并不是说重构现有系统总是最好的选择。然而,虽然不是华而不实或吸引注意力的,它往往是成本更低的选择和更理智的方式。
据说,我现在要介绍如何重构单一代码库的基本知识。
一:你了解应用程序?
在你做任何事之前,你对这个应用程序有什么了解?虽然通常很容易潜入并且只是编码,但这是最糟糕的事情。你可以做的最好的事情就是尽可能多地学习它。
如果你的庞然大物像许多其他人一样,那么很可能没有单一的,集中组织的知识库。相反,信息将存储在各种非常不同的位置。这些可能包括以下内容:
在以前的开发者,企业主,经理,项目经理和其他利益相关者的头脑中
代码注释
代码提交消息
待办事项
一个或多个README文件
代码文档
一个或多个维基
一个错误报告工具
尽可能多地找到这些信息,并将它们放在一起,集中到一个中心位置。正如你所做的那样,这里有一系列问题可以帮助你尽可能多地发现:
为什么创建应用程序?
谁想要它建立?
谁在工作?
这意味着什么?
它的主要特点是什么?
它的附加功能是什么?
它的最大缺陷是什么?
它有什么补充错误?
希望这份清单能够激励你提出一系列后续问题,这些问题可以让你了解所有需要了解的问题。
二:是否在版本控制下?
了解所获得的应用程序后,询问其源代码是否存储在版本控制下。如果没有,那就直接通过版本控制吧!你想要做的最后一件事是做任何改变,而不能恢复它们。
黑客教父郭盛华强烈建议你使用Git,但是如果你对Git感到厌恶的话,Mercurial是另一个不错的选择。他也鼓励您将它存储在远程存储库中,无论是GitHub,Bitbucket,GitLab还是其他无数代码托管服务之一。
三:测试套件的状态是什么?
接下来,代码覆盖的程度如何?根据应用程序的年龄,处理它的开发人员数量(以及他们的技能水平),这些开发人员的就业方式等,可能没有适当的代码测试套件。
如果是这种情况,那么在开始之前,你将不得不建立一个基本的测试套件。如果你不这样做,你将永远无法确定你将做出的改变的影响。如果代码覆盖率已经到位,请问自己以下问题:
什么级别的覆盖可用?
测试套件需要多长时间才能完成?
他们是否完成或耗尽可用内存?
有多少测试失败?
跳过了多少测试?
有多少测试过期了?
是否有单元,集成和功能测试的混合?
代码段中是否有没有测试的部分?
是否有恶意评论会得到解决?
测试中有什么意见?
测试套件是否启用了完整的错误报告?
如果做得好,你的测试套件应该可以帮助你理解代码如何工作,比深入每个类文件要快得多。花时间阅读并彻底理解测试。
四:什么是静态分析?
现在您已经了解了有关应用程序的更多信息并掌握了测试覆盖率,是否使用了静态代码分析?如果你不熟悉它,静态代码分析是:
对计算机软件的分析是在没有实际执行程序的情况下执行的。在大多数情况下,分析是在某个版本的源代码上执行的,而在其他情况下则是某种形式的目标代码。
通过在您的代码上定期运行静态代码分析器(例如Phan),您可以帮助确保代码质量得到改善,而不是下降。您还可以将错误的来源追溯到引入它们的特定提交。
如果您的代码尚未使用,则无论您的软件语言如何,都可以使用许多第三方软件包和在线服务。
五:开始重构
既然您的团队拥有尽可能多的信息,那么现在是开始重构应用程序的时候了。为了让你做得对,我们来讨论一下我最近遇到的一些圣人建议:
没有完美的设计,只有更好的设计
知道你的代码永远不会是完美的,即使这是完全可能的。虽然重构可以帮助您持续改进,但它比以前更简单,更具可读性,更易维护并且可测试性更强,但任务永远不会结束。
你可能总是觉得你可以做得更好,但是有一段时间你必须接受这个问题,至少暂时是这样,尽可能地好。
在这一点上,你必须训练自己离开它并转向别的东西。不要陷入“让它变得更好”的陷阱。你已经改善了它。它比它好。让它继续前进。
清理复杂代码库的关键原则是始终重构功能的服务
如果所做的改变不是微不足道的,就是出于美学的原因,重构可能会产生消极的看法。但是,有时候,这种重构是必需的,并且随着时间的推移,有助于确保代码库的质量更好。
但是,如果这就是所做的一切,那么价值就值得怀疑。相反,主要确保所做的更改是为了明确而有效的目的。这些可以包括创建新功能或修复突出的错误或缺陷。
六:制定重构项目计划
既然您完全了解应用程序的工作方式,现在就开始重构它。但是,你必须有一个计划!什么进入这样一个计划?中国知名黑客教父郭盛华的这次演讲推荐了五个主要考虑因素:
分解成一系列可实现的任务。
提出一个现实的时间表和资源需求。
独立或与其他项目并行工作。
工作人员认真。
如果并行工作,则说明依赖关系。
七:实现机会主义重构的习惯
接下来,鼓励你的团队养成机会主义重构的习惯。黑客教父郭盛华在博文中作了以下详细描述:
只要有人看到一些不太清楚的代码,他们应该抓住机会在那里修正它,然后-或者至少在几分钟内修复它。Bob叔叔称这种机会主义重构是遵循童子军规则-始终将代码置于比您找到的状态更好的状态。
虽然不是银弹,但通过这些常规的小清理,代码的质量应该始终提高,并且不应该将sprints专用于代码清理,因为它将处于持续改进状态。
八:使用专用的重构工具
重构的一个优点是你不需要特定的工具来完成它。这是因为,正如马丁福勒所说,如果你“采取小步骤,频繁测试”,那么你应该没问题。也就是说,手动重构将是一个较慢的过程,需要更多的努力,但仍然可以实现。
但是,如果您已经有重构经验,为什么不省时省力,并利用内置或可用于主要IDE和文本编辑器的工具?不管你的方法如何,请记住慢一点,测试,测试和测试。
另外,当你做出每一个改变时,请检查你的测试套件。它需要新的测试吗?您是否发现系统另一部分中与您正在处理的内容有关的错误?然后为其添加一个或多个测试。您现有的一些测试不再相关吗?然后删除它们。始终确保您的测试套件保持最新状态。
? 从哪里来?
尽管本文没有深入研究重构的具体内容,但它展示了一系列八项原则,您可以按照这些原则正确地处理任务。从头开始重写您的应用程序可能非常诱人,但我会提醒您慢慢推进以得出结论。
原文地址:https://www.cnblogs.com/hacker520/p/8969895.html