【Lua】代码执行覆盖率
一、功能测试如何确保测试的质量?
以黑盒测试来讲,简单概括为以下几个方面来进行保障:
1. 在产品的需求分析阶段,参与需求的评审,发现需求设计中的不合理性以及存在风险的设计等,从源头发现问题,这样可以花费最小的代价获得最高的收益。
2. 在开发设计编码阶段,如果有设计评审环节,需要参与设计讨论,这样就可以尽早的了解技术的实现逻辑,获取更多影响测试质量的因素,完善测试用例。可能在游戏行业很少会进行编码设计环节的评审,但作为测试人员最好可以在技术忙碌之余主动去了解设计实现,知道技术设计的逻辑流程,从而编写具有针对性的测试用例。
3. 在用例设计阶段,需要多方面收集信息和考虑,编写丰富完善的测试用例。例如其中既要包含功能性需求,还要考虑非功能性需求(如负载、响应时间、安全、运行环境等)。
4. 在用例评审阶段,一定要通过用例评审来补充和增强用例,增加测试用例的覆盖率,有时候一个很小的遗漏都会导致整个系统的修改或重构。
5. 在执行测试阶段,一方面需要严格完成每一项测试用例的执行,另一方面还需要具有探索测试意识,通过测试和反思来继续补充用例。如果有足够的时间还应该进行交叉测试和回归测试。
6. 测试完成后,需要进行总结,并跟踪线上问题反馈,继续补充测试用例。
二、如何评估测试过程的测试情况?
很多时候完成以上的测试过程就会发布上线,甚至交叉和回归都没有足够的时间去执行,然后通过线上的补丁对遗漏的问题进行修复。如果可以在发布前了解本次测试过程所覆盖代码执行的比例情况,那么就可以一定程度上反应测试的执行情况和系统的质量情况。
代码执行覆盖率是一种很好评估测试人员在执行测试过程中,所命中技术编码情况的手段,并可以从侧面评估系统的质量情况。我所在的项目前后端都是用Lua进行逻辑业务开发,这里分享如何使用Lua的debug模块进行代码执行覆盖率统计的实现。
三、Lua代码执行覆盖统计工具
代码覆盖率可以做到行覆盖率,函数覆盖率和分支覆盖率。通过Lua语言debug库的sethook方法可以设置以行或以函数来监控代码的执行行为。
debug.sethook ([thread,] hook, mask [, count]):
可以通过官方文档获得更好的介绍,这里通过设置回调函数和监控的方式,然后在监控的回调函数里面记录当前执行的文件及执行的行数、以及函数记录。最后在停止hook的时候将上面记录数据输出到文本文件,这样就可以知道本次测试在运行过程中所有代码执行的情况记录。
通过编写一个分析脚本将执行的数据和源代码的数据进行对比,从而就可以计算出行覆盖率,函数覆盖率,以及分支覆盖率。这样每次在测试执行前开启,在测试结束后统计计算,就可以评估本次测试所覆盖的代码量,甚至可以做更深入的分析判断哪些核心的逻辑没有执行到。
四、Lua监控代码执行情况的项目仓库
使用方法:
1. 导入模块
require "CodeCoverage"
2. 执行Hook,并选择统计的类型(这里提供基于行的统计和基于函数的统计)
-- Jeff_CodeCoverage.LINE_COVERAGE_MODE 行覆盖率统计 -- Jeff_CodeCoverage.FUNC_COVERAGE_MODE 函数覆盖率统计 -- StartHook 第二个参数设置为true将实时输出行或函数覆盖的执行流数据 Jeff_CodeCoverage.StartHook(Jeff_CodeCoverage.FUNC_COVERAGE_MODE)
3. 测试完业务功能后,调用停止Hook,输出本次执行的数据
Jeff_CodeCoverage.StopHook()
4. 通过上面输出的数据,与源码进行对比计算出覆盖率。(这里需要开发一个统计源代码行数和函数的工具)。
欢迎微信搜索"游戏测试开发"关注一起沟通交流。