AI技术助力软件测试达到“质效合一”

发表于:2024-3-01 19:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:KerryZhu    来源:CSDN

  目前测试及其自动化的形势
  目前整个软件质量工程环境与软件开发的节奏越来越快,开发团队受制于市场的竞争,需要持续构建、持续集成、持续测试才能做到持续交付。持续测试在当今软件研发中很有必要,测试的最终目的需要达到这种极致的状态。
  在Google,一个测试用例的执行不能超过60秒,时间越短越有价值。同时Google也强调自动化测试。Google之前有一个著名的GTAC,就是自动化测试会议。现在这个会议已经改成工程效能。目前,效能逐渐被注重起来。Google以前把公司的测试部门和质量部门称为工程效率部门,现在包括阿里、百度等大公司也开始注重效能。效能不仅是从速度上体现的,还可以从质量上来体现。
  那么,为什么要做测试?测试最终为业务服务。无论是做开发还是做测试,最终都是为了解决业务问题、解决用户的问题。开发更多地是构建质量,而测试是质量的守护者,可以帮助开发少犯错误,提醒开发需要改进的方面。这样就更好地帮助团队构建质量。作为质量守护者也不是要完全到最后才做系统测试、验收测试,守护质量可以从全过程来守护质量。
  测试的效率是当今社会关注的焦点。白盒测试黑盒测试、手工测试、自动化测试,哪一个效率更高呢?朱少民介绍道,手工测试的效率有时候也可以很高,但现在静态测试做得比较少,更多地是动态测试。静态测试工具自动做一些安全性和漏洞模式的检测,不需要投入太多的人力,人力只需要对结果进行分析。有些工具的误报率可能比较高,基本上降到10%,高的话可能也会有20%-30%。
  自动化公认会带来高效率的,敏捷开发的回归测试范围越来越大,完全靠手工测试肯定不行。在一般情况下,软件测试中回归测试更适合自动化,虽然这个观点是比较老的,但是还是适用于当今环境。
  然而工具的发展能力比较弱,过分关注工具、关注脚本本身,往往就忽视了业务、产品与测试用例的质量和覆盖率。面对大量的代码和组件,有经验的工程师在系统和业务层次上的探索式测试能保证质量。但是机器理解这个业务是很困难的,当今人工智能工具多数是脱离业务的,真正跟业务结合比较紧密的工具还是很少见的。AI测试工具可以理解代码,但是真正跟业务结合起来的数据也很少。就像机器学习有时候需要大量的数据,但是真正基于业务的数据比较少,像开源里面有4TB的代码,这些代码更多的是可以做Java、C、Python这方面语言的学习,甚至可以做到Bug的自动定位、Bug的自动修复。但是如果真正结合业务,发现与业务结合这个工具还是很弱的,需要靠人进行测试。
  从测试质量来讲,代码覆盖率只是一个比较客观的结果,但是代码覆盖率做到100%,也不能保证很高的质量。开发很容易就可以做到代码覆盖100%,但是不会测一些非法的或特殊值的输入。所以这个角度来讲,代码行做到100%覆盖还会遗漏比较多的缺陷。当今多数企业甚至对代码行100%的覆盖都没有要求,只有部分企业要求代码行覆盖做到80%以上。代码是有控制流和数据流的。代码行覆盖、分支覆盖是控制流。数据流主要是变量的定义和引用,在一般的软件里不会做代码的分析,只有在航空航天、核工业,或者其他的一些生命相关的系统会做变量的定义和引用的分析。
  测试是为了满足业务的要求。之前去某金融科技公司或者其他一些公司交流,发现他们都没真正做业务测试,甚至连一张业务流程图都没有,无法保证业务不出问题。业务流程图就是一个业务层次的控制流,还有业务的数据流。以前做功能测试的时候,更多地是做了数据测试,但可能业务数据复杂,并没有完整地依据数据流图做验证,只是验证了数据的模块或者功能的数据,并没有真正验证整个业务数据流。所以业务决策、业务流程、业务规则、业务操作、业务数据,甚至业务将来的可持续发展,包括它的安全性,都需要验证。 
  除了业务、用户角色、用户行为、事件、条件、场景、数据、运行环境,当今更多用微服务架构还有云平台,还有配置参数组合都需要考虑测试。
  质量和效率的统一
  当公司是做敏捷开发,拥有专职的测试工程师时,上述“质效合一模型”是值得大家思考和引用的。当开发做新功能的时候,针对新功能做设计、写代码,开发自动化测试比较困难,无法调试脚本,被测对象也不稳定,即使能调效率也是比较低的。所以从这个角度来讲,新功能最好用探索式测试去做,因为不用写测试用例,把省下了写测试用例的时间,来写上一个迭代的、已经通过评审/验证的、稳定的功能,并针对上一个版本的功能做自动化测试。在这样的情况下你才能更好地保证质量,又能提高效率,因为所有的回归测试是自动化的,新功能相对是未知的,用探索式测试发挥人的潜力与智慧,就更好地做到质量和效率的统一。
  虽然现在都在提倡自动化测试,上面这张图的数据反映了自动化测试的国际水平,但是工信部五所(赛宝)做的国内自动化测试现状调查结果比这个要差很多。这里,自动化测试做得好的只有32%左右,真正做到90%以上的只有4%。还有19%做得还可以,自动化比重超过了50%。可以看出,大多数的自动化测试实际做得不够好。
  AI提高测试效率
  早期是手工测试,然后到自动化测试,到后面用健壮的TA工具与开源框架集成,得到大家的欢迎和广泛的应用。
  现在行业在推云计算大数据,希望公司可以构建一个代码库,把所有的代码都放在一起,这样可以更好地复用或者学习。公司也在云化自己的开发环境和测试环境,这样才能有更多的数据积累下来,可以实现更好的机器学习。当前基于云计算平台和大数据,基于生态链工具,可以更好地去完成自动化测试,更具有弹性。未来测试基于新的微服务架构或者其他架构,真正做到智慧、自主。在架构方面甚至在需求工程方面,正在研究这种自主的系统,算法不变可以自主扩展、动态成长。
  未来人更多地是做分析、做设计、建模、训练模型。所有的执行应该交给工具去做的。而且在今天是有这个条件,有大量的数据,许多算法也都是成熟的。Google提供了TensorFlow(TF)或其他的一些平台,但这些是脱离业务的。针对自己的业务,需要大量的分析来构建对应的模型。另外人机交互智能更有价值,不能完全靠机器, Google搞AlphaGo,先是AlphaGo做出来才了有AlphaZero,还是要有一个过程。人工智能或者机器人,或者未来的测试机器人是需要人去训练的。就相当于把测试工程师的经验和知识,对业务流程和业务场景的理解赋能给机器人。让工具与用户见面,跟业务有更强的绑定。现在人类可以给工具做按钮、菜单、文字、图标的识别训练,但它还不能真正的认知业务流程。东南大学、复旦大学正在研究知识图谱,在特定的业务领域可以帮助计算机去提高认知。
  一般来讲,人工智能有计算智能、感知智能、认知智能,现在计算智能和感知智能已经相对比较成熟,但认知智能比较弱,要让人工智能真正去理解人类业务还是比较困难的。需要人类构建业务流程或者知识图谱,让机器去理解、学习。
  人工智能需要靠很大的人力,没有大量的数据标识,机器是不会去识别或者做预测的。所以有时候讲在某些落后地区,非一、二线城市会有大量的人相当于民工一样在做数据标识,这个过程就会比较慢。
  人工智能的算法不一定要有数据标识,监督学习需要标识数据,还有无监督学习、强化学习。目前无监督的学习更受欢迎,有更好地应用和发展。
  从单元测试扩展到系统测试,文字识别变成图像识别来处理。不管是汽车电子还有其他的领域,可以把有限状态机或者是基于模型测试跟人工智能测试结合起来,测试效果会更好一些。在移动应用这方面的计算能力比较弱一些,可以用多个机器人去模拟用户的操作。在游戏行业,腾讯华为、网易等公司在测试上应用AI能力方面有了良好应用成果,与高清摄像头结合,可以做到更多的场景识别、人工智能辅助决策,实时游戏控制等。(具体见演讲PPT)
  AI技术助力于测试覆盖率
  AI技术助力于测试覆盖率,可以借助AI提高功能测试覆盖率、源码测试覆盖率、回归测试覆盖率、系统非功能性测试覆盖率等。同时,也可以借助关键字引导的搜索策略以提高测试覆盖率。
  回归测试利用AI,选择40%测试用例集可以达到80%的测试覆盖率。通过针对关键字索引提高测试覆盖率。例如:Eggplant AI导入已有测试资产创建模型、使用智能算法选择最佳测试集运行测试,基于模型算法能最大程度减少构建与维护的成本。Eggplant AI的测试覆盖率与以前相比,有很大提高,达到80%-90%。
  通过遗传算法和对源码“编译时插桩”的方式自动生成测试用例,以探索二进制程序内部新的执行路径,而且能够不断优化执行路径,从而获得高效的模糊测试策略。这样可以大大提高源码测试覆盖率。
  使用NLP进行E2E Web测试依赖项检测验证所有依赖关系,并使用一个新的恢复算法来确保在最终的测试依赖关系,提高回归测试覆盖率。
  Peach Fuzzer模糊测试工具通过代理和状态机感知状态,实时调整变异策略,从而发现应用程序中更多的安全性漏洞,可以提高系统非功能性测试覆盖率。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号