单元测试简介
我们先来看看简单代码中的简单错误:
int Add(int A, int B) { return A - B;};
代码中把+写成了-,即使是这种最简单代码中的最简单错误,如果没有人工设立的测试用例,任何测试工具恐怕都无法自动发现,但只要人工建立一个测试用例,输入两个1,判断输出是不是2,立即就可以发现错误。可以说,建立测试用例,人工定义程序的输入,执行程序并自动验证输出是否符合预期,是单元测试的最主要也是必不可少的方式。
Visual Unit简介
Visual Unit 研发历时三年多,拥有多项在单元测试领域具有里程碑意义的原创技术,这些技术均已申请专利。
Visual Unit 部分功能:
自动生成测试代码
可视化编辑测试用例,人工只需建立容易想到的测试用例
自动统计语句、条件、分支、路径覆盖
显示参数、成员变量、返回值等输入输出数据
显示每个用例实际执行的代码
自动画出逻辑结构图
显示逻辑结构图中任一语句块、分支、分支结构、路径的代码
逻辑结构图可自由裁剪,语句块、分支、分支结构、路径均可删除/恢复
测试用例设计器可轻松找出遗漏的测试用例,实现100%的语句、条件、分支、路径覆盖
程序行为一目了然,帮助整理、验证编程思路,提高编程效率
快速排除程序错误
提高调试效率
开发语言:C/C++
测试过程演示
三阶段完成彻底的测试:
1) 根据程序的典型输入建立一个或几个测试用例,这种测试用例是很容易想到的;
2) 针对未覆盖的逻辑单位,使用测试用例设计器设计覆盖用例,完成100%语句、条件、分支、路径覆盖;
3) 运行自动边界测试检查预料之外的隐含错误。
请注意对测试效果的要求,VU所说的是完成,完成100%语句、条件、分支、路径覆盖,而不是仅仅统计出代码覆盖率。
对复杂输入输出的处理
程序的输入输出可能很复杂,例如:参数是复杂的结构或对象、需要读写一些成员变量等等。如果不能轻松处理复杂的输入输出,测试工具的实用价值就会大打折扣。
测试逻辑很复杂的程序
VU所说的完成100%语句、条件、分支、路径覆盖,是指很复杂的程序也能完成这种覆盖,而不是只能对付特定的简单的例子。这个示例演示比较复杂的代码的测试,当然,为了便于讲解,不便使用过于复杂的示例,VU的Samples中有更复杂的示例。
边开发边测试
VU除了能实现彻底测试外,还创造性地使单元测试工具同时成为高效的开发调试支持环境。开发工程师即使不做单元测试,也肯定要调试自己的代码,编程时肯定需要调试环境,包括用于执行程序的驱动和输入数据,VU建立的测试代码兼具测试和调试功能,编写一个函数时,通常在一分钟内就能建立好调试环境,同时,VU提供的如下功能大量地提高开发和调试的效率:
显示输入输出数据,有助于整理和验证编译思路,提高开发效率;
浏览输入输出数据和用例所执行的代码,通常能很快地找出代码错误;
调试增强功能,调试时可以随意后退,可以切换输入等等。
对于测试人员比例较高企业而言,我们推荐用以下流程进行开发和单元测试:
1)开发工程师编码时进行基本的单元测试,即三阶段中的第一阶段。开发工程师写代码时肯定要想清楚代码的功能并且要使用基本的输入进行调试,这些就是基本的测试用例,实际上不需要多做什么。开发工程师提交代码同时提交测试代码和测试报告。
2)测试工程师检查基本测试用例是否符合设计,并在此基础上完成白盒覆盖和边界测试。由于有了初步的测试,保证了代码可测性,不可能产生因为不当耦合造成难于测试的状况。在现有用例的基础上,使用测试用例设计器找出遗漏用例应该不会有太大障碍。测试人员只需要提交更新过的测试代码和测试报告,不需要另外记录测出的问题。
3)开发工程师下载新的测试代码和测试报告,执行整体测试,然后针对报告了错误的函数执行函数测试以获取详细信息,必要时进行调试,找出错误,修改代码,使所有测试通过,再次提交产品代码和测试报告。
4)测试工程师再次执行整体测试,验证所有的测试均已通过。
|