运行时代码覆盖工具
Posted
技术标签:
【中文标题】运行时代码覆盖工具【英文标题】:Runtime Code Coverage Tools 【发布时间】:2011-08-18 10:08:49 【问题描述】:我知道有许多工具可用于分析 .NET 代码和计算覆盖率,以及识别永远不会受到影响的类/方法/属性等。
但是,我正在尝试清理一个遗留应用程序,我确信该应用程序包含大量未使用的代码 - 但是很多代码是通过一些任意和复杂的反射技术访问的,这些反射技术会掩盖编译器的意图 - 因此任何只分析已编译代码的覆盖工具都不太可能生成任何关于此应用程序中代码使用情况的可靠报告。
是否有任何工具可以像分析器一样工作,它们可以监听正在运行的应用程序并记录实际命中的类/方法/属性并根据这些数据生成覆盖范围。
我希望我已经把一切都说清楚了——谢谢你的期待
【问题讨论】:
【参考方案1】:我们正在使用 ncover,它工作得非常好:http://www.ncover.com/。 但它是商业的,或者你使用试用版,如果你只需要它一次。
【讨论】:
【参考方案2】:您可以使用 VS2010 代码覆盖工具 - 它们确实使用 Instrumentation(这意味着反射不会欺骗它)。 Syed Aslam Basha 在他的 MSDN 博客中有一个 post on it,关于如何启用它进行手动测试(听起来你需要这样做)。
请记住,您需要在运行时单击每个功能等;或者在删除代码之前三思而后行 - 但它应该会给你一个很好的起点。
【讨论】:
【参考方案3】:目前存在两个支持 .NET2 和 .NET4 运行时的开源版本
PartCover - 是最旧的,但只支持 32 位(由 teamcity 支持)
和
OpenCover - 是最新的,它再次支持 .NET2 和 .NET4 但也支持 64 位,它最近还增加了分支覆盖(尽管报告取决于用户)
如果需要,OpenCover 和 PartCover 都可以与 TypeMock 和 Moles 一起使用。
商业版本包括(但不限于)
NCover - 最知名的
dotcover - 单元测试时与团队城市很好地集成
【讨论】:
【参考方案4】:Clover.NET 可以做到这一点。但它是商业的,我没能找到 .NET 版本的链接(我几年前就用过)。
【讨论】:
【参考方案5】:除了分析器之外想不出其他工具,但是使用日志记录怎么样?
使用静态分析来发现静态调用,并将日志记录到反射调用中以显示正在调用的内容。运行几次后,您就会知道正在运行什么。
毕竟反射调用会知道在做什么。
【讨论】:
以上是关于运行时代码覆盖工具的主要内容,如果未能解决你的问题,请参考以下文章