黑客教父郭盛华:8种方法能快速重构整体代码库

Posted 黑客爱好者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑客教父郭盛华:8种方法能快速重构整体代码库相关的知识,希望对你有一定的参考价值。

  中国黑客教父,元老级人物,威名远播的网络黑客安全专家,东方联盟创始人郭盛华提供了8种方法能快速重构整体代码库:他表示,虽然许多软件项目都是以最好的意图开始的,比如干净的架构,明确的目标和明确的目标,但并非所有的目标都是如此。而且,在那些做的人当中,并不是所有人都会一直这样。

技术分享图片

  随着时间,功能要求,财务压力,竞争优先级以及不断变化的开发人员,很可能开始作为代码质量的光辉典范最终变成一个庞然大物。

  整体代码库本质上很难维护。这可能是由于许多原因,包括以下功能:

  做太多了。

  知道太多。

  有太多的责任。

  依赖(或太多)全局状态和不可测试。

  在这些情况下,如果你改变了某些东西,经常是其他的东西-在与应用程序没有明显联系或关联的应用程序的一部分-中断。

  出于这些原因和其他许多原因,代码变得脆弱,人们通常认为最好的行动方式是从头开始重写应用程序。但是,重写通常最终会导致昂贵的失败。

技术分享图片

  不知道为什么?然后问你自己几个问题,找出原因:

  重新创建现有级别的功能需要多长时间?

  这是否比删除现有应用程序中的技术债务更少或更多?

  你能应付在这段时间内缺乏可见的前进进展吗?

  您是否有资源和时间修复旧系统上的重要和安全错误,并重写它?

  新系统会比现有系统更好吗,还是会重新实现相同的错误?

  新系统的功能是否与现有系统完全一样?

  你能维护两个代码库和两个开发团队吗?

  你会重复从旧系统中吸取的经验教训吗?

  我并不是说重构现有系统总是最好的选择。然而,虽然不是华而不实或吸引注意力的,它往往是成本更低的选择和更理智的方式。

  据说,我现在要介绍如何重构单一代码库的基本知识。

