CN114637688A - 基于版本分支的覆盖率统计方法及装置 - Google Patents
基于版本分支的覆盖率统计方法及装置 Download PDFInfo
- Publication number
- CN114637688A CN114637688A CN202210359890.XA CN202210359890A CN114637688A CN 114637688 A CN114637688 A CN 114637688A CN 202210359890 A CN202210359890 A CN 202210359890A CN 114637688 A CN114637688 A CN 114637688A
- Authority
- CN
- China
- Prior art keywords
- version
- coverage rate
- information
- program
- library
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种基于版本分支的覆盖率统计方法及装置,涉及程序开发领域,可应用于金融领域和其他领域,所述方法包含:根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;根据初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据变更行覆盖率和测试覆盖率结果获得覆盖率统计结果。
Description
技术领域
本申请涉及程序开发领域,可应用于金融领域和其他领域,尤指一种基于版本分支的覆盖率统计方法及装置。
背景技术
程序覆盖率是指运行项目中的测试方法后,能够执行的语句和所有语句的比值,程序覆盖率反映代码的被测试情况,是软件测试中种衡量代码质量一种指标。
目前覆盖率的统计流程:使用持续集成调试工具Jenkins,驱动测试工具Junit或Testng跑测试案例,使用Jacoco覆盖率工具生成覆盖率结果,把覆盖率结果文件推送到代码质量平台Sonarqube展示并统计结果。执行全量的程序案例,对覆盖的代码进行标识,与全行可覆盖率的代码对比,可得到覆盖率。全量覆盖率=被覆盖率代码/需要覆盖的代码。把代码行根据当前的变更情况标识为是否当期版本变更的程序,如果为当期版本变更,则标识为变更代码行,新增代码行中。变更程序覆盖率反映当期版本修改程序被测试代码的覆盖率,代码修改后存在风险,需要重点关注。变更代码覆盖率=变更代码中被覆盖的代码行/变更代码中需要覆盖的代码行。在持续集成流程水上建立例行的包含单元测试和代码扫描作业的任务,定时对全量的单元测试进行执行和结果的收集。
在统计版本的覆盖率时,是以月度版本为维度统计。由于多个版本并时开发,版本之间存在同步的情况,同一个分支会有上一个版本的程序归并过来,这时程序应该统计为上个版本的,而不是当前版本的程序,这些程序会被识别成变更程序,需要在当期版本覆盖。无法准确对整个版本的变更程序进行准确度量,评估测试情况,版本之间的归并程序影响覆盖率的统计。部分无需测试的代码影响覆盖率的统计。因为变更程序的识别需要基础版本的扫描记录作对比,现有方案会以流水线创建后第一次执行扫描的状态作为基础版本,在此之前的提交的程序将无法正常识别为变更程序。另外由于需要先跑全量案例才能统计覆盖率,如果程序变量频率,每次都需重复整个流程,基于全量跑效率慢,无法快速反馈统计结束。
发明内容
本申请目的在于提供一种基于版本分支的覆盖率统计方法及装置,通过识别变更程序、无业务逻辑代码,优化流程等手段克服了现有统计覆盖率准确覆盖率统计。
为达上述目的,本申请所提供的一种基于版本分支的覆盖率统计方法,所述方法包含:根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
在上述基于版本分支的覆盖率统计方法中,可选的,根据预设周期版本分支模型通过项目的投产时间批次创建版本分支包含:根据git代码管理工具通过预设周期的版本分支模型利用项目的投产批次构建一个或多个版本分支。
在上述基于版本分支的覆盖率统计方法中,可选的,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单包含:根据程序记录提交信息对应的版本信息将所述程序记录提交信息区分为当前版本修改程序或上周期版本并行开发的同步归并程序;根据区分结果生成对应的标识信息,将所述标识信息与所述程序记录提交信息绑定后,按版本分支登记至变更程序清单。
在上述基于版本分支的覆盖率统计方法中,可选的,根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据包含:通过所述初始时间信息将版本库的状态切换到未修改代码的原始状态;对切换后的版本库进行代码扫描获得基准版本数据。
在上述基于版本分支的覆盖率统计方法中,可选的,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:将所述版本库状态切换回当前时间对应的最新状态;根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据。
在上述基于版本分支的覆盖率统计方法中,可选的,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单还包含:根据程序记录提交信息获取程序的业务类别,根据所述业务类别中不带业务逻辑的程序信息生成覆盖率白名单;将所述覆盖率白名单补入所述变更程序清单。
在上述基于版本分支的覆盖率统计方法中,可选的,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:根据所述覆盖率白名单过滤掉最新状态下的版本库中不带业务逻辑的程序后,通过单元测试和代码扫描获得测试覆盖率结果和当前版本数据。
在上述基于版本分支的覆盖率统计方法中,可选的,根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息还包含:统计所述流水线覆盖率统计任务的处理耗时,将所述处理耗时与预设时间阈值比较;当所述处理耗时高于预设时间阈值时,构建增量流水线统计任务和全量流水线统计任务,通过预设周期触发所述全量流水线统计任务进行覆盖率统计,通过提交代码触发所述增量流水线统计任务进行覆盖率统计。
在上述基于版本分支的覆盖率统计方法中,可选的,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:当触发增量流水线统计任务时,根据所述变更程序清单调取对应的测试脚本,根据所述测试脚本对最新状态下的版本库进行单元测试获得剔除同步归并程序后的测试覆盖率结果;根据所述变更程序清单对最新状态下的版本库进行代码扫描获得剔除覆盖率白名单内程序后的当前版本数据。
本申请还提供一种基于版本分支的覆盖率统计装置,所述装置包含构建模块、基线生成模块、测试模块和统计模块;所述构建模块用于根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;所述基线生成模块用于根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;所述测试模块用于根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;所述统计模块用于根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
本申请还提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上述方法的步骤。
本申请的有益技术效果在于:在执行单元测试和代码扫描的过程踢出版本分支归并的程序,只统计实际本版本提交的程序,提高了增量指标的执行效率。通过自动补充一次基础基线单元测试扫描,能够识别创建流水线前提交的变更程序,解决了创建流水线前的变更程序无法识别的问题。使用增量指标能快速准确的进行反馈。通过判断全量流水线时间长是否超过预设的参数,动态确定变更程序流水线是否启动。两条流水线可以分开不同的频率执行,满足了增量指标的及时性和全量指标的完整性需求。对不带业务逻辑的程序进行过滤,只统计有业务逻辑意义的程序,提高覆盖率结果的准确性,让用户只需关注有业务逻辑的程序覆盖情况。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,并不构成对本申请的限定。在附图中:
图1为本申请一实施例所提供的基于版本分支的覆盖率统计方法的流程示意图;
图2为本申请一实施例所提供的版本分支的构建逻辑示意图;
图3为本申请一实施例所提供的变更程序清单的构建流程示意图;
图4为本申请一实施例所提供的基础基线补充流程示意图;
图5为本申请一实施例所提供的覆盖率白名单构建流程示意图;
图6为本申请一实施例所提供的增量指标覆盖率统计流程示意图;
图7为本申请一实施例所提供的基于版本分支的覆盖率统计装置的结构示意图;
图8为本申请一实施例所提供的基于版本分支的覆盖率统计装置的应用逻辑流程示意图;
图9为本申请一实施例所提供的电子设备的结构示意图。
具体实施方式
以下将结合附图及实施例来详细说明本申请的实施方式,借此对本申请如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本申请中的各个实施例及各实施例中的各个特征可以相互结合,所形成的技术方案均在本申请的保护范围之内。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
请参考图1所示,本申请所提供的一种基于版本分支的覆盖率统计方法,所述方法包含:
S101根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;
S102根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;
S103根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;
S104根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
在实际工作中,代码覆盖率统计可借助SonarQube平台来实现,对于Java程序单元测试覆盖率统计是通过Jacoco工具来进行,通过推送生成的结果文件给SonarQube解析,覆盖率计算交给SonarQube来完成。代码覆盖率分全量代码覆盖率和变更代码覆盖率,变更代码=修改代码+新增代码。变更代码包括新增和修改两种情形,SonarQube项目都称之为NewCode(变更代码):1、当期Git版本库中新增的java程序,其内全部代码行都是新增代码,属于Sonar项目变更代码;2、当期Git版本库中存量java程序修改了相关行,则这些代码行属于变更代码,也属于SonarQube项目变更代码。SonarQube项目变更代码符合对变更程序(新增程序+修改程序)变更代码(新增代码+修改代码)的定义。覆盖率=已覆盖率行/未覆盖率的行,如一个程序全量100行(除去不能覆盖率的如空行、大括号、注释等),覆盖了40行,全量的覆盖率为40%。要求出变更行的覆盖率,需要对已覆盖的行和要覆盖的行标识出是否为变更行,本方案工具会把100行中每一行判断是否为变更行,如100行中20行是新增或修改行,新增需要覆盖率的行数为20,如果变更行中20行中有15行已被覆盖,则变更行覆盖率为15/20=75%。全量行覆盖率=全量被覆盖的行/全量需覆盖的行=40/100=40%;变更行覆盖率=变量行中被覆盖的行/变量行需覆盖的行=15/20=75%。
在本申请一实施例中,根据预设周期版本分支模型通过项目的投产时间批次创建版本分支包含:根据git代码管理工具通过预设周期的版本分支模型利用项目的投产批次构建一个或多个版本分支。具体可参考图2所示,在实际工作中,可基于git代码管理工具,采用月度版本分支模型,每个月度版本根据项目的投产时间批次创建一个或多个分支,每个版本的分支基于上一版本的分支上进行创建。各分支相对独立,用于完成对应版本的项目开发、补丁修改、版本发布。月度版本的补丁可通过相应的分支合并同步到下一月度版本。
请参考图3所示,在本申请一实施例中,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单包含:
S301根据程序记录提交信息对应的版本信息将所述程序记录提交信息区分为当前版本修改程序或上周期版本并行开发的同步归并程序;
S302根据区分结果生成对应的标识信息,将所述标识信息与所述程序记录提交信息绑定后,按版本分支登记至变更程序清单。
具体的,程序记录提交信息在git版本库提交后记录文件,路径,版本,记录版本信息,按版本分支,记录到程序提交表当中,并且区分是本期版本修改的程序还是上一月度版本并行开发同步归并过来的程序。为了方便后续步骤查询版本的变更程序清单,把查询变更程序清单的逻辑封装成API接口,接口说明如下:
接口输入:appgroup权限组、repo版本库、codeBrach分支、exePath执行路径,language语言类型,testscriptFlag程序/测试脚本标识;
接口输出:retrurncode成功标志、message详细信息,totalNum程序数量、fileName程序清单;
其中testscriptFlag标识接口返回程序代码格式还是测试脚本格式,程序和脚本通过命名一一对应,如程序名ProgA.java,对应的测试脚本为TestProgA.java,通过接口标识字段,区分返回普通程序清单还是测试脚本清单,测试脚本清单用于执行测试脚本。如当前分支排除其它分支归并过来的程序,实际开发人员提交的变更程序为ProgA.java、ProgB.java、ProgC.java三个程序。当testscriptFlag为true查询接口返回TestProgA.java、ProgB.java、ProgC.java.,返回的清单在每个变更程序中加上前缀Test,用于单元测试。当testscriptFlag为false时,查询接口返回ProgA、ProgB.java、ProgC.java,用于代码扫描。通过变更程序清单,在后面执行单元测试和代码扫描的过程踢出版本分支归并的程序,只统计实际本版本提交的程序,提高了增量指标的执行效率。
在本申请一实施例中,上述步骤S102中的流水线覆盖率统计任务分开发人员本地跑和全量统一在执行集成流水线批量跑,在本申请中主要是基于持续集成流水线环境中执行测试案例并收集覆盖率信息,主要统计指标为变更行覆盖率和全量行覆盖率。流水线触发统计覆盖率以一个版本库为一个扫描单元,对应后面SonarQube平台的一个SonarQube项目。跑全量测试脚本,通过测试脚本调起程序并记录覆盖率数据,生成全量的覆盖率,通过变更识别每一个变更行,变更行和被覆盖行做交集为变更覆盖行。
请参考图4所示,在本申请一实施例中,根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据包含:
S401通过所述初始时间信息将版本库的状态切换到未修改代码的原始状态;
S402对切换后的版本库进行代码扫描获得基准版本数据。
再请参考图4所示,进一步的,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:
S403将所述版本库状态切换回当前时间对应的最新状态;
S404根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据。
具体的,在实际工作中,基于流水线执行生成覆盖率结果的流程可如下:
1、根据项目的版本库和分支下载git版本库,把版本库下载到流水线的执行机上。
2、通过git命令根据分支获取最早提交的标签(分支创建时打的标签)。
3、根据获取的标签获取实际的时间。
4、工具自动把版本库的状态切换到分支创建的时间,此时的状态为未修改代码的原始状态A0。
5、因为分支创建时状态A0没有做过扫描,需要工具自动补充一次代码扫描,作为后续扫描结果的基础版本状态,把扫描结果推送sonarqube服务器,后续的每一次扫描都和基础基线的扫描结果对比识别出变更程序。此次模拟扫描的主要参数包含sonarqube任务名SonarQube_ZH_KF1_APP_202103_group_repo、指定扫描目录、sonarqube服务器的地址、sonarqube用于身份验证的用户令牌、和扫描时间。其中扫描时间默认为作业执行扫描的当前日期,这里可以设定为分支创建的时间。
6、工具自动把git版本库的状态从A0原始状态切回到最新的当前状态,对当前的项目进行单元测试生成测试覆盖率结果和代码扫描把数据推送到sonarqube服务器。变更代码扫描时使用变更程序清单,通过清单过滤只执行清单中的程序,进行单元测试,此时需要使用到前面2.1.2节中的变更程序清单查询接口,脚本清单用于单元测试,返回变更程序清单用于代码扫描。需要在maven构建工具Pom.xml配置文件,指定项目编译及单元测试的参数。在执行完测试案例后,生成的测试覆盖率结果jacoco.xml文件将作为SonarQube的输入参数推送到SonarQube进行解析,同时在做变更扫描。代码扫描命令步骤除了在扫描清单中增加接口返回的变更清单限制扫描的范围,其它参数前面的基础基线扫描一样。
7、根据当前代码和状态和基础基线A0对比,识别出变更行。
8、根据变更行对覆盖率相关的行信息处理,计算变更行覆盖率。
以上的过程工具自动补充一次基础版本的扫描,防止通过流水线创建前提交的程序无法正常识别成变更程序,并且通过变更程序清单限制,减少执行流水线的执行时间,提高获取变更程序覆盖率指标的效果,变更程序流水线将在每一次提交代码时触发执行,能及时发现覆盖情况。为了与旧的流水线区分,在任务名中加-Inc标识,对应的流水线Pipeline-Inc_ZH_KF1_APP_202103_group_repo和sonarQube项目SonarQube-Inc_ZH_KF1_APP_202103_group_repo。由于从全部程序一起跑完再识别增量,修改成只使用增量清单执行,减少了执行时间,提高了效果,同时,自动补充基础版本的扫描,解决了创建流水线前的变更程序无法识别的问题。使用增量指标能快速准确的进行反馈。
请参考图5所示,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单还包含:
S501根据程序记录提交信息获取程序的业务类别,根据所述业务类别中不带业务逻辑的程序信息生成覆盖率白名单;
S502将所述覆盖率白名单补入所述变更程序清单。
进一步,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:根据所述覆盖率白名单过滤掉最新状态下的版本库中不带业务逻辑的程序后,通过单元测试和代码扫描获得测试覆盖率结果和当前版本数据。具体的,在实际工作中,本申请可通过维护一个覆盖率白名单清单,其后调用白名单接口判断程序是否对于覆盖率数据是白名单,踢除白名单程序相关的覆盖率数据,白名单接口返回的程序包含手动加入和扫描存量程序自动加入两种:1、人工登记并审核的程序,如第三方程序,自动生成的代码,临时程序等原因;2、扫描判断为无业务意义的代码,如只包含接口定义或抽象函数的抽象类、只对属性进行读取的实体类,测试脚本类,用于配置的类等,扫描出没有需要覆盖的分支的程序。
请参考图6所示,在本申请一实施例中,根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息还包含:
S601统计所述流水线覆盖率统计任务的处理耗时,将所述处理耗时与预设时间阈值比较;
S602当所述处理耗时高于预设时间阈值时,构建增量流水线统计任务和全量流水线统计任务,通过预设周期触发所述全量流水线统计任务进行覆盖率统计,通过提交代码触发所述增量流水线统计任务进行覆盖率统计。
其后,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据可包含:当触发增量流水线统计任务时,根据所述变更程序清单调取对应的测试脚本,根据所述测试脚本对最新状态下的版本库进行单元测试获得剔除同步归并程序后的测试覆盖率结果;根据所述变更程序清单对最新状态下的版本库进行代码扫描获得剔除覆盖率白名单内程序后的当前版本数据。
具体的,在实际工作中,如果需要跑全量测试覆盖率时,则将上述的变更程序清单和变更程序对应的脚本清单在执行单元测试和执行代码扫描的命令中去掉,去掉清单可恢复跑全量的程序,产生全量的覆盖率指标。只扫描变更程序能够快速执行完流水线得到结果,变更程序的流水线在扫描全量程序则可以得到全量的程序覆盖率指标,防止变更程序影响存量程序但是未测试覆盖造成的风险。
为了能更好的统计变更程序和存量程序的覆盖率数据,在执行全量流水线后,通过参数AutoIncPipleLine设置流水线的属性,对跑全量的流水线时间(从流水线开始,执行完代码下载、单元测试、代码扫描等全部步骤的总时间)进行判断,如果达到某一时间阈值AutoIncTime时,则自动触发生成一条对应变更程序的流水线,无须配置两次流水线。变更跑程序IncBuildPeriodically和全量程序BuildPeriodically设置不同的频率,如果没配置执行频率,则全量流水线默认每天执行一次,变更程序只在代码提交触发,不会定期扫行。其中,变更扫描流水线(提交程序触发):通过累积的变更程序清单扫描;全量扫描流水线(每天执行一次):扫描全部程序。
请参考图7所示,本申请还提供一种基于版本分支的覆盖率统计装置,所述装置包含构建模块、基线生成模块、测试模块和统计模块;所述构建模块用于根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;所述基线生成模块用于根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;所述测试模块用于根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;所述统计模块用于根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
具体的,请结合前述实施例参考图8所示,本申请所提供的基于版本分支的覆盖率统计装置通过判断全量流水线的执行时自动确定是否需要另外再创建一条增量的流水线用于快速执行增量程序展示增量指标。两条流水线可以分开不同的频率执行,满足了增量指标的及时性和全量指标的完整性需求。在实际工作中,在测试覆盖率结果解决入库时,需要对结果根据实际情况进行处理,Sonarqube服务器获取结果后,对Sonarqube进行二次开发;以文件为维度,通过文件度量表记录覆盖率指标相关的参数,每一行记录一个文件一个指标对应的指标值,为了方便区分和计算全量指标和变更指标,区分记录全量指标value字段和变更指标variation字段。对指标结果的处理流程可如下所示:
1、根据指标ID按文件统计覆盖率数据,主要用到的指标数据以下公式的六个指标数据。全量行覆盖率=全量被覆盖的行/全量需覆盖的行;变更行覆盖率=变量行中被覆盖的行/变量行需覆盖的行。
2、基于覆盖率白名单清单,调用白名单接口判断程序是否对于覆盖率数据是白名单,踢除白名单程序相关的覆盖率数据。
3、遍历所有目录,对项目的所有文件进行重新汇总统计。
4、对整个项目的数据重新进行汇总。
5、由于SonarQube项目已按版本及部门等信息进行命名如:SonarQube_ZH_KF1_APP_202103_group_repo,按项目对版本、部门等信息进行汇总统计。
以此,通过对一些无业务逻辑意义的程序的自动识别以及人工识别无覆盖的程序,在统计覆盖率结果的时候自动进行过滤,减少这类程序对覆盖率指标的干扰,提高覆盖率结果的准确性。
本申请的有益技术效果在于:在执行单元测试和代码扫描的过程踢出版本分支归并的程序,只统计实际本版本提交的程序,提高了增量指标的执行效率。通过自动补充一次基础基线单元测试扫描,能够识别创建流水线前提交的变更程序,解决了创建流水线前的变更程序无法识别的问题。使用增量指标能快速准确的进行反馈。通过判断全量流水线时间长是否超过预设的参数,动态确定变更程序流水线是否启动。两条流水线可以分开不同的频率执行,满足了增量指标的及时性和全量指标的完整性需求。对不带业务逻辑的程序进行过滤,只统计有业务逻辑意义的程序,提高覆盖率结果的准确性,让用户只需关注有业务逻辑的程序覆盖情况。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
本申请还提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现上述方法的步骤。
本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
如图9所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理单元130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图9中所示的所有部件;此外,电子设备600还可以包括图9中没有示出的部件,可以参考现有技术。
如图9所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种基于版本分支的覆盖率统计方法,其特征在于,所述方法包含:
根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;
根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;
根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;
根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
2.根据权利要求1所述的基于版本分支的覆盖率统计方法,其特征在于,根据预设周期版本分支模型通过项目的投产时间批次创建版本分支包含:根据git代码管理工具通过预设周期的版本分支模型利用项目的投产批次构建一个或多个版本分支。
3.根据权利要求1所述的基于版本分支的覆盖率统计方法,其特征在于,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单包含:
根据程序记录提交信息对应的版本信息将所述程序记录提交信息区分为当前版本修改程序或上周期版本并行开发的同步归并程序;
根据区分结果生成对应的标识信息,将所述标识信息与所述程序记录提交信息绑定后,按版本分支登记至变更程序清单。
4.根据权利要求3所述的基于版本分支的覆盖率统计方法,其特征在于,根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据包含:
通过所述初始时间信息将版本库的状态切换到未修改代码的原始状态;
对切换后的版本库进行代码扫描获得基准版本数据。
5.根据权利要求4所述的基于版本分支的覆盖率统计方法,其特征在于,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:
将所述版本库状态切换回当前时间对应的最新状态;
根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据。
6.根据权利要求5所述的基于版本分支的覆盖率统计方法,其特征在于,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单还包含:
根据程序记录提交信息获取程序的业务类别,根据所述业务类别中不带业务逻辑的程序信息生成覆盖率白名单;
将所述覆盖率白名单补入所述变更程序清单。
7.根据权利要求6所述的基于版本分支的覆盖率统计方法,其特征在于,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:
根据所述覆盖率白名单过滤掉最新状态下的版本库中不带业务逻辑的程序后,通过单元测试和代码扫描获得测试覆盖率结果和当前版本数据。
8.根据权利要求6所述的基于版本分支的覆盖率统计方法,其特征在于,根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息还包含:
统计所述流水线覆盖率统计任务的处理耗时,将所述处理耗时与预设时间阈值比较;
当所述处理耗时高于预设时间阈值时,构建增量流水线统计任务和全量流水线统计任务,通过预设周期触发所述全量流水线统计任务进行覆盖率统计,通过提交代码触发所述增量流水线统计任务进行覆盖率统计。
9.根据权利要求8所述的基于版本分支的覆盖率统计方法,其特征在于,根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据包含:
当触发增量流水线统计任务时,根据所述变更程序清单调取对应的测试脚本,根据所述测试脚本对最新状态下的版本库进行单元测试获得剔除同步归并程序后的测试覆盖率结果;
根据所述变更程序清单对最新状态下的版本库进行代码扫描获得剔除覆盖率白名单内程序后的当前版本数据。
10.一种基于版本分支的覆盖率统计装置,其特征在于,所述装置包含构建模块、基线生成模块、测试模块和统计模块;
所述构建模块用于根据预设周期版本分支模型通过项目的投产时间批次创建版本分支,根据程序记录提交信息对应的版本信息将所述程序记录提交信息按所述版本分支登记至变更程序清单;
所述基线生成模块用于根据流水线覆盖率统计任务获得待统计覆盖率项目的版本信息,根据所述版本信息调取对应的版本库,并根据版本信息对应的版本分支获得版本库内对应分支构建时的初始时间信息;
所述测试模块用于根据所述初始时间信息利用代码扫描获取版本库在原始状态下的基准版本数据,并根据所述变更程序清单对最新状态下的版本库进行单元测试和代码扫描获得测试覆盖率结果和当前版本数据;
所述统计模块用于根据当前版本数据和基准版本数据的比较结果获得变更行信息,根据变更行信息对所述测试覆盖率结果进行行信息处理计算获得变更行覆盖率,根据所述变更行覆盖率和所述测试覆盖率结果获得覆盖率统计结果。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9任一所述方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有由计算机执行权利要求1至9任一所述方法的计算机程序。
13.一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1至9任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210359890.XA CN114637688A (zh) | 2022-04-07 | 2022-04-07 | 基于版本分支的覆盖率统计方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210359890.XA CN114637688A (zh) | 2022-04-07 | 2022-04-07 | 基于版本分支的覆盖率统计方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114637688A true CN114637688A (zh) | 2022-06-17 |
Family
ID=81950992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210359890.XA Pending CN114637688A (zh) | 2022-04-07 | 2022-04-07 | 基于版本分支的覆盖率统计方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114637688A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573564A (zh) * | 2024-01-15 | 2024-02-20 | 智业软件股份有限公司 | 一种基于gitlab代码提交日志自动识别差异的方法 |
-
2022
- 2022-04-07 CN CN202210359890.XA patent/CN114637688A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573564A (zh) * | 2024-01-15 | 2024-02-20 | 智业软件股份有限公司 | 一种基于gitlab代码提交日志自动识别差异的方法 |
CN117573564B (zh) * | 2024-01-15 | 2024-03-26 | 智业软件股份有限公司 | 一种基于gitlab代码提交日志自动识别差异的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107515826B (zh) | 测试用例精准推荐方法、装置、系统、设备及存储介质 | |
CN110309051B (zh) | 管理测试用例的方法、系统、设备及存储介质 | |
CN108984389B (zh) | 一种应用程序测试方法及终端设备 | |
CN112783793B (zh) | 自动化接口测试系统及方法 | |
CN112256581B (zh) | 高仿真证券业交易类系统的日志回放测试方法及装置 | |
CN111522728A (zh) | 自动化测试用例的生成方法、电子设备及可读存储介质 | |
CN113448854A (zh) | 一种回归测试方法和装置 | |
CN112463634A (zh) | 微服务架构下的软件测试方法及装置 | |
CN114637688A (zh) | 基于版本分支的覆盖率统计方法及装置 | |
CN115422065A (zh) | 基于代码覆盖率的故障定位方法及装置 | |
CN114996127A (zh) | 固态硬盘固件模块智能化测试方法及系统 | |
CN112965912B (zh) | 接口测试用例生成方法、装置和电子设备 | |
CN106557419B (zh) | 程序的测试方法及装置 | |
CN112559348B (zh) | 基于jacoco的测试分析方法、系统、设备以及介质 | |
CN112069073A (zh) | 测试用例的管理方法、终端和存储介质 | |
CN113254326A (zh) | 利用Jenkins发布固态硬盘固件代码的方法和系统 | |
CN110134583B (zh) | 软件测试及数据处理方法及装置 | |
CN112035365B (zh) | 支持多测试环境的版本部署方法及装置 | |
CN115729609A (zh) | 配置库信息规范性检查方法、装置、设备及存储介质 | |
CN114647588A (zh) | 接口测试方法及装置 | |
CN114416546A (zh) | 一种代码覆盖率确定方法及装置 | |
CN113986759A (zh) | 业务处理流程获取方法、业务架构流程验证方法及系统 | |
CN112053132A (zh) | 主机变更方法及装置 | |
CN112988603B (zh) | 大数据测试用例生成方法及装置 | |
CN113051176B (zh) | 自动化测试数据的处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |