51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 10145|回复: 13
打印 上一主题 下一主题

[资料] 单元测试概述(3)

[复制链接]
  • TA的每日心情
    擦汗
    2017-10-23 11:42
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-12-3 17:49:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    四 白盒覆盖

      上面所说的测试数据都是针对程序的功能来设计的,就是所谓的黑盒测试。单元测试还需要从另一个角度来设计测试数据,即针对程序的逻辑结构来设计测试用例,就是所谓的白盒测试。在老纳看来,如果黑盒测试是足够充分的,那么白盒测试就没有必要,可惜足够充分只是一种理想状态,例如:真的是所有功能点都测试了吗?程序的功能点是人为的定义,常常是不全面的;各个输入数据之间,有些组合可能会产生问题,怎样保证这些组合都经过了测试?难于衡量测试的完整性是黑盒测试的主要缺陷,而白盒测试恰恰具有易于衡量测试完整性的优点,两者之间具有极好的互补性,例如:完成功能测试后统计语句覆盖率,如果语句覆盖未完成,很可能是未覆盖的语句所对应的功能点未测试。
      白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合,在此不作讨论。跟条件有关的覆盖就有三种,解释一下:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。老纳做过一些粗浅的研究,发现与条件直接有关的错误主要是逻辑操作符错误,例如: ||写成&&,漏了写!什么的,采用分支覆盖与条件覆盖的组合,基本上可以发现这些错误,另一方面,条件值覆盖与条件值组合覆盖往往需要大量的测试用例,因此,在老纳看来,条件值覆盖和条件值组合覆盖的效费比偏低。老纳认为效费比较高且完整性也足够的测试要求是这样的:完成功能测试,完成语句覆盖、条件覆盖、分支覆盖、路径覆盖。做过单元测试的朋友恐怕会对老纳提出的测试要求给予一个字的评价:晕!或者两个字的评价:狂晕!因为这似乎是不可能的要求,要达到这种测试完整性,其测试成本是不可想象的,不过,出家人不打逛语,老纳之所以提出这种测试要求,是因为利用一些工具,可以在较低的成本下达到这种测试要求,后面将会作进一步介绍。
      关于白盒测试用例的设计,程序测试领域的书籍一般都有讲述,普通方法是画出程序的逻辑结构图如程序流程图或控制流图,根据逻辑结构图设计测试用例,这些是纯粹的白盒测试,不是老纳想推荐的方式。老纳所推荐的方法是:先完成黑盒测试,然后统计白盒覆盖率,针对未覆盖的逻辑单位设计测试用例覆盖它,例如,先检查是否有语句未覆盖,有的话设计测试用例覆盖它,然后用同样方法完成条件覆盖、分支覆盖和路径覆盖,这样的话,既检验了黑盒测试的完整性,又避免了重复的工作,用较少的时间成本达到非常高的测试完整性。不过,这些工作可不是手工能完成的,必须借助于工具,后面会介绍可以完成这些工作的测试工具。


    五 单元测试工具

      现在开始介绍单元测试工具,老纳只介绍三种,都是用于C++语言的。
      首先是CppUnit,这是C++单元测试工具的鼻祖,免费的开源的单元测试框架。由于已有一众高人写了不少关于CppUnit的很好的文章,老纳就不现丑了,想了解CppUnit的朋友,建议读一下Cpluser 所作的《CppUnit测试框架入门》,网址是:http://blog.csdn.net/cpluser/archive/2004/09/21/111522.aspx。该文也提供了CppUnit的下载地址。
      然后介绍C++Test,这是Parasoft公司的产品。[C++Test是一个功能强大的自动化C/C++单元级测试工具,可以自动测试任何 C/C++函数、类,自动生成测试用例、测试驱动函数或桩函数,在自动化的环境下极其容易快速的将单元级的测试覆盖率达到100%]。[]内的文字引自http://www.superst.com.cn/softwares_testing_c_cpptest.htm,这是华唐公司的网页。老纳想写些介绍C++Test的文字,但发现无法超越华唐公司的网页上的介绍,所以也就省点事了,想了解C++Test的朋友,建议访问该公司的网站。华唐公司代理C++Test,想要购买或索取报价、试用版都可以找他们。老纳帮华唐公司做广告,不知道会不会得点什么好处?
      最后介绍Visual Unit,简称VU,这是国产的单元测试工具,据说申请了多项专利,拥有一批创新的技术,不过老纳只关心是不是有用和好用。[自动生成测试代码快速建立功能测试用例 程序行为一目了然 极高的测试完整性 高效完成白盒覆盖 快速排错 高效调试详尽的测试报告]。[]内的文字是VU开发商的网页上摘录的,网址是:http://www.unitware.cn。前面所述测试要求:完成功能测试,完成语句覆盖、条件覆盖、分支覆盖、路径覆盖,用VU可以轻松实现,还有一点值得一提:使用VU还能提高编码的效率,总体来说,在完成单元测试的同时,编码调试的时间还能大幅度缩短。算了,不想再讲了,老纳显摆理论、介绍经验还是有兴趣的,因为可以满足老纳好为人师的虚荣心,但介绍工具就觉得索然无味了,毕竟工具好不好用,合不合用,要试过才知道,还是自己去开发商的网站看吧,可以下载演示版,还有演示课件。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2009-12-24 17:10:25 | 只看该作者
    赞 sdlkfj¥
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2009-12-27 11:10:50 | 只看该作者
    赞,楼主,我真的学到了不少的单元测试的知识啊,谢谢分享啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2010-3-10 10:25:19 | 只看该作者
    自动化单元测试工具,可以保证覆盖率100%?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-4-15 14:37:34 | 只看该作者

    回复 4# 的帖子

    怎么可能100%,自动化工具也做不到,因为测试用例也都是随机生成的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2010-12-22 13:48:48 | 只看该作者
    谢谢分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2011-4-6 19:30:55 | 只看该作者
    真的有100%,可能有 美好的理想( ⊙ o ⊙ )啊!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2011-6-3 22:01:42 | 只看该作者
    谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2011-6-23 16:56:25 | 只看该作者
    老衲?楼主很有意思
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-2-24 17:10
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]测试师长

    10#
    发表于 2011-6-28 15:49:52 | 只看该作者
    看帖必回
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2012-1-7 12:04:33 | 只看该作者
    老纳所推荐的方法是:先完成黑盒测试,然后统计白盒覆盖率,针对未覆盖的逻辑单位设计测试用例覆盖它,例如,先检查是否有语句未覆盖,有的话设计测试用例覆盖它,然后用同样方法完成条件覆盖、分支覆盖和路径覆盖,这样的话,既检验了黑盒测试的完整性,又避免了重复的工作,用较少的时间成本达到非常高的测试完整性。

    老衲的意思是集成测试后再针对bug单对应的逻辑覆盖进行白盒测试试??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2012-1-31 16:43:54 | 只看该作者
    无语
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2012-7-9 00:40:47 | 只看该作者
    哎,对于楼主说的先进行黑盒测试,在分析白盒测试覆盖率,设计测试用例。这种思路感觉很清晰啊,但是对应上工具应该怎么做呢?没用过单元测试工具的人表示很晕啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2013-3-18 11:39:55 | 只看该作者
    我想说的是单元测试和集成测试到底是给开发人员测的还是测试人员测的?看了很多资料,怎么觉得单元测试是需要开发人员自己去测的?那集成测试呢?我是个新手,概念看的多了就有点昏了,还请各位前辈指点一二。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-10 15:37 , Processed in 0.080356 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表