Visual Unit是什么?
Visual Unit,简称VU,是一种可视化、自动化、标准化、高效率的C/C++单元测试工具,功能强大并且易学易用。

为什么要进行单元测试?
测试是保证软件产品质量的基本手段,单元测试就是将代码单元与其他代码隔离进行测试,相当于电视机工厂对元器件的测试。软件单元测试可能比电视机的元器件测试有更高必要性和价值,因为代码单元是人工编写的,"故障率"更高,软件复杂度通常也更高,导致在集成后查找代码错误的单位成本也高得多。

单元测试为什么难于实施?
工厂在组装电视机前都会对元器件进行测试,这是保证质量减少后续测试成本的最好选择,但很多软件开发企业都没有实施单元测试,为什么?成本太高或耗时太多工期不允许,成本高或耗时多的原因之一,是缺少测试效果好测试效率高的单元测试工具。
传统的单元测试工具大致分为两类:手工类和自动类,自动类使用自动静态分析和自动生成测试用例进行动态测试,只能发现有特征错误,而有特征错误一般不会超过20%,大多数代码错误都是自动系列无法发现的;手工类理论上可能发现所有错误,但要人工编写测试代码,耗费时间一般是编码时间的一倍到几倍。有些自动单元测试工具也提供手工方法,当然也要面对手工方法耗时多的问题。即使不考虑价格,由于自动类的测试效果远不能满足需要,更多企业还是选择手工类,投入编码时间的一至几倍来进行单元测试,不但成本高昂,而且常常难于实施。
在开发工具领域内,单元测试工具是最薄弱的一环,多年来都没有太大的进展。对于大多数软件开发企业来说,单元测试也是开发过程中最薄弱的环节。

Visual Unit介绍
经过五年的研发,我们创新了单元测试理论,找出了一套既保证测试效果又具有很高效率的方法,并完整地实现了这套方法,开发出新一代单元测试工具Visual Unit。
Visual Unit 1.0于2005年8月底公开测试,10月初发布1.0正式版。V2.0是在V1.0大量应用的基础上,完全重新设计的版本。
评价单元测试工具的应用价值,主要有几个指标:可用性、测试效果、测试效率,开发效率。
可用性:高度耦合的代码难于分割测试一直是单元测试的主要难点,VU2具有完善的桩功能,包括:补齐(自动生成未定义符号)、隔离(自动生成桩代码替换底层代码)、控制(在用例中随意控制底层代码的行为),从开始编码到升级维护的各个阶段,均可对任意层次、范围的代码实施分割测试,对被测试代码完全没有可测性要求。
测试效果:测试效果通常用白盒覆盖率来衡量,Visual Unit独有的"基于现有用例找出遗漏用例"的技术,可以轻松实现100%的语句、条件、分支、路径覆盖。这里说的是"实现"这些覆盖,而不仅仅是"统计"出覆盖率,仅仅统计出覆盖率意义并不太大,剩余的往往是最难的,没有自动工具的支持,找出遗漏用例是很困难的。
测试效率:自动生成测试代码和用例框架;功能强大的用例编辑器可快速建立用例集;无需编写代码即可随意控制底层代码行为;使用用例设计器高效找出遗漏用例;自动生成边界测试用例。能自动化的都已自动化,人的工作量已压缩到最低限度,保证了测试效率。
开发效率:VU还为高效开发调试提供支持。编码过程中,自动同步更新,随时可以执行测试;自动显示输入输出数据,可用简单语法输出任意中间变量、表达式的值,自动显示代码执行状况,使程序行为一目了然,帮助整理和验证编程思维,并能快速排除错误;增强调试器功能,包括:可视化选择调试输入、自动中断、无限制重复或后退、调试过程中切换除入。无需增加工作时间和劳动强度,在原来用于编码的时间内可以同时完成编码和基本单元测试。

从"桩控制"功能看VU2的技术领先地位
VU的多数功能皆为独有,难于与其他工具一对一比较,但"桩控制"在VU之前就具有成熟的技术,很多单元测试工具都已实现此功能,还有专门产品,因此可以作为判断VU技术地位的一个参考点。"桩控制",或者Stub、Mock,目的都差不多,都是在用例中控制底层代码的行为,即在底层代码未实现、被隔离、或不符合测试要求时,通过一定的技术手段模拟底层代码的行为。对于VU来说,"桩控制"是一个重要功能,但只是一个三级功能(用例编辑器下的用例助手下的一个功能),仅仅这一个功能,就具有多项重要的技术进步:
不需要编写代码;
不仅可以设定返回值,还可以设定输出参数、成员变量、全局变量的值,支持任意数据类型;
多次调用同一子函数可以分别设定不同的行为,例如,指定返回1,2,3,4,那么子函数第一次执行返回1,第二次执行返回2…;
自动判断子函数是否被调用和调用次数(在自动控制等领域具有重要价值);
可以屏蔽桩控制,改为调用实际代码(只需重设一下选项)。

VU2部分功能清单
具有完善的桩功能,包括:补齐、隔离、控制,从开始编码到升级维护的各个阶段,均可对任意层次、范围的代码实施分割测试;
自动生成测试代码和用例框架;
可视化编辑测试用例,用简单语法判断各种输出,还可自动判断中间变量;
可在用例中随意控制子函数的行为,包括设定返回值、输出参数、成员变量、全局变量的值,多次调用同一子函数可以设置不同的行为;
自动统计语句、条件、分支、路径覆盖;
显示参数、成员变量、返回值等输入输出数据;
显示每个用例所执行的代码;
自动画出逻辑结构图,显示每个用例的执行路径;
显示逻辑结构图中任一语句块、分支、分支结构、路径的代码;
逻辑结构图可自由裁剪,语句块、分支、分支结构、路径均可删除/恢复;
用例设计器可轻松找出遗漏用例,实现100%的语句、条件、分支、路径覆盖;
自动描述程序行为,帮助整理、验证编程思路提高编程效率,快速排除程序错误;
增强调试器功能,自动支持后退、重复、可视化选择输入、调试中切换输入;
自动生成HTML格式的测试报告。