如何验证重构是否可以保留代码流,而不仅仅是行为?

时间:2014-05-15 10:55:28

标签: c++ c gcc refactoring static-analysis

有时,我会看到if语句可以用更好的方式编写。通常这些是我们有多层嵌套if语句的情况,我已经确定了一种更简单的方法来重写if语句块。 当然,最大的担忧是在某些情况下生成的代码将具有不同的代码流。

如何比较两个代码块并确定代码流是相同还是不同? 有没有办法用静态分析工具支持这种分析?还有其他可能有帮助的技术吗?

1 个答案:

答案 0 :(得分:2)

找到一些方法来练习您想要重构的代码的所有可能路径。你可以

  • 手工编写单元测试
  • 使用Daikon http://plse.cs.washington.edu/daikon/,它自动和系统地运用代码来推断不变量(我自己没有使用它,但我尝试过针对Java的商业后代)

无论哪种方式,使用代码覆盖率工具来验证您是否具有完整的陈述和决策覆盖范围。使用覆盖工具报告在覆盖运行期间执行每个语句的次数。您甚至可以获得实际生成代码路径图的trucov

进行重构。

再次运行coverage工具并比较重构前后的语句执行计数。如果任何语句执行计数发生更改,则流程必须已更改。相反的情况并非如此,但对于实际应用来说,它可能已接近真实。或者,如果你有trucov工作,比较之前和之后的执行图表;这将是决定性的。