调测工具VcTester攻略之搭建敏捷开发环境Word格式.docx
《调测工具VcTester攻略之搭建敏捷开发环境Word格式.docx》由会员分享,可在线阅读,更多相关《调测工具VcTester攻略之搭建敏捷开发环境Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
简单来说,在VcTester中把被测程序运行起来后,用脚本可以把被测系统中变量的值修改掉,也可以用脚本将被测函数直接调起来,还可以写一个脚本函数,在线的替代被测的C/C++函数,比较神奇!
不清楚它是怎么做到这一点的。
我勉强拿CppUnit与VcTester作对比,但又觉得这两者完全不同,CppUnit用C++写测试用例,它与C++编程没太大区别,少不了编译链接,而VcTester用脚本写用例,写完后立即执行,立即看到运行效果,具有强烈的即兴操作风格。
还有MOCK对象,尽管也起到打桩的作用,但理念很不相同,用惯MOCK桩后切换到脚本桩,思维方式会闹别扭,而用惯脚本桩后,又打心底瞧不上MOCK这种怪胎式做法。
以上权当VcTester的扼要介绍,相比ezTester的官方文档,随意了点,阅读官方材料可能半天不知所云,我拿几个现成工具作比较,先给大家一个大致的概念。
关于这个工具,还得补充一句,数年来大家一直找不到VcTester最新版本,从V2.2.0开始,VcTester就封闭起来只对商业用户开放了,在网上只能找到三年前的版本(VcTesterV2.1.4),目前VcTester已发展到V5.1,从5.1起ezTester公司重新向公众开放一个可免费体验的版本(VcTesterMini),请到www.ezT下载最新版本,本系列文章就是基于这个Mini版展开介绍的(老版本太陈旧,就别用了)。
关于本系列文章
自从一年前我第一次接触VcSmith与VcSmart工具时,就被它精练实用的语言映射技术所吸引,我拿它配合VC做开发用得很顺手,很早就想写点东西,总结一些经验分享出来,因为工作忙没顾上写,直到上个月我从事的项目终于收尾了,晚上不必加班,我才倒腾出一点时间。
恰巧,这时VcTesterMini发布了,终于有免费体验的新版本了,欣喜之余我把原计划写一篇文章改成写一个系列,写作时间拉长,内容更充实些。
初步设想是在这系列文章中逐次描述本人曾经历的应用体验,有一些与本人前阶段的工作有关,我用VcSmith辅助我们的项目开发已有半年,有一些实际使用经验,另一些则是本人业余爱好,喜欢琢磨点东西,像API测试、数据驱动测试体系,ezTester没提供相关材料(或许有,但我不是他们的商业客户),是我自己琢磨出来的,如果大家第一次看到此类应用,就追认我为创始人吧。
多说一句闲话,ezTester似乎该多提供一些应用实例,单有用户手册是不够的。
上面提到VcSmith、VcSmart,可能大家一头雾水,这与VcTester有什么关系?
我先说明一下,VcSmith与VcSmart是VcTester的共享版,VcTester近半功能已在VcSmith中公开,而VcSmart则是VcSmith的精简版本。
脚本驱动在VcSmith中是完整的,但脚本桩缺失,随着VcTesterMini版本推出,脚本桩也能免费体验了。
本系列文章中有近半内容与脚本桩相关,这也是ezTester公开Mini版后,我才决定将一篇改成一个系列的原因。
本系列文章罗列如下:
《调测工具VcTester攻略之:
搭建敏捷开发环境》
使用快捷编辑功能》
快速定位问题》
敏捷开发方式下调测组织过程》
脚本驱动API测试》
使用脚本桩构造数据驱动测试》
撰写本系列文章时得到ezTester技术专家Sundy多次帮助,在此谨表感谢!
VcTester适用性
VcTester只能与VisualC/C++配套使用,被测工程既可以是C代码,也可以是C++代码。
据推测,VcTester有不少功能依赖于VC的调试数据库(PDB文件),所以离开VC编译环境,这个工具估计不会这么好用。
VcTester支持的VC6、VC7(即VisualStudio2003)、VC8(即VisualStudio2005)、VC9(即VisualStudio2008)各个版本。
据本人验证,如果您的代码越接近于C语言,VcTester用得就越爽,越玩高级C++特性,用VcTester就没那么爽了,VcTester明确不支持对C++的动态数据类型RTTI、模板Template实施映射,另外,C++的inline风格的函数、fastcall风格的函数、操作符重载函数,VcTester也不支持映射。
对未支持的C++特性的使用影响限于如下几个方面:
1、某些变量或函数不能解析,所以在提示输入或函数调用图中找不到。
此项影响甚小,VcTester对不能解析的符号只是简单忽略,编码时缺点辅助信息提示您而己。
2、对未支持映射的变量,不能用脚本读它的值,写它的值,对未支持映射的函数,不能用脚本发起调用、不能打脚本桩。
局部未支持映射的符号,不会扩大到其它地方,比如某个类方法被编译成inline函数,VcTester无法支持用脚本调用这个类方法,但该类的其它类属性或类方法仍正常支持脚本化操作。
如果被测VC工程涉及一些上面介绍的VcTester支持不到的特性,您应进一步分析相关代码是不是当前调测要关注的,如果调测时您根本用不到这些未持映射的变量或函数,那么,VcTester仍非常适用,因为您关注范围内的变量与函数都正常被映射,用脚本可以正常发起调测。
如果您的被测代码使用少量template模板、操作符重载等特性,这时,VcTester是否适用取决于:
无法用脚本操作这些不支持映射的变量与函数,对您的调测工作影响有多大。
VcTester提供的功能还算丰富,您可以浅层次简单使用这个工具,也可以深入研究,发展出一套适用自身企业的敏捷开发平台体系。
浅层次应用包括:
Ø
VcTester提供了一套不错的IDE环境,您可以将日常编码工作挪到VcTester。
用VcTester构造调试环境,拿脚本构造一些测试数据,再用脚本发起函数调用。
借助VcTester构建规范的白盒测试过程,VcTester支持测试集与测试例的工程化管理。
深层次应用包括如下几个方面(可能不全面,恕笔者研究还不够深入):
实施白盒覆盖率测试,VcTester宣称完整支持第4代白盒测试方法。
构造API测试与业务自动化测试体系,包括数据驱动测试、表格驱动测试、ActionWord驱动测试等。
构建一套以持续集成、每日构建、测试先行等为特征的敏捷开发平台。
让Scrum敏捷实践在C/C++项目落地,ezTester倡导的周演制度属此类应用。
脚本化开发,以脚本为主体实施开发,脚本最终翻译为C++代码用于产品发布,此项CSE网站称之为“扁平化开发体系”,但资料欠缺,尚不清楚其具体内涵。
总之,简单来看,VcTester提供了与SourceInsight、VisualAssist、CppUnit、CSE等工具对等的功能,是这些工具所提供功能的一个综合体。
但VcTester绝非只是叠加某些工具的功能,重要的是,它承载了一套基于敏捷实践的研发理念,这才是本人看好VcTester发展前景的根本原因。
搭建一个简单到不能再简单的调测环境
先安装VcTesterMiniV5.1版本,下载版本后,运行安装程序,接受许可协议,如下图:
之后按缺省配置,一路按“下一步”完成安装即可。
然后我们在VC中创建一个简单的被测工程,这里以VC6为例,创建一个工程名为test控制台项目,添加一个被测C++文件(root.cpp),该文件源码如下:
#include<
stdio.h>
intiForTest=5;
intMyAdd(inti,intj)
{
returni+j;
}
intmain(intargc,char*argv[])
charbuff[256];
printf("
Pleaseinput'
exit'
toquit\n>
>
"
);
scanf("
%s"
buff);
return0;
这里我们定义一个全局变量iForTest,一个函数MyAdd,后面我们将用这个变量与这个函数做演示。
入口函数main仅让控制台程序挂起,等待用户键入一个字串后退出。
之后在Debug模式下编译该工程,生成被测程序test.exe。
如下图:
之后,启动VcTester安装目录下的VcSmart.exe程序,VcSmart是VcTester的精简界面版本,在其主界面,我们先启动刚才生成的被测程序test.exe,点击“Runtargetapplication”按钮
,弹出如下对话框:
指定被测的EXE程序(如果需要,还可再指定它的启动参数与工作目录)后,点OK按钮关闭对话框即启动被测的test.exe程序。
之后,被测程序自动与VcSmart界面建立通信联接。
我们的被测代码中没额外附加代码,只要在VcSmart中启动被测程序(要求是Debug模式下生成的EXE程序),两者就能自动连接,神奇吧?
更神奇的还在后面。
在VcSmart主界面,我们键入如下脚本“vd.iForTest”,然后选中这句脚本,按Ctrl+E快捷键,选中的脚本立即被执行,从打印信息中可看到这个iForTest变量的当前值为5。
iForTest是被测系统中的一个全局变量,被测变量与被测函数都映射到脚本的vd模块下,所以要用“vd.iForTest”表达这个映射变量。
接着键入脚本“vd.iForTest=3;
”,选中这行脚本运行后再查看这个变量的值是否被改成3了。
调用从C/C++映射过来的函数也很简单,键入脚本“vd.MyAdd(3,7);
”选中运行这行脚本,其计算结果是10,说明被测函数MyAdd用脚本成功调起来了。
上面是最精简方式的脚本化调测环境搭建过程,您需要做的,只一件事:
在VcSmart中把被测程序运行起来。
至于如何编写调测脚本,VcSmart用户手册有详细介绍,您可以使用CSE脚本构造任意复杂的测试数据,调用任意被测函数来发起各种调试操作或测试操作。
是不是很神奇?
从试用VcSmart、VcSmith,到VcTester,该系列产品曾多次让我觉得神奇,就说最近试用VcTesterMini,支持脚本打桩总得在被测代码中做点文章吧?
插装改造、加个钩子什么的,偏不,被测代码一点不动,只须在V