一种增量SQL执行覆盖率的检测方法及计算机可读存储介质与流程
本发明涉及软件测试与持续集成,具体涉及一种增量sql执行覆盖率的检测方法及计算机可读存储介质。
背景技术:
1、在现代企业级应用开发中,特别是微服务架构下,业务逻辑日益复杂,结构化查询语言(sql)作为应用与数据库交互的核心,其正确性直接关系到系统功能的稳定与数据的一致性。随着敏捷开发和devops实践的普及,代码迭代速度加快,每次功能开发、性能优化或缺陷修复都可能涉及大量sql语句的新增和修改。
2、在频繁的迭代过程中,如何确保这些新增或修改的sql语句(即增量sql)得到充分的测试,成为保障软件质量的关键环节。在基于mybatis等对象关系映射(orm)框架的工程中,sql语句通常以xml映射文件或注解的形式嵌入代码中。当开发者在特性分支上完成开发后,需要验证这些增量sql是否已被测试用例有效覆盖,才能放心地将其合并至主干分支并最终上线。
3、然而,现有的sql测试覆盖验证方案普遍存在若干缺陷。首先,高度依赖人工排查,开发人员需手动对比代码版本间的差异或依赖个人记忆来发现sql变更,在大型项目中效率低下且极易遗漏,可能导致测试覆盖不全,埋下线上故障隐患。其次,版本控制工具提供的代码行级差异信息(diff)并非结构化的sql变更清单,混杂了大量非sql代码,难以直接用于自动化流程。此外,现有工具通常缺乏与分支开发模型的自动化集成能力,无法针对特定源分支与目标分支进行持续的、自动化的sql差异扫描。更重要的是,简单的文本比较难以理解动态sql的真实语义,例如在条件标签内增加一个查询条件,现有技术仅能展示xml片段的文本变化,而无法提取出变更后完整的sql语句模板,给后续的精准测试和覆盖率统计带来了巨大挑战。
技术实现思路
1、为了解决上述技术问题,本发明提供了一种增量sql执行覆盖率的检测方法及计算机可读存储介质,旨在自动化、精准地衡量代码迭代中增量sql的测试覆盖情况,为软件交付流程提供可靠的质量决策依据。
2、本发明提供了一种增量sql执行覆盖率的检测方法,包括:响应与代码版本库中第一代码版本和第二代码版本相关联的变更事件,获取所述第一代码版本与所述第二代码版本之间的代码差异,以及与所述代码差异相关联的上下文标识;对所述获取的代码差异进行静态解析,以提取作为新增或修改sql语句的增量sql语句;按照预设的标准化规则对提取的每一条增量sql语句进行标准化处理,以生成用于表征该sql语句模板结构的、与运行时参数取值无关的第一sql指纹,由此得到第一sql指纹集合;其中,所述预设的标准化规则至少包括参数占位符统一、注释删除、空白字符归一化以及sql关键字大小写统一;基于与所述代码差异相关联的上下文标识,通过覆盖式写入操作,将所述第一sql指纹集合存储于存储系统中,其中,所述覆盖式写入操作使用当前的第一sql指纹集合替换与所述上下文标识关联的、先前存储的任何指纹集合;在测试执行期间,通过运行时探针拦截在待测应用中实际执行的sql语句;采用所述预设的标准化规则,对拦截的每一条实际执行的sql语句进行标准化处理,以生成与所述第一sql指纹格式兼容的第二sql指纹,并将所述第二sql指纹与所述上下文标识、采集时间戳关联记录;基于与所述代码差异相关联的所述上下文标识,对在一预设时间窗口内采集的第二sql指纹进行去重,得到第二sql指纹集合,并将所述第二sql指纹集合与存储的所述第一sql指纹集合进行交集计算,以计算增量sql执行覆盖率;基于所述增量sql执行覆盖率与预设阈值的比较结果,自动地控制与所述代码差异相关的软件交付流程的执行状态。
3、进一步地,所述上下文标识包括应用标识和分支标识,所述第一代码版本为源分支,所述第二代码版本为目标分支。通过将覆盖率统计维度下钻至由应用和分支共同定义的上下文,能够使覆盖率数据直接、轻量地反映本次代码变更的测试质量。
4、可选地,所述变更事件为代码托管平台接收到代码推送时触发的webhook事件。该方式能够实现增量sql扫描在代码提交后立即自动执行,全程无需人工介入,保障了覆盖率数据的实时性。
5、在一种实施方式中,所述方法还包括:在所述增量sql执行覆盖率低于所述预设阈值时,生成并返回未被所述第二sql指纹集合覆盖的第一sql指纹清单。这种精准的反馈闭环能够帮助开发和测试人员快速定位测试盲区,显著提升协同效率。
6、进一步地,所述静态解析包括:
7、根据所述代码差异确定发生变更的目标文件和变更行;
8、当所述目标文件为mybatisxml文件时,定位所述变更行所属的
9、当所述目标文件为jpa注解文件时,提取与所述变更行对应的查询注解中的sql文本;
10、当所述目标文件为原生sql脚本文件时,根据sql操作关键字和语句结束符确定完整sql文本。该方式能够适应不同技术栈和sql定义形式,精准地从代码差异中提取增量sql。
11、可选地,所述运行时探针为mybatis插件或jdbc驱动拦截器。通过标准扩展点实现sql采集,无需修改业务代码,具有低侵入性和良好的框架兼容性。
12、进一步地,所述运行时探针通过异步消息队列将生成的所述第二sql指纹上报。异步上报可以避免对应用主线程性能产生影响,保证了采集组件的轻量化。
13、在一种实施方式中,所述标准化处理包括:将sql语句中的变量参数替换为统一的占位符,去除sql语句中的注释,合并多余的空白字符,将sql关键字转换为统一的大小写格式,并对标准化后的sql模板进行哈希计算以生成sql指纹。该处理确保了不同参数值的同一sql模板能够生成唯一的指纹,是实现精准匹配的基础。
14、进一步地,所述覆盖式写入操作具体为:在同一事务中,先删除所述存储系统中与所述上下文标识关联的所有既有第一sql指纹记录,再写入当前生成的第一sql指纹集合。该策略确保存储系统中仅保留每个分支最新的增量sql清单,存储的数据量与并发源分支数量成正比,而非与提交次数成正比,从而显著降低了存储开销和后续计算的复杂度。
15、本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一项所述的方法。
16、与现有技术相比,本发明提供的技术方案具有以下有益效果:
17、1.指标精准,真实反映迭代质量:将覆盖率统计维度聚焦于由上下文标识定义的增量sql,使得覆盖率数据能直接、轻量地反映本次代码变更的测试质量,精准定位测试盲区。
18、2.降低存储与计算成本:采用基于上下文标识的覆盖式写入操作,存储的增量sql记录仅与活跃分支数量相关,而非与代码提交次数累积相关,显著降低了数据库存储开销和覆盖率计算的复杂度。
19、3.实现自动化、实时化的ci门禁:通过与变更事件和软件交付流程集成,将增量sql覆盖率作为上线的硬性门禁,实现了质量控制的自动化和前移,有效防止未经充分测试的sql变更流入生产环境。
20、4.提升研发与测试协同效率:当门禁拒绝时,系统能明确返回未覆盖的增量sql清单,为开发和测试人员提供清晰的行动指引,减少了因测试遗漏导致的沟通和修复成本,缩短了迭代周期。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com