51Testing软件测试论坛

标题: 单元测试定位Bug问题求解 [打印本页]

作者: 测试积点老人    时间: 2019-9-19 10:34
标题: 单元测试定位Bug问题求解
使用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的要求,不得不编写单元测试代码,真是无奈,不过恰好借此机会向各位大侠取点经。

作者: qqq911    时间: 2019-9-20 10:32
多场景验证
作者: heibai123    时间: 2019-9-20 11:18
多场景验证
作者: jingzizx    时间: 2019-9-20 12:12

作者: jingzizx    时间: 2019-9-20 12:12
只能按照分析设计了
作者: litingting0214    时间: 2019-9-20 14:09
多场景验证
作者: godsayyou    时间: 2019-9-20 16:34
尽量把 f1  f2 解耦
作者: godsayyou    时间: 2019-9-20 16:35
尽量把f1 和 f2 解耦 ,然后再写测试用例
作者: 你好浮戈    时间: 2019-9-20 16:37
多场景测试




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2