1、SOFTWARE2023软 件第 44 卷 第 7 期2023 年Vol.44,No.7作者简介:梅松(1978),男,江苏淮安人,本科,高级工程师(副高),研究方向:运维一体化方向。基于 DevOps 的精准测试体系构建与实践梅松 赵春生 杨玉捷 曹懿(中华人民共和国南京海关,江苏南京 210000)摘要:本文从精准测试的含义、与传统测试的区别、精准测试的关键点、实现机制、如何引入以及全链路集成几个方面说明如何构建精准测试体系,用于企业 IT 业务版本交付中的高质量把控,助力 IT 信息化。关键词:精准测试;基础数据建设;代码覆盖率率;全链路集成中图分类号:TP311.5 文献标识码:A D
2、OI:10.3969/j.issn.1003-6970.2023.07.032本文著录格式:梅松,赵春生,杨玉捷,等.基于DevOps的精准测试体系构建与实践J.软件,2023,44(07):125-127Construction and Practice of Precise Testing System Based on DevOpsMEI Song,ZHAO Chunsheng,YANG Yujie,CAO Yi(Nanjing Customs of the Peoples Republic of China,Nanjing Jiangsu 210000)【Abstract】:This
3、article explains how to build an accurate testing system,the content is about the meaning of accurate testing,the difference between accurate testing and traditional testing,the key points of accurate testing,the implementation mechanism and how to integrate into every link in the software life cycl
4、e,it can be used for high-quality control of enterprise IT business version delivery and help IT informatization.【Key words】:precision testing;basic data construction;code coverage;full link integration设计研究与应用0 引言软件创新是支撑新一代网络信息技术建设的关键灵魂,是支撑数字经济跨越式发展实现的核心基础,是实现制造实力强国、网络强国、数字城市中国的建设蓝图的强大关键支撑。2021 年 11
5、 月,工业和信息化部印发“十四五”软件和信息技术服务业发展规划中指出“新发展格局赋予产业新使命”任务,明确不断提升软件产业创新活力,坚持补短板、锻长板,夯实产业发展基础,着力打造更高质量、更有效率、更可持续、更安全的产业链和供应链。在海关企业信息化中,项目建设不足,导致后期运维工作繁琐以及运维处于被动救火状态的痛点,本质上对海关供应链系统高质量高速交付提出了新的要求,借此我们引入基于 DevOps 理念的高速高质量交付中精准测试体系,这也是当前软件交付领域研究和实践的一个热点。1 精准测试在 DevOps 交付中的概述1.1 精准测试定义精准测试也是一种测试技术和方法的总体称谓。相较于市场其他
6、更为普通的测试,精准化测试即是指在传统产品的测试或研发设计过程中,通过借助互联网技术手段直接进行对当前所有的被待测试的产品程序所进行的一个 360全方位的产品全景仿真测试,将对其产品测试研发的全过程完全进行可视化、数字化、标准化,最终实现产品的被待测完成后的程序快速上线运营的稳定、无风险、维护与运营管理成本低的目标等优势1。和国内其他的传统测试模式相比简单得复杂起来,精准的测试模式只针对需要经过计算机的自动采集存储后生成出来的海量的完整准确的、不能再随意的被任何恶意软件篡改或者删除的原生态的测试结果样本数据,同时由计算机自动对所有的这些样本原始的数据信息也进行了自动汇集、分析,并同时能直接输出
7、带有针对测试人员的培训指导,避免掉了由于以往在传统的测试过程模式中需要的人力记录而带来的极高时间成本性与低真实性所导致的问题。1.2 在 DevOps 交付中的核心特性在研发运维一体化(简称 DevOps)交付中,测试工作融入到了项目生命周期的每个环节,也带来了诸多挑战,如频繁部署甚至一天多次上线,导致测试时间紧126软 件第 44 卷 第 7 期SOFTWARE张,甚至变成不可能完成的任务,原来大量集中测试变成高频快速自动测试且对编码能力、精准测试提出新的要求,本文通过智能源码审计、数据建设,双向自动关联机制自动识别所有变动的源码、接口、功能清单并进行精准测试,核心特性如下:(1)智能源码静
8、态审计前置,通过多种工具化审计手段,不是靠单一的单元测试以保证审计覆盖率,而是通过分别进行从单元测试、坏态味道、路径分析、漏洞分析、质量分析、崩溃捕获分析等多种全方位智能代码静态审计分析,并能够通过丰富多样的分析报表形式和各种技术债务与审计风险指标结合进行展示2;(2)不改变原来的软件测试设计与执行方法,功能测试时将测试用例和代码关联,功能测试用例映射到代码层;(3)建立测试过程数据、测试过程用例库和测试代码间的自动双向关联机制和自动追溯体系3。1.3 Devops 交付中精准测试体系构建的关键点由于 DevOps 交付运营过程中包含有大量的数据信息、测试验证,重难点是精准测试体系的建立,特别
9、是数据选取和精准引入问题。我们将结合蕴含 DevOps理论、多维测试评估等多种技术理论知识,循序线性切入,覆盖研发全生命周期的软件质量提供解决方案。该解决方案包含代码覆盖率、Code 与 Case 精准关联、全链路集成三个方面,如图 1 所示。1.代码覆盖率2.Code与Case精准关联3.全链路集成图 1 Devops 体系构建的关键点Fig.1 The key points of Devops system construction2 精准测试在 DevOps 的实现机制2.1 主流覆盖率工具及其实现逻辑质量问题主要来自植入源头,精准测试体系目标也是为了从源头上改进系统过程。企业通过自底向
10、上的规范及工具化审计,内建质量,避免缺陷向下流转。根据开发前端、后端、数据库等编码规范,选型出工具集,例如 Sonarqube9.4 版,扫描插件中包括 Checkstyle、FindBugs、PMD-P3C、PLSQL-ZPA;通过以下两种方式实现主流覆盖率:(1)通过在 IDE 集成开发工具环境上安装扫描插件(Checkstyle、FindBugs、PMD-P3C、PLSQL-ZPA),配置规则。(2)安装 Sonar 和对应的插件环境,通过Jenkins 配置持续扫码任务;全方位智能代码静态分析,从开发架构来看包含前端、后端、数据库;从源码本身来看,包含规范性指标如代码编码格式、命名规范
11、、注释规范;内建质量指标如空指针、死代码;单元测试覆盖率等;设计指标如代码重复率、严谨性等;安全指标包含安全合规性检查、安全漏洞扫码。2.2 Code 与 Case 精准关联分析测试程序时,通过代码覆盖信息要比直接Debug要显得容易和更精准很多,有了代码覆盖率,我们能够先后地完成分析被待测的程序、指导测试设计、测试用例对设计代码质量做出的量化和评估标注、对版本质量给出了基本的评估等。下面我们分别举例 Code 与 Case 的精准关联实例,如图 2 所示为 Code 与 Case 的一对多正向关联;如图 3所示为 Code 与 Case 的反向关联。文件/com/zsmart/core/co
12、mmon/Constants.java用例Case/api/test/ApiTest2.caseCase/api/test/testApi.caseCase/api/test/testCIFlow.caseCase/业务测试/api/TestCase.caseCase/业务测试/api/TestCase2.caseCase/业务测试/ap1/查询流程的具体信息服务.CaseCase/业务测试/ap1/查询流程节点信息服务.CaseCase/业务测试/api/根据项目code查询流程服务.caseCodeCase1:N图 2 Code 与 Case 的 1 对多正向关联Fig.2 One-to-
13、many forward association between Code and CaseCase/业务测试/ap1/查询流程的具体俏息服务.case用例chm/test/api/controller/QueryFlow/DescControllerjavachm/test/api/service/implQueryFlow/DescServicelmpl.javachm/test/bilCIFlowinstancebiL.javachm/test/daVCIFlowinstanceDAO.javachm/test/daVCIFlow/NodeDAO.javachm/test/dto/CiF
14、lowinstanceDto.javachm/test/dto/FlowLabelDto.javachm/test/socket/ServerMonitor.javachm/test/socket/SingleSocketList.javachm/test/socketSocketSingle.javacom/zsmart/core/common/ConfigManager.javacom/zsmart/corelcommonConstants.javacom/zsmart/coro/common/DateHelperjavaCodeCaseN:1图 3 Code 与 Case 的反向关联Fi
15、g.3 The reverse association between Code and Case2.3 自动化测试引入精准测试有了代码质量评估,还需要更快速灵活地来适应各种市场需求变化,快速更好地迭代产品版本和快速交付产品。其精准性还需更进一步,以下将是自动化测试如何做到精准基础数据建设的方法。首先自动化测试用例标准步骤包含数据准备、业务操作校验、数据清理三个部分。为了尽可能提高数据获取方法的数据准确性,需同时消除并彻底隔离对来自第三方的操作或者行为导致的数据获取干扰,TestCase 将在执行过程开始进行前先彻底清除被干扰的数据,同时为了保证 TestCase 能够在整个执行过程结束后,就
16、可以直接获取所有与用例之间完整数据关联信息的覆盖率数据,会同时彻底清除之前已经被成功地获取到的干扰的数据4。在精准的测试和高覆盖率数据快速获取的数据驱动模127梅松 赵春生 杨玉捷等:基于 DevOps 的精准测试体系构建与实践式下,通常存在 TestCase 同时关联单个应用的场景和TestCase 关联多个应用的场景。TestCase 关联到单个测试应用的场景模式下,为了保持其精准性,例如 junit/Java TestNG 等测试工具就必须保证在每个测试用例执行完成后的 Dump 模式下覆盖率数据。针对 junit4Test 注解的用例,我们还可以直接通过修改 BlockJUnit4Cl
17、assRunner 类中的 runChild 方法,在每次执行完用例后进行覆盖率数据的 Dump。针对其他开源工具,也需要自定义服务动作,在 Set Up 中清除干扰数据,在 Tear Down 中获取用例完整关联的覆盖率数据5。TestCase 关联 N 个应用场景下,第一步个性化定制Sonar,在 Tcpclient 模式下启用注册监听机制,注册到Sonarqube;第二步通过 Jenkins 管理 Job 和应用的关联关系;第三步 Sonar 提供覆盖率收集服务和质量度量分析服务;第四步自动化管理平台在 TestCase 执行完成后,发起覆盖率数据收集。3 全链路集成精准测试体系在近几年
18、 CI&CD 中的应用价值明显,主要体现在提高大型项目的测试用例回归效率、根据版本变化能动态赠别关联的自动化回归测试用例、辅助人工定位回归范围并降低人工选择测试的盲点、CI&CD 中的风险预警,还有通过双向回溯,确定版本迭代的影响范围,最终我们将整个链路总结为:需求-覆盖率-影响范围-双向回溯-新增-变化覆盖,如图 4所示。4 结语本文重点阐述精准测试在 DevOps 的实现机制。以DevOps 技术理论为指导,形成全链路集成精准测试体系。使用代码精通扫码分析技术以及自动化设计方法,对软件 CI&CD 中质量管理进行循序渐进的数据驱动、变更代码覆盖率从源码、功能测试案例引入精测分析与测试案例关
19、联,从而构建基于 DevOps 的全链路精准测试体系。当然也存在一些不足之处,比如如何解决实际研发的痛点,还需进行深入挖掘和研究。参考文献1 TMQ精准测试实践团队.不测的秘密 精准测试之路M.北京:机械工业出版社,2018.2 徐焱,陈俊杰,李柯俊,等.Java代码审计(入门篇)M.北京:人民邮电出版社,2021.3 李龙.软件测试架构实践与精准测试M.北京:人民邮电出版社,2018.4 BEUST C,SULEIMAN H.Java测试新技术:TestNG和高级概念M.王海鹏,译.北京:机械工业出版社,2008.5 DUVALL P M,MATYAS S,GLOVER A.持续集成:软件质量改进和风险降低之道M.王海鹏,译.北京:机械工业出版社,2008.图 4 链路总结Fig.4 Link summary需求覆盖率影响范围双向回溯新增变化覆盖共有多少个需求整体覆盖率多少代码修改关联多少测试场景对应的测试场景自动化回归通过率多少新增多少用例新增用例覆盖率是否全量覆盖迭代变化