一、背景与概念
随着软件测试行业的长足发展,测试理念、技术都在发生着日新月异的变化。因此一套完整的自动化测试用例对于每个软件公司都是不可或缺的,然而虽然有如此规模宏大的自动化案例集资源投入,同时也有大量人力的投入,但是当版本更新时,无法精确知晓哪些功能受到影响,进而不能精准选取测试用例。
而金融科技更是发展迅猛,服务于银行业的软件越来越多,需求迭代越来越快,系统架构越来越复杂,测试周期也越来越短;而银行业务系统有着业务链条长、系统结构复杂、无法完全解耦等特性,因此基于经验是无法精准选取测试用例的,不足以保障测试范围准确。
为了解决这些难点,精准测试在2012年被提出,所谓精准测试是一种可追溯的软件测试技术,就是借助一定的技术手段,通过算法辅助对传统的软件测试过程进行可视化、分析和优化的流程,其核心思想就是对测试过程的活动进行监测,将采集到的监控数据进行分析,得到精准的量化数据进行质量评价。
程序的微小变动也会带来新的测试工作,通过经验进行质量评估很容易引入问题,而全量的回归测试也难以负荷。下图是目前的测试工作现状。
因此使用精准的数据来判断,让测试人员精准地知道程序变更、测试范围、测试覆盖完整性等等,最终提供更加有效地测试分析结果。精准测试的目标如下图所示。
目标一是通过识别变更代码获取变更程序。精准测试可以更精确地圈定需要回归测试的用例范围。
目标二是精准测试基于变更程序或调用链维度提供测试度量结果,用以判断本次测试的变更程序代码是否覆盖完全,进而帮助测试更精准地评估测试风险,并形成测试准出标准。
目标三是精准定位错误原因,在测试用例执行时,精准测试针对失败案例,提供可视化调用关系,帮助测试快速定位问题,提升开发测试的协同效能。
综上,精准测试在测试范围分析、测试度量和定位错误等方面提供分析手段,使得测试工作事半功倍。
二、业界实践
(一)爱奇艺精准测试体系
爱奇艺精准测试支持客户端和服务端多端使用,支持手工和自动化场景,内部多个平台联动,打通整体使用流程,可以准确获取单个用例的代码覆盖。服务端能做到系统级别串联,客户端则能实现多组件整合,已经实现用例和代码分支或代码块级别的关联。
下图为爱奇艺精准测试体系整体架构图:精准测试服务是核心,负责建立用例和代码映射关系知识库并根据git提交记录计算测试范围和影响范围。不同的终端用到的代码覆盖率工具也不相同,在与外围平台的集成上,服务端可以和环境平台相结合,通过环境平台实现代码覆盖率工具的安装;客户端则可以和构建平台做集成。
(二)字节跳动精准测试实践
上图为字节跳动研发团队常见的研发流程。需求研发分为了五个阶段,精准测试主要在自测和功能验收测试和回归测试节点。在三个节点中,业务通过请求SmartEye服务,可以分别获取到自测推荐用例、功能测试推荐用例以及回归测试推荐用例。其中,自测用例和功能测试推荐用例用于验证代码变更是否引起存量程序功能异常,将功能缺陷发现前置,为研发团队争取更多的修复时间。回归测试用例推荐用来精简回归测试人力,帮助业务节省回归测试人效。
上图为精准测试整体方案,Code Graph平台为SmartEye提供数据支撑,Code Graph平台的双端静态代码调用链分析能力与整体调用链路拓扑数据,完成基于MR的变动DIFF分析以及上下游调用链分析,并针对变动DIFF部分,完成代码变动率的统计。
三、行内现状及发展
总体而言行内(中国工商银行)的精准测试目前缺少用例录制以及用例推荐功能。
1、覆盖率采集类型
我行在覆盖率采集方面有较深入的探索,目前支持多语言的覆盖率采集,包括JAVA、存储过程、CTP与MYBATIS。
2、使用覆盖率工具代码染色系统辅助测试
从GIT提交的JAVA变更获取到变更方法的维度,并支持采集变更存过,变更Mybatis方法,变更CTP文件。目前的覆盖率工具通过代码染色直观地展现了配置应用多种语言的增量覆盖率情况,为降低系统上线风险提供支持。
配置接入代码染色的应用,可直观获取到对应月度版本的变更程序方法级别覆盖率,将此作为精准测试的实践数据,在后续可展开更深度的分析,并不断扩大推广规模以及深度,增强精准测试的应用效果。
3、支持静态调用链解析,全链路精准上,工行探索异构调用链之间的关系,给出的测试分析更为全面。
4、静态调用链解析包括 CTP、存过、JAVA三大类
5、同行内平台打通部署
在行内环境集成之上,现已嵌入PAAS平台,改造后的应用只需要配置三个PAAS参数即可下载工具包,使用服务。若为非云环境的was,我们会从cmdb上取到配置信息做夜间的自动部署。
该示意图展现了数据流向,最底层的Docker镜像解析服务通过解析.dockfile文件获取字节码内容;向上是数据采集,客户端采集到的覆盖率结果通过覆盖率集群输送到消息中间件支上,同时静态调用链解析服务,会进行一个静态文件的解析;再向上是数据存储层,将覆盖率数据存在redis上,把海量覆盖数据,调用链数据存在hbase里面,环境相关的方法信息存在oracle里面;然后是服务层,根据拥有的数据提供实时变更方法覆盖率采集展示,投产日维度覆盖率报表,一级入度调用链覆盖报表三大功能。
四、进一步建设
1、目前的变更影响分析中,主要是基于静态调用链分析,但静态代码存在局限性,如反射,未来还需要进一步结合动态代码分析的结果进行修正和补充调用链。
2、精准测试智能化,主要体现在测试用例推荐方面,准确地推荐案例,形成“精准分析->自动化测试->覆盖度量”地测试闭环。目前中国工商银行内也在推进这方面发展,上研已提出“智能规范推送工具”基于现有的需求数据、案例内容、测试规范库的信息进行智能化提取,在无需额外投入的情况下,实现智能化案例推荐,用以提高测试效能。
3、在服务层的三项服务基础上进行拓展,基于数据基础层提供的数据支持,提供全链路精准打通不通异构程序间的关系,支持微服务之间的调度,全方位度量包含调用链的测试分析。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。