2012-10-01 59 views
3

在短期内得到调用的方法列表:我需要得到这些居然叫我们的代码库中使用我们的数据库API的方法的列表。如何通过API

长: 我们这是基于(丑陋的)数据库API一个相当大的代码库。后者有很多接口和相当大的功能,我们完全不需要这些功能,我们希望摆脱它。重写的第一个原型应该与现有的API代码兼容一百个 - 因此应该实现它的接口,以使它能够轻松地将其与我们的生产代码构建在一起。

要定义的,我们使用我可以做一些报道分析dotCover或别的东西,并运行我们的单元测试方法的子集,但我敢肯定,这只会产生一个80%到90%的成功率。我需要的更像是对代码的静态分析。另一种方法可能是api的动态包装器,它会记录每个方法调用以在使用后进行适当的覆盖率分析。

我很好奇,如果这样的分析可以用一个工具来完成或者我是否应该换行API来获取所需的信息(手动/自动?这是非常大的,几百或几千方法)。

就更不用说了:我要所有来源的完全访问权限,但他们很多模块有自己的解决方案中的分布。

+0

不知道它是否100%重复。然而,你可能会查看http://stackoverflow.com/questions/245963/find-unused-code它的缺点是得到Resharper。 – NotMe

+0

这是100%的相反,我认为:) ReSharper不帮助我(除了点击每个方法的“查找用法”) – Matten

+0

好吧,我不熟悉Resharper(不喜欢它自己)。另一种选择是NDepend(http://www.ndepend.com/) – NotMe

回答

2

由于一种高精度克里斯,NDepend的可为您提供调用的API方法/场/类型的列表。 声明:我是该工具的开发人员之一。

甲图像是值得一千字,下面的NDepend dependency structure matrix截图,示出了在NUnit的代码的基础上,只有组件nunit.uiexcepion(行/列#6)nunit.core.interfaces(行/列#18)正在使用方法List<T>.ToArray()

我们所说的第三方代码(您所谓的API称为)以蓝色字体显示。仅显示使用的API方法/字段/类型真的。例如,在屏幕截图中,类别HashSet<T>未显示,因为它未被NUNit代码库使用。

NDepend的的所有功能考虑的第三方代码,但我在这里暴露的依赖结构矩阵,因为它肯定是最适合功能的API内得到调用的方法列表。该工具的14天全功能试用版是available for download

NDepend dependency structure matrix

让我们注意的是NDepend的也可以显示what third-party code is not used anymore, or was not used and is now used,当你比较你的代码库的2个不同的快照。在下面的屏幕截图中,我们可以看到NUnit v2.5.8使用的NUnit v2.5.3未使用的第三方方法。

NDepend search methods by change

+0

正是我需要的,感谢您的快速介绍。我们甚至有NDepend的许可:)有没有选择将矩阵导出为.pdf或打印它?这是一个很长的名单,.png导出没有多大帮助。 – Matten

+0

现在,矩阵只能导入PNG。但是你仍然可以在ThirdParty.Methods中选择一个类似*的代码查询来选择新的{m,m.MethodsCallingMe} *以从代码查询结果面板获得不同的导出(txt,xml,xls,html)。 –

1

我看一看用于创建一个面向方面的编程(AOP)层上的顶部的各种IL-织工实现中的任何一个。NET - PostSharp是一个容易跳到脑海:

http://www.sharpcrafters.com/solutions/logging#

如果我是你,我想创建一个“记录式”的方面,然后编织一个方面为大家想的方法目录用法。然后,通过它的步伐运行一段时间。您应该能够通过这种方式收集一组很好的使用数据,这应该有助于确定您可以安全地摆脱哪些数据。

这种方法对任何数量的静态分析工具都有好处之处在于它还捕获方法的任何“动态”或元调用 - 而不仅仅是编译时绑定调用。