软件自动化测试—代码覆盖率(3)

发表于:2015-04-24来源:uml.org.cn作者:不详点击数: 标签:自动化测试
实际上这也正是visual studio在后台为我们悄悄做的工作,当然啦,Visual Studio不会直接在原来项目编译出来的文件作更改,它会将文件(wildchar.exe)拷贝一份,

  实际上这也正是visual studio在后台为我们悄悄做的工作,当然啦,Visual Studio不会直接在原来项目编译出来的文件作更改,它会将文件(wildchar.exe)拷贝一份,然后再拷贝上进行更改,更改后的程序文件会存放在 解决方案文件夹的Test Result文件夹里以测试结果命名的文件夹中,例如我的修改过的可执行文件存放在:

  E:\临时文档\WildChar\TestResults\施懿民_SHIYIMIN 2009-12-19 01_02_22\Out\

  使用ILDASM.exe(或者reflector.exe)你就可以看出来,例如下面就是修改过后的IL 代码:

.method private hidebysig static void ReverseStringPairImp(string input,

            int32 inputIter,

            char[] result,

            int32 resultIter) cil managed

{

 // Code size       1333 (0x535)

 .maxstack 5

 .locals init ([0] int32[] indics,

           [1] int32 i,

           [2] bool CS$4$0000,

           [3] int32[] CS$0$0001)

 IL_0000: call       void Microsoft.VisualStudio.Coverage.Init_c292aced4dea6d28292bbb91547781d7::Register()

// 下面就是 Visual Studio自动为我们添加的跟踪代码覆盖率的代码:

 IL_0005: ldsfld     uint32[] Microsoft.VisualStudio.Coverage.Init_c292aced4dea6d28292bbb91547781d7::m_vscov

 IL_000a: ldc.i4     0xa

 IL_000f: ldelem.u4

 IL_0010: ldc.i4     0xa

 IL_0015: add

 IL_0016: ldc.i4.1

 IL_0017: stind.i1

 IL_0018: nop

 IL_0019: br.s       IL_0033

 IL_001b: ldsfld     uint32[] Microsoft.VisualStudio.Coverage.Init_c292aced4dea6d28292bbb91547781d7::m_vscov

 IL_0020: ldc.i4     0xa

 IL_0025: ldelem.u4

 IL_0026: ldc.i4     0xb

 IL_002b: add

 IL_002c: ldc.i4.1

...

} // end of method Program::ReverseStringPairImp

  使用代码覆盖率的注意事项

  1. 代码覆盖率只能告诉你产品代码还有哪些地方、哪些功能模块没有测试到,或者说很仔细地测试过。不能告诉你比如测试效果是否已经足够好了,比如说代码覆盖率为100%不能说明你已经把用户的需求都考虑并且测试到了。请考虑下面的代码:

Int a = b * c;
Console.WriteLine(a);

  如果b 和c的值很小的话,那么 后面的Console那句就会执行,如果我们先执行这个测试用例,那么Console那句就会被标注为已经覆盖过,而且是100%覆盖过。但是并不没有测试到b和c很大造成整数溢出异常这种情形。

  2. 另外,代码覆盖率并不是自动化测试才能检查的,如果你的自动化测试用例不够,你完全可以把Visual Studio修改过的程序拷贝出来,手工执行一些测试用例。不管是自动化还是手工的测试用例,只要能够执行为覆盖的产品代码,最后 Visual Studio在统计结果的时候,都会统计进去(当然,手工用例的执行,应该在 Visual studio统计结果之前执行—通常就是一次Test Run执行完毕之前)。

原文转自:http://www.uml.org.cn/Test/201306262.asp