我有一个代码非常混乱的项目 - 这里和那里有很多重复和死代码。
前一段时间单元测试的代码覆盖率为零,但现在我们正在尝试在T.D.D中编写所有新代码。通过单元测试覆盖“旧”代码来降低技术债务(测试最后技术)。
业务逻辑的复杂性非常高有时没有人可以回答是否使用了某些方法。
如何找到这种死代码方法?广泛的伐木?更高的测试覆盖率?(这并不容易,因为客户希望新功能出现)
答案 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将检测任何未使用的群集,即相互使用但与主代码库断开连接的文件。