【IT168 技术文档】Test Impact Analysis是Visual Studio 2010测试部分新增加的一个功能,我也不知道该如何翻译其中文名,那就简单点儿,按字面翻译为“测试影响分析”,以下简称为TIA。啥是TIA呢?简单地说,就是根据产品代码变化自动分析出受影响的测试用例,它既适用于自动测试用例,也是适用于手动测试用例。
注意:目前Test Impact Analysis只针对Managed Code。
那么这个功能有什么实用价值呢?对于我所在的开发团队而言,其价值可老大了。我们所开发的产品规模比较大、功能比较稀碎,并且是多人合作开发。为了保证产品的质量,我们为产品编写了大量的自动化测试用例 (>5000),同时还有少部分的手动测试用例(< 200)。为了保证每次产品代码Check-in的质量,在我们开发过程规范中明确指出:每次check in代码之前,必须执行所有相关的自动化测试用例,并全部通过之后才能checkin。这样做的初衷是为了防止regression缺陷的发生,但问题是如何找到“相关的测试用例”呢?如果运行所有的自动化测试用例,大概需要8+小时。仅为了一小的修改就要去华8个小时执行测试用例,显然是不值得。所以我们所采用的方法是将测试用例分类:集成测试用例、功能测试用例和单元测试。其中,集成测试用例数量最少(5~8%),覆盖了最最基本用户功能;单元测试覆盖数量较大(30%),但运行速度很快;功能测试用例覆盖绝大多数一般功能和一些边界条件,其数量大运行时间最长(60~65%)。根据这三个分类,我们选择为每个checkin执行所有的集成测试和单元测试用例。这样做的好处是:覆盖了最基本的产品,同时运行时间不是很长。
上述方案仅是一种折中的选择,其不足之处也是显而易见的:所选择的测试用例固定不便、不准确,虽然保证了最基本产品功能不会被破坏,但往往不能发现checkin代码对其它功能影响。但在过去,这也是无奈的选择。TIA功能的出现就大大改善了这种情况,它可以帮助我们更精确的从所有测试用例中找出受到代码变化影响的测试用例。
在Visual Studio 2010中,启用TIA的方法非常简单,首先打开你的测试工程,然后选择 Test –> Edit Test Settings –> Local(local.testsettings),再在Test Settings对话框中选择 Data and Diagnostics –> Test Impact,如下图所示:
然后,需要重新编译编译整个测试工程,并执行所有的测试用例,以生成TIA所需要的基线数据。通过Test –> Windows –> Test Impact View打开Test Impact View窗口,如下图所示。在没有任何代码改变情况下,窗口中会显示"No tests are impacted“。
但是,当你改变了任何产品代码、保存并编译,然后刷新一下Test Impact View窗口,它就会列出来所有受影响的测试用例,选择任何一个测试用例,它还会显示是那些方法被改变影响了这个测试用例,如下图所示。我改变了产品代码中的ExchangeCurrency方法的代码,那么覆盖这段代码的测试用例就被挑选出来。
其实,TIA并不是啥特神奇的功能,它实际上是利用了代码覆盖(code coverage)找出了每个测试用例所覆盖到的所有方法调用,生成基线数据,将这些数据保存在工程路径下的testimpactdata.sdf文件中,据此来计算每次代码修改的影响。.sdf是SQL Server Compact 数据库文件,可以在Server Exploer中代开,如下图所示,它一共包含了4张表,有了这些数据我们也可以用它来扩展自己的功能。
上述所展示的Test Impact Analysis功能,仅是Visual Studio客户端的功能,其实在TFS服务器端也提供了TIA。具体使用方法,将在以后的博客中介绍。
遗憾之处: 在使用了一段时间之后,我发现TIA还是有一个让我刚到非常遗憾的地方 - 不支持自动执行所选测试用例。例如:当我准备一个shelve-set在正式Checkin之前,我会将它提交给TFS的Build系统来编译并执行所有的测试用例。在这个过程中,TFS端的TIA可以帮助分析出出受代码变化影响(affected)的测试用例,但却无法让Build系统只执行这些受影响的测试用例。
下面的链接是MSDN上,关于TIA的介绍,供大家进一步参考吧,今天就到这里了,呵呵!
Identifying Code Change Impact on Tests
http://msdn.microsoft.com/en-us/library/dd264984(VS.100).aspx
http://msdn.microsoft.com/en-us/library/dd286589(VS.100).aspx
http://msdn.microsoft.com/en-us/library/dd286598(VS.100).aspx
http://channel9.msdn.com/posts/VisualStudio/Historical-Debugger-and-Test-Impact-Analysis-in-Visual-Studio-Team-System-2010/