文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

功能测试用例自动生成算法 Pairwise

2024-12-02 18:04

关注

该如何设计功能测试用例呢?

根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。也就是说,大多数的bug都是条件的两两组合造成的。

Pairwise算法是L. L. Thurstone在1927年首先提出来的,他是美国的一位心理统计学家。Pairwise算法基于两两组合,过滤出性价比高的用例集。它的思路是:如果某一组用例的两两组合结果,在其他组合中均出现,就删除该组用例,从而精简用例。

对于上述测试场景,可以通过笛卡尔积设计18条两两组合的测试用例:

  1. 1,M W C 
  2. 2,M W E 
  3. 3,M L C 
  4. 4,M L E 
  5. 5,M I C 
  6. 6,M I E 
  7. 7,O W C 
  8. 8,O W E 
  9. 9,O L C 
  10. 10,O L E 
  11. 11,O I C 
  12. 12,O I E 
  13. 13,P W C 
  14. 14,P W E 
  15. 15,P L C 
  16. 16,P L E 
  17. 17,P I C 
  18. 18,P I E 

对于第18条用例P I E来说,两两组合是PI ,PE ,IE,PI在17号,PE在16号,IE在12号出现过,所以第18条用例可以过滤掉。按照这个算法继续过滤,最终剩下9条用例:

  1. 1,M W C 
  2. 4,M L E 
  3. 6,M I E 
  4. 7,O W E 
  5. 9,O L C 
  6. 11,O I C 
  7. 14,P W E 
  8. 15,P L C 
  9. 17,P I C 

用例减少了50%!而且维度越多越明显,当有10个维度的时候4*4*4*4*3*3*3*2*2*2=55296个测试case,pairwise为24个,是原始测试用例规模的0.04%。

Python实现

源码已上传:https://github.com/dongfanger/python-tools/blob/main/pairwise.py

  1. #!/usr/bin/python 
  2. # encoding=utf-8 
  3.  
  4. ""
  5. @Author  :  Don 
  6. @Date    :  2021/11/03 20:34 
  7. @Desc    :   
  8. ""
  9.  
  10. import copy 
  11. import itertools 
  12. from sys import stdout 
  13.  
  14. from loguru import logger 
  15.  
  16.  
  17. def parewise(option): 
  18.     """pairwise算法""" 
  19.     cp = []  # 笛卡尔积 
  20.     s = []  # 两两拆分 
  21.     for x in eval('itertools.product' + str(tuple(option))): 
  22.         cp.append(x) 
  23.         s.append([i for i in itertools.combinations(x, 2)]) 
  24.     logger.info('笛卡尔积:%s' % len(cp)) 
  25.     del_row = [] 
  26.     bar(0) 
  27.     s2 = copy.deepcopy(s) 
  28.     for i in range(len(s)):  # 对每行用例进行匹配 
  29.         if (i % 100) == 0 or i == len(s) - 1: 
  30.             bar(int(100 * i / (len(s) - 1))) 
  31.         t = 0 
  32.         for j in range(len(s[i])):  # 对每行用例的两两拆分进行判断,是否出现在其他行 
  33.             flag = False 
  34.             for i2 in [x for x in range(len(s2)) if s2[x] != s[i]]:  # 找同一列 
  35.                 if s[i][j] == s2[i2][j]: 
  36.                     t = t + 1 
  37.                     flag = True 
  38.                     break 
  39.             if not flag:  # 同一列没找到,不用找剩余列了 
  40.                 break 
  41.         if t == len(s[i]): 
  42.             del_row.append(i) 
  43.             s2.remove(s[i]) 
  44.     res = [cp[i] for i in range(len(cp)) if i not in del_row] 
  45.     logger.info('过滤后:%s' % len(res)) 
  46.     return res 
  47.  
  48.  
  49. def bar(i): 
  50.     """进度条""" 
  51.     c = int(i / 10) 
  52.     jd = '\r %2d%% [%s%s]' 
  53.     a = '■' * c 
  54.     b = '□' * (10 - c) 
  55.     msg = jd % (i, a, b) 
  56.     stdout.write(msg) 
  57.     stdout.flush() 
  58.  
  59.  
  60. if __name__ == '__main__'
  61.     pl = [['M''O''P'], ['W''L''I'], ['C''E']] 
  62.     a = parewise(pl) 
  63.     print() 
  64.     for i in a: 
  65.         print(i) 

输出结果:

  1. 100% [■■■■■■■■■■] 
  2. ('M''W''E'
  3. ('M''L''E'
  4. ('M''I''C'
  5. ('O''W''E'
  6. ('O''L''E'
  7. ('O''I''C'
  8. ('P''W''C'
  9. ('P''L''C'
  10. ('P''I''E'
  11. 2021-11-07 11:38:56.850 | INFO     | __main__:parewise:24 - 笛卡尔积:18 
  12. 2021-11-07 11:38:56.850 | INFO     | __main__:parewise:45 - 过滤后:9 

参考资料:

https://blog.csdn.net/ztf312/article/details/78792906

 

https://www.cnblogs.com/df888/p/11747616.html

 

来源:dongfanger内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