3

简而言之:我需要获取我们的数据库 API 的方法列表,这些方法在我们的代码库中实际调用和使用。

更长:我们有一个相当大的代码库,它基于一个(丑陋的)数据库 API。后者有很多接口和相当多的功能,我们根本不需要,我们想摆脱它。重写的第一个原型应该与现有的 API 代码有一百个兼容——因此应该实现它的接口,以便更容易地根据我们的生产代码构建它。

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

我很好奇这样的分析是否可以使用工具完成,或者我是否应该包装 API 以获取所需的信息(手动/自动?它真的很大,有数百或数千种方法)。

顺便提一下:我可以完全访问所有资源,但它们分布在具有自己解决方案的许多模块中。

4

2 回答 2

2

正如 Chris 所说,NDepend 可以为您提供调用的 API 方法/字段/类型的列表。免责声明:我是该工具的开发人员之一。

一张价值千言万语的图片,下面的NDepend 依赖结构矩阵截图,显示在 NUnit 代码库中,只有程序集nunit.uiexcepion (row/column #6)nunit.core.interfaces (row/column #18)在使用方法List<T>.ToArray()

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

NDepend 的所有功能都考虑了第三方代码,但我在这里公开了依赖结构矩阵,因为它肯定是最适合在 API 中获取调用方法列表的功能。该工具的 14 天全功能试用版可供下载

NDepend 依赖结构矩阵

让我们注意,当您比较代码库的 2 个不同快照时,NDepend 还可以显示哪些第三方代码不再使用,或者没有使用而现在使用。在下面的屏幕截图中,我们可以看到 NUnit v2.5.8 使用了 NUnit v2.5.3 未使用的第三方方法。

NDepend 搜索方法按变化

于 2012-10-01T22:14:22.247 回答
1

我会看一下用于在 .NET 之上创建面向方面编程 (AOP) 层的各种 IL-weaver 实现中的任何一种——PostSharp 是一种很容易让人想到的:

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

如果我是你,我会创建一个单一的“类似记录器”的方面,然后将该方面编织到你想要对其使用进行分类的所有方法中。然后,通过它的步伐运行一段时间。您应该能够以这种方式收集一组良好的使用数据,这应该有助于决定您可以安全地摆脱什么。

与任何数量的静态分析工具相比,这种方法的一个好处是它还可以捕获方法的任何“动态”或元调用——而不仅仅是编译时绑定的调用。

于 2012-10-02T03:20:08.623 回答