2009-08-25 88 views
2

有没有任何工具可以找到没有任何引用的私人功能? (冗余功能)冗余代码检查

原因是,一个函数可能已经创建并从几个区域调用,但随着项目的扩展和增长,这两个调用可能已被删除并与更好的替代交换。但该方法可能仍然存在。我想知道是否有任何方便的工具可以查看代码,发现私有函数并检查它们是否有任何引用,如果没有,则通知用户这种情况。

创建一个我自己不会太棘手,但我想知道是否有任何可访问的应用程序可以使用包含代码的文件执行此操作?

我的代码在c#中,但我可以想象这个问题涵盖了各种编码语言。

+1

重复的http://stackoverflow.com/questions/614096/clean-up-unwanted-code-c/935943 – 2009-08-25 13:22:21

回答

2

如果你的代码有单元测试(它是的,对吧; ;-)然后运行NCover将允许你识别从任何地方都不被调用的方法。如果你没有任何单元测试,那么使用它开始构建它们是一个很好的借口。

在一般情况下,我怀疑代码覆盖工具适合于大多数语言。

+0

会同意你对此,但我最近也开始了一个项目与0测试,但也希望删除这样的“死码”。这样做会减少我开始编写测试的代码量! – MPritchard 2009-08-25 12:59:14

+0

@Martin - 没有测试; ouchies!如果您开始为公共方法编写单元测试,可能会使未调用的私有方法设置得足够小,以至于您可以使用Visual Studio的搜索来检查它们是否被调用。这就是说,我完全知道*你从哪里来的! :) – Rob 2009-08-25 13:03:47

+0

我的项目中也没有单元测试,可能是因为它是SharePoint,但:--D。 – Colin 2009-08-25 13:19:41

0

Eclipse为Java自动执行它,不知道你是否可以为C#做同样的事情。

0

另一个问题甚至可能是“c#编译器是否删除了实际未使用的私有方法?”。

我的猜测是否定的,但你永远不知道!

编辑:

其实,我觉得这可能是很难说在使用的方法。它可能是私有的,但它仍然可以用作事件处理程序。不是不可能检查,但我相信这方面会使它更难一点。

+2

编译器删除未使用的方法(私有或其他方法)会是一件“坏事”(tm),因为它们仍然可以通过Reflection访问和调用。事实上,我相信VS单元测试框架生成的代码完全可以让你单元测试私有/内部方法。 – Rob 2009-08-25 13:01:58

3

ReSharper完成这项工作。

+0

如果您告诉人们如何 – MPritchard 2009-08-26 08:33:53

+0

ReSharper标记任何未被调用的私人功能,将会有所帮助: * VS代码窗口右侧的黄色标记。 *方法名称变灰。 *如果光标位于功能名称上,则为红色灯泡。 ALT + RETURN提供“删除未使用的方法”。而已 – 2009-08-26 11:12:31