我正在开发一个项目,我们的单元测试只有13%的代码覆盖率。我想提出一个改善计划的计划,但首先要关注那些增加覆盖率会带来最大价值的领域。 这个项目在C#中,我们使用VS 2008和TFS 2008,并且使用MSTest编写单元测试。
我应该使用什么方法来确定我们应该首先解决哪些类? 我应该关注哪些指标(代码或用法)(如果不明显,我如何获得这些指标)?
答案 0 :(得分:4)
我建议将单元测试添加到您触摸的所有课程中,而不是对现有课程进行改造。
单元测试的大多数优点在于帮助程序员编写代码并确保“修复”实际上不会破坏任何内容,如果您没有将代码添加到并非每次修改的新代码段中,那么单元测试开始下降。
如果您没有更好的事情要做,您可能还希望将单元测试添加到您依赖的类中。
您绝对应该为添加的新功能添加测试,但您可能还应该对可能会破坏的现有功能添加测试。
如果您正在进行大型重构,请考虑先在该部分获得80-100%的覆盖率。
答案 1 :(得分:2)
单元测试的最大价值在于维护,以确保代码在更改后仍然有效。
因此,请专注于最有可能/最频繁更改的方法/类。
接下来重要的是逻辑不明显的类/方法。单元测试将使它们不那么脆弱,同时作为其签约API的额外“文档”
答案 2 :(得分:2)
对于某些方法的一些好的统计数据和确定性查询,你肯定可以看看NDepend:http://www.ndepend.com/
NDepend公开了一种名为CQL(代码查询语言)的查询语言,允许您根据与某些统计信息和静态分析相关的代码编写查询。
没有真正的方法可以确定哪些类可能最有益,但是通过在CQL中设置自己的阈值,您可以建立一些规则和约定。
答案 3 :(得分:1)
通常,单元测试是防止回归的工具,回归最有可能发生在具有最多依赖性的类中。您不应该选择,您应该测试所有类,但如果必须,请测试一般具有最多依赖性的类。
答案 4 :(得分:0)
将所有组件安排到各个级别。给定级别中的每个类应仅依赖于较低级别的组件。 (“组件”是一个或多个类的任何逻辑组。)
首先为所有1级组件编写单元测试。您通常不需要模拟框架或其他类似的废话,因为这些组件仅依赖于.NET Framework。
完成第1级后,从第2级开始。如果第1级测试结果良好,则在编写2级测试时不需要模拟这些类。
以类似的方式继续,以应用程序堆栈的方式前进。
提示:将所有组件分解为特定于级别的DLL。这样,您可以确保低级别组件不会意外地依赖于更高级别的组件。