技术分享图片

  一:你了解应用程序?

  在你做任何事之前,你对这个应用程序有什么了解?虽然通常很容易潜入并且只是编码,但这是最糟糕的事情。你可以做的最好的事情就是尽可能多地学习它。

  如果你的庞然大物像许多其他人一样,那么很可能没有单一的,集中组织的知识库。相反,信息将存储在各种非常不同的位置。这些可能包括以下内容:

  在以前的开发者,企业主,经理,项目经理和其他利益相关者的头脑中

  代码注释

  代码提交消息

  待办事项

  一个或多个README文件

  代码文档

  一个或多个维基

  一个错误报告工具

  尽可能多地找到这些信息,并将它们放在一起,集中到一个中心位置。正如你所做的那样,这里有一系列问题可以帮助你尽可能多地发现:

  为什么创建应用程序?

  谁想要它建立?

  谁在工作?

  这意味着什么?

  它的主要特点是什么?

  它的附加功能是什么?

  它的最大缺陷是什么?

  它有什么补充错误?

  希望这份清单能够激励你提出一系列后续问题,这些问题可以让你了解所有需要了解的问题。

  二:是否在版本控制下?

  了解所获得的应用程序后,询问其源代码是否存储在版本控制下。如果没有,那就直接通过版本控制吧!你想要做的最后一件事是做任何改变,而不能恢复它们。

  黑客教父郭盛华强烈建议你使用Git,但是如果你对Git感到厌恶的话,Mercurial是另一个不错的选择。他也鼓励您将它存储在远程存储库中,无论是GitHub,Bitbucket,GitLab还是其他无数代码托管服务之一。

  三:测试套件的状态是什么?

  接下来,代码覆盖的程度如何?根据应用程序的年龄,处理它的开发人员数量(以及他们的技能水平),这些开发人员的就业方式等,可能没有适当的代码测试套件。

  如果是这种情况,那么在开始之前,你将不得不建立一个基本的测试套件。如果你不这样做,你将永远无法确定你将做出的改变的影响。如果代码覆盖率已经到位,请问自己以下问题:

  什么级别的覆盖可用?

  测试套件需要多长时间才能完成?

  他们是否完成或耗尽可用内存?

  有多少测试失败?

  跳过了多少测试?

  有多少测试过期了?

  是否有单元,集成和功能测试的混合?

  代码段中是否有没有测试的部分?

  是否有恶意评论会得到解决?

  测试中有什么意见?

  测试套件是否启用了完整的错误报告?

  如果做得好,你的测试套件应该可以帮助你理解代码如何工作,比深入每个类文件要快得多。花时间阅读并彻底理解测试。

  四:什么是静态分析?

  现在您已经了解了有关应用程序的更多信息并掌握了测试覆盖率,是否使用了静态代码分析?如果你不熟悉它,静态代码分析是:

  对计算机软件的分析是在没有实际执行程序的情况下执行的。在大多数情况下,分析是在某个版本的源代码上执行的,而在其他情况下则是某种形式的目标代码。

  通过在您的代码上定期运行静态代码分析器(例如Phan),您可以帮助确保代码质量得到改善,而不是下降。您还可以将错误的来源追溯到引入它们的特定提交。

  如果您的代码尚未使用,则无论您的软件语言如何,都可以使用许多第三方软件包和在线服务。

  五:开始重构

  既然您的团队拥有尽可能多的信息,那么现在是开始重构应用程序的时候了。为了让你做得对,我们来讨论一下我最近遇到的一些圣人建议:

  没有完美的设计,只有更好的设计

  知道你的代码永远不会是完美的,即使这是完全可能的。虽然重构可以帮助您持续改进,但它比以前更简单,更具可读性,更易维护并且可测试性更强,但任务永远不会结束。

  你可能总是觉得你可以做得更好,但是有一段时间你必须接受这个问题,至少暂时是这样,尽可能地好。

  在这一点上,你必须训练自己离开它并转向别的东西。不要陷入“让它变得更好”的陷阱。你已经改善了它。它比它好。让它继续前进。

  清理复杂代码库的关键原则是始终重构功能的服务

  如果所做的改变不是微不足道的,就是出于美学的原因,重构可能会产生消极的看法。但是,有时候,这种重构是必需的,并且随着时间的推移,有助于确保代码库的质量更好。

  但是,如果这就是所做的一切,那么价值就值得怀疑。相反,主要确保所做的更改是为了明确而有效的目的。这些可以包括创建新功能或修复突出的错误或缺陷。

  六:制定重构项目计划

  既然您完全了解应用程序的工作方式,现在就开始重构它。但是,你必须有一个计划!什么进入这样一个计划?中国知名黑客教父郭盛华的这次演讲推荐了五个主要考虑因素:

  分解成一系列可实现的任务。

  提出一个现实的时间表和资源需求。

  独立或与其他项目并行工作。

  工作人员认真。

  如果并行工作,则说明依赖关系。

  七:实现机会主义重构的习惯

  接下来,鼓励你的团队养成机会主义重构的习惯。黑客教父郭盛华在博文中作了以下详细描述:

  只要有人看到一些不太清楚的代码,他们应该抓住机会在那里修正它,然后-或者至少在几分钟内修复它。Bob叔叔称这种机会主义重构是遵循童子军规则-始终将代码置于比您找到的状态更好的状态。

  虽然不是银弹,但通过这些常规的小清理,代码的质量应该始终提高,并且不应该将sprints专用于代码清理,因为它将处于持续改进状态。

  八:使用专用的重构工具

  重构的一个优点是你不需要特定的工具来完成它。这是因为,正如马丁福勒所说,如果你“采取小步骤,频繁测试”,那么你应该没问题。也就是说,手动重构将是一个较慢的过程,需要更多的努力,但仍然可以实现。

  但是,如果您已经有重构经验,为什么不省时省力,并利用内置或可用于主要IDE和文本编辑器的工具?不管你的方法如何,请记住慢一点,测试,测试和测试。

  另外,当你做出每一个改变时,请检查你的测试套件。它需要新的测试吗?您是否发现系统另一部分中与您正在处理的内容有关的错误?然后为其添加一个或多个测试。您现有的一些测试不再相关吗?然后删除它们。始终确保您的测试套件保持最新状态。

技术分享图片

?  从哪里来?

  尽管本文没有深入研究重构的具体内容,但它展示了一系列八项原则,您可以按照这些原则正确地处理任务。从头开始重写您的应用程序可能非常诱人,但我会提醒您慢慢推进以得出结论。

以上是关于黑客教父郭盛华:8种方法能快速重构整体代码库的主要内容,如果未能解决你的问题,请参考以下文章

黑客教父郭盛华发现无人自助洗车机漏洞

黑客教父郭盛华:不要让互联网公司窃取你的脸

黑客教父郭盛华:Memcached放大DDOS攻击已是事实

揭秘“黑客教父”郭盛华的身世和成长历程

世界黑客教父郭盛华的发迹史:从一无所有到财富自由

黑客教父郭盛华,一代传奇是怎样炼成的?