作者:中国工商银行软件开发中心
一、测试工作面临困境
随着工商银行业务的快速迭代,“IT架构转型工程”的持续推进,金融产品的复杂多元,测试工作在效率和质量上面临不少挑战。
一是业务发展,研发模式转型推动快速交付,如何满足更高的质效要求。开发中心推进产品研发模式由基于项目的瀑布研发模型向基于“小而美”需求项的敏捷研发模式转型,聚焦价值、减少浪费,持续、快速、高质量地交付有价值的产品,这对测试提出了质效保障的更高要求,如何在最短的时间内完成测试工作,针对测试的全面性和有效性是否有可量化的指标来衡量。
二是系统复杂度增加,信创转型加速架构转型,存在开发修改范围评估不全的问题。随着开发中心分布式、微服务架构的普遍应用,原子服务被更多的拆分,使系统具有更好的灵活性、可扩展性、故障隔离和容错性、可复用性、持续交付能力的同时,服务之间的依赖关系变得更为复杂,这将导致修改范围评估不全的问题产生。
三是场景更复杂且多元化,数字化转型助推金融场景化,全量回归测试效率低。开发中心经过这些年的金融场景化和系统服务化积累,已拥有数量庞大的流量用例和自动化用例可进行回归测试提高效率。然而,面临大量用例选择时,该如何用更科学的方式选择出有效的用例而不是基于人员经验,成为自动化回归待解决的难题。
二、开发中心精准测试的探索和实践
开发中心为实现测试从经验型向技术型转变,用数据量化整个测试过程质量,开展了精准测试体系建设,即利用计算机测试辅助分析系统,对测试过程进行监控,将采集到的监控数据进行分析,得到精准的量化数据,使用量化数据进行质量评价,并利用这些分析数据对测试过程不断完善,形成度量及分析闭环。具体来说,体系主要包括测试覆盖率精准分析、调用链路精准分析和智能推荐回归测试用例集等内容。
(一)测试覆盖率精准分析
主要功能,覆盖率工具采集测试环境上应用的实时程序覆盖情况,结合 git 提交记录识别版本变更程序,分析版本变更程序覆盖情况,进一步展示版本变更未覆盖程序,提醒测试人员补充测试。在核心应用建立质量卡点,将变更程序 100% 覆盖作为重要指标,以达成上线前测试无遗漏的目标,实现系统投产质量有据可依。覆盖率平台如图1所示。
支持程序语言,包括JAVA、PLSQL、Mybatis、JSP等。
实现原理,基于字节码技术,覆盖率工具会对被测应用代码进行字节码注入,在所有分支内埋入“探针”,探针记录了目标代码分支的执行情况。覆盖率工具在应用内开辟线程,和外部覆盖率系统服务建立socket连接,可以定时将“探针”数据传出,从而覆盖率系统便能收集到目标应用代码的覆盖率信息。覆盖率系统可能会收到相同程序不同时间、不同分支的覆盖信息,后台会使用合适算法(时间取最新,分支覆盖进行合并)对数据进行合并处理。
图1 覆盖率平台
(二)调用链路精准分析
主要功能,系统通过静态和动态结合分析程序间、跨应用的程序调用链路,结合git提交记录识别版本变更程序,展示变更程序修改的影响范围,辅助开发人员评估修改范围,测试人员分析及执行测试范围,从而减少因分析遗漏或执行遗漏导致的问题。
支持程序语言,包括前后端分离框架的JAVA-JAVA,CTP框架的JSP-FLOWC-OPG-存过/JAVA等。
实现原理,对于 Java 程序静态调用链,通过扫描分析项目的编译字节码,识别字节码中的invoke指令,获得应用的全量调用信息,进而拼接成调用链。动态调用链通过动态字节码注入,在方法开始处注入读取调用栈代码,从而获取实时调用链信息。对于PLSQL调用链,使用plsql存过解析框架,将存过源码解析为语法树,识别其中的存过调用,完成链路拼接;对于CTP调用链,扫描CTP框架的配置文件,通过解析其标签及属性,建立CTP程序调用关系,进而拼接成链路。
(三)智能推荐回归测试用例集
主要功能,系统在测试用例执行时,识别特定标记采集到与此案例相关的程序,获取用例与代码双向追溯的知识库,同时结合版本变更程序为测试推荐出绑定关键代码及变更代码的测试用例。智能筛选回归推荐将测试经验的依赖转换为了精准数据的推理,更为可靠、准确,与此同时精准的回归也有利于问题更早的发现,解决问题发现滞后的问题。
实现原理,自动化工程发起调用的报文会注入tag标记用来标志此次自动化调用,被测应用通过字节码技术,修改被测类字节码,将从报文内取到的tag与当前线程绑定,进而将当前线程的覆盖率数据与tag绑定,最终通过socket连接将数据外传给覆盖率系统,从而做到案例的覆盖率精准采集。用例级覆盖率采集原理如图2所示。
图2 用例级覆盖率采集原理
三、总结及后续展望
目前精准测试已在开发中心100多个应用开展推广,其中重点对信贷、快捷支付等核心应用实施投产前覆盖率指标需100%达标的管理要求;每月度版本需覆盖程序数在增加调用链路分析后,识别能力增加 20%,达到精准提示变更程序及其影响范围的目的,全面守护版本测试质量。自实施以来,整体线上缺陷率持续降低。在回归效率方面,通过累计用例-接口-程序调用知识图谱,并完成智能推荐和自动调度,测试人员回归成本降低 20%。
未来,开发中心将持续完善精准测试体系建设,通过自动化、智能化、生产数据引入、与持续集成结合等手段,实现提高测试效率、提升测试质量、加强持续集成和持续交付等目标。
近期好文:
“DevOps时代”公众号诚邀广大技术人员投稿