Visual Unit 4
FlowFly 5 企业版
FlowFly 5 教育版
基本理论
基本理论:软件危机简述
基本理论:解决方案综述
时间危机
解决时间危机:可视编程
解决时间危机:集约调试
其它危机
解决质量危机:快速调试
解决需求危机:快速迭代
解决管理危机:持集测试

    一、传统单元测试技术的缺陷分析


    单元测试是软件开发过程中保证代码质量,提升开发产能的重要手段。

    单元测试的基本方法是利用测试驱动代码,设定输入和预期输出,执行被测试程序,自动判断实际输出是否符合预期。输入数据和预期输出称为测试用例,也就是测试数据,这是单元测试工作的基本要素,而对输入的赋值过程和判断输出的比较过程,则是单元测试执行过程的核心。

    传统的单元测试过程是:手工编写或使用工具生成测试驱动代码来执行测试,由测试驱动代码给变量赋输入值,并由测试驱动代码判断输出是否符合预期,也就是说,对输入的赋值过程和判断输出的比较过程,是由测试驱动代码直接完成的。例如下面的C++语言代码:
    int add(int a, int b)
    {
         return a + b;
    }

 

    void add_test()
    {
         //用例1
         TEST_ASSERT(add(1,2) == 3);

         //用例2
         int a = 1;
         int b = 2;
         int ret = add(a, b);
         TEST_ASSERT(ret == 3);
    }


    其中add()是被测试函数,add_test()是测试函数,TEST_ASSERT是一个宏,其参数为一个布尔表达式,当该布尔表达式的计算结果为假时,表示被测试函数的实际计算结果不符合预期,向用户输出测试失败信息。

    add_test()的两个用例意义是一样的,只是写法不同,后一种更清晰地划分了输入和输出。现在以用例2做进一步说明:用例的输入是:a=1,b=2,通过测试驱动代码直接赋值,而预期输出是:返回值为3,判断实际输出是否符合预期的比较过程,则通过表达式ret == 3直接完成。

    以上是传统单元测试的工作过程示例,其中,对输入的赋值过程和判断输出的比较过程是由测试驱动代码直接完成的,单元测试已有几十年历史,出现了大量的开源或商业单元测试工具,但赋值和比较过程,基本上都采用这种方式。对传统赋值和比较过程的一个改进思路是:使用宏语法对测试驱动代码进行封装,这种方式不适合于没有预处理特性的语言,且赋值和比较过程仍然是由测试驱动代码完成的,也无法满足对复杂对象的处理。

    传统单元测试方式下,测试数据混合在测试驱动代码中,而测试驱动代码的数量往往是产品代码的二至五倍,且测试驱动代码本身也需要调试和维护,导致单元测试的综合成本很高。如果将单元测试过程改为表格驱动,由表格来决定哪些变量需要设定输入值及设定什么值,由表格来确定哪些变量需要判断预期输出以及预期输出的值,那么,用户只要在数据表格中建立和编辑测试数据,就可以高效地建立大量用例,测试数据也更易于维护和重用。同时,将减少和简化测试驱动代码,使测试驱动代码更易以由工具生成,对于工具完全自动生成的测试驱动代码,当产品代码更新时,工具也可以自动刷新,用户不需编写、调试和维护大量的测试驱动代码。总之,表格驱动的单元测试方式可以显著降低单元测试的综合成本。

广州凯乐软件技术有限公司
业务咨询:020-85589545 Email:sales@kailesoft.com Q Q:672746750
产品中心
FlowFly5企业版
FlowFly5教育版
Visual Unit 4
视频中心
FlowFly5视频
VU4演示视频
VU4视频教程
单元测试培训
技术中心
技术文章
常见问题
在线帮助
专家博客
关于我们
公司介绍
凯乐文化
联系我们
版权所有:广州凯乐软件技术有限公司 粤公网安备44010502002928号 粤ICP备17061168号