PHP中的死代码检测

Nik*_*hev 33 php refactoring code-coverage legacy-code

我有一个代码非常混乱的项目 - 这里和那里有很多重复和死代码.

前一段时间单元测试的代码覆盖率为零,但现在我们尝试以TDD方式编写所有新代码,并通过单元测试覆盖"旧"代码来降低技术债务(测试最后技术).

业务逻辑的复杂性非常高,有时候没有人可以回答是否使用了某些方法.

如何找到这种死代码方法?广泛的伐木?更高的测试覆盖率?(这不是很容易,因为客户想要新的功能出来)

Ben*_*mes 14

xdebug的代码覆盖工具允许您测试实际执行的代码行,而无需在所有函数/方法中放置跟踪语句.

例:

<?php
    xdebug_start_code_coverage();

    function a($a) {
        echo $a * 2.5;
    }

    function b($count) {
        for ($i = 0; $i < $count; $i++) {
            a($i + 0.17);
        }
    }

    b(6);
    b(10);

    var_dump(xdebug_get_code_coverage());  // array '/path/file.php' => array line_number => int 1 or 0.
?>  
Run Code Online (Sandbox Code Playgroud)

  • xdebug意义上的"代码覆盖率"并不意味着测试覆盖率.这两者不相关,因此您可以使用它来查看执行哪些行,无论它们是否经过测试. (3认同)

El *_*obo 13

现在有点晚了,但是PHPDCD声称要静态地执行此操作,这应该比使用xprof/xdebug配置实际代码执行时提供更多信息.

  • 它静态工作,因此它不适用于匿名的东西,如变量方法($ object - > $ method)或call_user_func().它有所帮助,但它远非完美. (3认同)
  • `phpdcd.phar --exclude vendor --recursive .` 对我有用。 (2认同)