什么是遗留代码:有效地处理遗留代码的8个小贴士

处理旧的而不是您自己编写的历史遗留代码将是一份苦差事。但是,除非您是从头开始一个项目,否则这是不可避免的。这意味着您需要一种更好的方式来处理遗留代码。

这就是为什么我们提供了一些指导,解释什么是遗留代码、如何有效地处理遗留代码的最佳实践,以及静态代码分析如何帮助重构代码。

本文将包含如下几个部分:

  • 什么是遗留代码?
  • 为什么有效地处理遗留代码是一项挑战?
  • 处理遗留代码的8个小贴士
  • 能有效处理遗留代码的工具

什么是遗留代码?

遗留代码是继承自其他人或继承自旧版本软件的源代码。它也可以是任何您无法理解并难以更改的代码。

为什么有效地处理遗留代码是一项挑战?

处理旧的或不熟悉的代码所面临的最大挑战可能是您对它的假设。

您可能会认为这些代码很糟糕。不管是谁写的,他都不知道自己在做什么。您本可以做得更好。

但事实是,代码之所以这样编写,通常是有原因的。如果代码不是您写的,您可能不知道具体原因。

这就是为什么在对代码库进行改进时需要格外小心。您不能只对一个区域进行快速修复。可能存在一些您没有意识到的依赖项。

这就是为什么知道什么时候维护或更改代码库是至关重要的。

处理遗留代码的8个小贴士

您不可能在一夜之间就改进继承的代码。但是,您可以循序渐进地改进它。

无论您是刚刚开始,还是已经做了一段时间,您都应该遵循以下8个小贴士。

1. 测试代码

理解代码的一种方法是创建特征测试用例和单元测试用例。您还可以使用代码质量工具(比如,静态代码分析工具)来识别您代码中的潜在问题。

这将帮助您理解代码的实际功能。而且,它会显示任何可能存在问题的区域。一旦您理解了代码,您就可以更有信心地进行更改。

2. 查看文档

查看原始需求文档将帮助您理解代码的来源。

将文档放在手边可以帮助您在不破坏系统的情况下改进代码。如果没有这些信息,您可能会意外地做出引入不良行为的更改。

3. 只在必要时重写代码

您可能会忍不住重写继承的代码库,但这种做法通常是个错误。

重写所有代码需要花费太多的时间,浪费太多的程序员。而且,即使您这样做了,重写代码也会引入新的缺陷,或删除隐藏的功能。

4. 尝试重构

最好是尝试重构遗留代码,而不是重写代码。而且,最好是循序渐进地。

重构是指在不改变其功能的情况下更改代码结构的过程。

这样可以清理代码,使其更容易理解,还能消除潜在的错误。

当您重构代码时,最好:

  • 重构有单元测试的代码,这样您就知道您有些什么了。
  • 从代码的最深层开始,因为这是最容易重构的。
  • 在重构后进行测试,以确保您没有破坏任何东西。
  • 有一个安全网,例如持续集成,这样您就可以恢复到以前的版本。

5. 在不同的评审周期中进行更改

不要一次进行太多的更改。在同一个评审周期中和功能更改一起重构代码不是一个好主意。

另外,这也使得代码审查更加容易。个别的更改对审查员来说比大量的更改更明显。

6. 与其他开发人员协作

您可能不是非常了解代码库,但您的一些开发人员同事可能十分了解。向最了解代码库的开发人员提问要快得多。

所以,如果可能的话,尽量与比您更了解代码库的人协作。对代码的另一种观察角度可能会帮助您更好地理解它。

7. 保持新代码整洁

有一种方法可以避免代码出现更多问题,即通过确保新代码是整洁的。新代码的编写应该遵循最佳实践。

您无法控制继承代码的质量,但您可以确保您新添加的代码是整洁的。

8. 做深入研究

随着时间的推移,处理继承的代码库变得越来越容易。初级开发人员可能不理解为什么代码库没有被重构(并且可能热衷于重构它),但是高级开发人员知道什么时候该保留它们。

了解更多关于代码库的信息将有利于您改进它。

Michael C. Feathers撰写的这篇文章是一个很好的起点,其中包含了一些关于如何更改代码库的良好示例。

另一个不错的来源是Martin Fowler撰写的《重构:改进现有代码的设计》一书。该书提供了许多有效地重构代码的建议。

能有效处理遗留代码的工具

您总是需要处理继承代码或避开它。毕竟,这些代码的存在是有原因的。它在运行而且运行结果可能足够好,以致您可以不顾已知的问题。

更改代码也有很好的理由。您可能添加一个功能,修复一个缺陷,或者改进设计。

在理想的情况下,您会不断地重写旧的或不熟悉的代码,直到完全调试完毕。但这很有可能是不切实际的。

因此,您需要做的是找出您能更改的代码,而不要管其他的。

静态代码分析

一种方法是使用代码质量工具,比如静态代码分析工具。您可以设置一个基线,然后对新代码进行分析,以确保它是整洁的。您还可以抑制代码库中的结果。

例如,Helix QACKlocwork就很容易做到这一点。

分析遗留代码

Helix QAC可以根据规则(通常来自编码规范)检查您的代码库,您将得到违规行为的诊断。您还可以按严重程度进行优先级排序,这意味着您可以首先集中精力修复最容易出错的部分。

设置基线

您还可以为代码库设置基线(baseline)。也许代码本来就很好,而您不想变动它。设置基线意味着遗留代码库不会被纳入到分析工具中。这样您可以专注于发现新代码中的问题,并确保其整洁。

Helix QAC可以轻松设置基线

使用抑制

您还可以使用抑制来为代码库创建例外情况,从根本上忽略其中的违规行为。您可以对特定类别中的特定规则或违规行为设置抑制。

Helix QAC允许您抑制遗留代码库中发现的诊断

确保合规

在某些情况下,您可能会从一个项目到另一个项目复用源代码。但是,有些源代码没有根据编码规范开发。如果您需要实现合规(如MISRA合规),这可能会产生问题。通过使用Perforce静态代码分析工具,如Helix QAC for C/C++或Klocwork for C, C++, C#, Java, JavaScript, Python,很容易看到代码中的错误所在。

“原创内容,转载请标明出处”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值