51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1584|回复: 8
打印 上一主题 下一主题

单元测试定位Bug问题求解

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:21
  • 签到天数: 409 天

    连续签到: 3 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2019-9-19 10:34:02 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
    1测试积点
    使用Cppunit进行单元测试,但是在写测试用例的过程中遇到了麻烦:

    描述:
      有类A,成员函数有f1和f2,还有成员变量等等,现在要测试函数f1和f2.

    条件:
      f1和f2是相关联的,无法找到(理论上也没有)一种验证方法可以单独确定这两个函数的逻辑是否正确。

      假设情况一:f1的正确性严格依赖f2。那么导致的结果就是cppunit跑出的结果若显示f2失败,那么必然也会导致f1失败,这种情况下我们无法判断是f1存在bug还是f2存在bug,或是都存在bug,唯一能确定的是bug存在f1和f2中;

      假设情况二:f1的正确性严格依赖f2,而f2的正确性又严格依赖f1。如果cppunit在f1中失败,必然也使得f2失败,这个时候,我们更无法判断到底是f1存在bug还是f2存在bug,或是都存在bug,唯一能确定的是bug存在f1和f2中。

      得出结论,在以上两种情况下,唯一能确定的就是bug肯定存在于由f1和f2组成的这个关系体中,这是一个范围;更极端的情况可能是这个关系体中函数的数量为N,并且两两之间存在依赖关系,那么定位bug的工作就更加艰难。

    问题讨论:
      1.有没有方法可以在不改变待测试代码的基础上,完成对单个函数的精准定位,而不是范围上的定位?
      2.这种待测试代码是否可以在设计上完全避免(个人倾向于无法避免)?如果可以,是否会引进不必要的开销?例如,一个set方法的验证可以通过相应的get方法来验证,但是这个get方法可能是根本不需要的,而是为了迎合测试的顺利而额外添加的(虽然说set的正确性依赖get的正确性,但由于get一般过于简单,bug滋生率近乎零,所以用此例;事实上,如果连get方法都怀疑的话,测试基本就无法进行了,因为没什么验证是可信的)。
      3.本人(菜鸟)是在实际中遇到了这种情况,不知道各位是否遇到过,又是如何处理的?

    补充:
      出于测试的初衷考虑,一般get方法是不用测试的,否则那就是为了测试而测试了(花20%时间足以),而不是出于效率的考虑,当然有个原则是说所有的代码都应该被测试,但开发人员的精力是有限的,如果把80%的时间放在了80%无用的地方,就太不值了,这似乎是个矛盾。。。
      其实,本人手头的项目已经运行良久,经过大量的实际运行测试,没出什么问题(有点小自信,嘿嘿),但出于boss的要求,不得不编写单元测试代码,真是无奈,不过恰好借此机会向各位大侠取点经。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-9 02:00 , Processed in 0.062043 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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