PHP中的死代码检测

时间:2009-11-22 13:23:47

标签: php refactoring code-coverage legacy-code

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

前一段时间单元测试的代码覆盖率为零,但现在我们正在尝试在T.D.D中编写所有新代码。通过单元测试覆盖“旧”代码来降低技术债务(测试最后技术)。

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

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

7 个答案:

答案 0 :(得分: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.
?>  

答案 1 :(得分:13)

现在有点晚了,但是PHPDCD声称要静态地执行此操作,这比使用xprof / xdebug描述实际代码执行情况提供了更多信息。

答案 2 :(得分:3)

我不知道如何检测完全未使用的代码,这可能超出了所有工具的能力。但是就这些工具而言,点击https://phpqa.io/可以了解它们。

  • 到目前为止,我在phploc中的最爱之一是将您的代码从面向对象的角度分解,并为您提供有关多少个类与多少个函数的比较以及每个函数与Cyclomatic Complexity的平均loc相对于多少次测试的详细信息。

  • 我的下一个最爱是phpcpd,它是“PHP Copy-Paste Detector”。它会对整个代码库进行标记,查找常用签名,并为您提供包含行号的文件列表。

  • 该页面上有批次其他工具,请选择对您有用的工具。

我们正在web2project积极使用这些工具,自从我们从dotProject派生后的两年内,我们已经从重构中删除了约35%的代码库,消除了重复(最初为12%,现在大约为2.5) %),并且通常更好地构建事物。而计算我们的15k +单位测试线。 :)

答案 3 :(得分:2)

我建议使用xdebug profiler(http://xdebug.org/docs/profiler)运行系统。

在系统中运行,使用http://code.google.com/p/webgrind/查看日志,并实际查看正在调用的内容。

答案 4 :(得分:2)

关于分析工具,如果您决定采用这种方式,可以查看xhprof http://developers.facebook.com/xhprof/
它具有较小的输出文件和Web界面,您可以将其嵌入到应用程序中以进行连续跟踪。它能够生成调用树的可视化表示。为此,我建议xdebug以上。

答案 5 :(得分:2)

请参阅SD PHP Test Coverage Tool。您可以按照自己喜欢的方式运行代码,包括(或不运行)以任何方式运行测试套件。在执行结束时,您可以看到执行代码的显示(网站上有截图)。未执行的代码可能已经死亡,需要您进行更多分析,但如果您运用该系统,则未执行的代码可能是错误处理程序,也可能是死机。 PHP测试覆盖率工具不需要对PHP服务器进行任何更改。

SD CloneDR工具在非常大的源代码库中找到重复的代码。它对语言敏感(涵盖C,C ++,Java,C#,Ada,Fortran以及PHP4和PHP5),因此不会因格式化,空格或注释的存在与否而受到愚弄。它将检测精确的拷贝克隆和接近遗漏克隆。该网站显示了多种语言的示例克隆报告。

答案 6 :(得分:0)

我相信有人实现了使用xdebug数据的Structure101g风格 - 然后s101将检测任何未使用的群集,即相互使用但与主代码库断开连接的文件。