有时,我看到if语句可以用更好的方式编写.通常这些是我们有多层嵌套if语句的情况,我已经确定了一种更简单的方法来重写if语句块.
当然,最大的担忧是在某些情况下生成的代码将具有不同的代码流.
如何比较两个代码块并确定代码流是相同还是不同?
有没有办法用静态分析工具支持这种分析?还有其他技术可能会有所帮助吗?
最佳答案 找到一些方法来通过您想要重构的代码来练习所有可能的路径.你可以
>手工编写单元测试
>使用Daikon http://plse.cs.washington.edu/daikon/,自动和系统地运行代码来推断不变量(我自己没有使用它,但我尝试过针对Java的商业后代)
无论哪种方式,使用代码覆盖工具来验证您是否具有完整的声明和决策覆盖范围.使用覆盖工具报告在覆盖运行期间执行每个语句的次数.您甚至可以获得实际生成代码路径图的trucov.
做你的重构.
再次运行coverage工具并比较重构之前和之后的语句执行计数.如果任何语句执行计数发生更改,则流程必须已更改.相反的情况并不保证是正确的,但对于实际应用来说,它可能足够接近真实.或者,如果你有trucov工作,比较之前和之后的执行图表;这将是决定性的.