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

创提信息
2022/08/09

分享到

处理旧的而不是您自己编写的历史遗留代码将是一份苦差事。但是,除非您是从头开始一个项目,否则这是不可避免的。这意味着您需要一种更好的方式来处理遗留代码。
 
这就是为什么我们提供了一些指导,解释什么是遗留代码、如何有效地处理遗留代码的最佳实践,以及静态代码分析如何帮助重构代码。


本文将包含如下几个部分:
 
     • 什么是遗留代码?
 
     • 为什么有效地处理遗留代码是一项挑战?
 
     • 处理遗留代码的8个小贴士
 
     • 能有效处理遗留代码的工具


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


为什么有效地处理遗留代码是一项挑战?
 
处理旧的或不熟悉的代码所面临的最大挑战可能是您对它的假设。
 
您可能会认为这些代码很糟糕。不管是谁写的,他都不知道自己在做什么。您本可以做得更好。
 
但事实是,代码之所以这样编写,通常是有原因的。如果代码不是您写的,您可能不知道具体原因。
 
这就是为什么在对代码库进行改进时需要格外小心。您不能只对一个区域进行快速修复。可能存在一些您没有意识到的依赖项。
 
这就是为什么知道什么时候维护或更改代码库是至关重要的。


处理遗留代码的8个小贴士
 
您不可能在一夜之间就改进继承的代码。但是,您可以循序渐进地改进它。
 
无论您是刚刚开始,还是已经做了一段时间,您都应该遵循以下8个小贴士。


1. 测试代码
 
理解代码的一种方法是创建特征测试用例和单元测试用例。您还可以使用代码质量工具(比如,静态代码分析工具)来识别您代码中的潜在问题。
 
这将帮助您理解代码的实际功能。而且,它会显示任何可能存在问题的区域。一旦您理解了代码,您就可以更有信心地进行更改。


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


3. 只在必要时重写代码
 
您可能会忍不住重写继承的代码库,但这种做法通常是个错误。
 
重写所有代码需要花费太多的时间,浪费太多的程序员。而且,即使您这样做了,重写代码也会引入新的缺陷,或删除隐藏的功能。


4. 尝试重构
 
最好是尝试重构遗留代码,而不是重写代码。而且,最好是循序渐进地。
 
重构是指在不改变其功能的情况下更改代码结构的过程。
 
这样可以清理代码,使其更容易理解,还能消除潜在的错误。
 
当您重构代码时,最好:
 
    • 重构有单元测试的代码,这样您就知道您有些什么了。
 
    • 从代码的最深层开始,因为这是最容易重构的。
 
    • 在重构后进行测试,以确保您没有破坏任何东西。
 
    • 有一个安全网,例如持续集成,这样您就可以恢复到以前的版本。


5. 在不同的评审周期中进行更改
 
不要一次进行太多的更改。在同一个评审周期中和功能更改一起重构代码不是一个好主意。
 
另外,这也使得代码审查更加容易。个别的更改对审查员来说比大量的更改更明显。


6. 与其他开发人员协作
 
您可能不是非常了解代码库,但您的一些开发人员同事可能十分了解。向最了解代码库的开发人员提问要快得多。
 
所以,如果可能的话,尽量与比您更了解代码库的人协作。对代码的另一种观察角度可能会帮助您更好地理解它。


7. 保持新代码整洁
 
有一种方法可以避免代码出现更多问题,即通过确保新代码是整洁的。新代码的编写应该遵循最佳实践。
 
您无法控制继承代码的质量,但您可以确保您新添加的代码是整洁的。


8. 做深入研究
 
随着时间的推移,处理继承的代码库变得越来越容易。初级开发人员可能不理解为什么代码库没有被重构(并且可能热衷于重构它),但是高级开发人员知道什么时候该保留它们。
 
了解更多关于代码库的信息将有利于您改进它。
 
Michael C. Feathers撰写的这篇文章是一个很好的起点,其中包含了一些关于如何更改代码库的良好示例。
 
另一个不错的来源是Martin Fowler撰写的《重构:改进现有代码的设计》一书。该书提供了许多有效地重构代码的建议。


能有效处理遗留代码的工具
 
您总是需要处理继承代码或避开它。毕竟,这些代码的存在是有原因的。它在运行而且运行结果可能足够好,以致您可以不顾已知的问题。
 
更改代码也有很好的理由。您可能添加一个功能,修复一个缺陷,或者改进设计。
 
在理想的情况下,您会不断地重写旧的或不熟悉的代码,直到完全调试完毕。但这很有可能是不切实际的。
 
因此,您需要做的是找出您能更改的代码,而不要管其他的。


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


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


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

 

什么是遗留代码:有效地处理遗留代码的8个小贴士-1.jpg
Helix QAC可以轻松设置基线


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


 什么是遗留代码:有效地处理遗留代码的8个小贴士-2.jpg
Helix QAC允许您抑制遗留代码库中发现的诊断


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