【Lua】代码执行覆盖率

简介: 以黑盒测试来讲,简单概括为以下几个方面来进行保障: 1. 在产品的需求分析阶段,参与需求的评审,发现需求设计中的不合理性以及存在风险的设计等,从源头发现问题,这样可以花费最小的代价获得最高的收益。 2. 在开发设计编码阶段,如果有设计评审环节,需要参与设计讨论,这样就可以尽早的了解技术的实现逻辑,获取更多影响测试质量的因素,完善测试用例。可能在游戏行业很少会进行编码设计环节的评审,但作为测试人员最好可以在技术忙碌之余主动去了解设计实现,知道技术设计的逻辑流程,从而编写具有针对性的测试用例。

【Lua】代码执行覆盖率


一、功能测试如何确保测试的质量?


   以黑盒测试来讲,简单概括为以下几个方面来进行保障:


   1. 在产品的需求分析阶段,参与需求的评审,发现需求设计中的不合理性以及存在风险的设计等,从源头发现问题,这样可以花费最小的代价获得最高的收益。


   2. 在开发设计编码阶段,如果有设计评审环节,需要参与设计讨论,这样就可以尽早的了解技术的实现逻辑,获取更多影响测试质量的因素,完善测试用例。可能在游戏行业很少会进行编码设计环节的评审,但作为测试人员最好可以在技术忙碌之余主动去了解设计实现,知道技术设计的逻辑流程,从而编写具有针对性的测试用例。


   3. 在用例设计阶段,需要多方面收集信息和考虑,编写丰富完善的测试用例。例如其中既要包含功能性需求,还要考虑非功能性需求(如负载、响应时间、安全、运行环境等)。


   4. 在用例评审阶段,一定要通过用例评审来补充和增强用例,增加测试用例的覆盖率,有时候一个很小的遗漏都会导致整个系统的修改或重构。


   5. 在执行测试阶段,一方面需要严格完成每一项测试用例的执行,另一方面还需要具有探索测试意识,通过测试和反思来继续补充用例。如果有足够的时间还应该进行交叉测试和回归测试。


   6. 测试完成后,需要进行总结,并跟踪线上问题反馈,继续补充测试用例。


二、如何评估测试过程的测试情况?


   很多时候完成以上的测试过程就会发布上线,甚至交叉和回归都没有足够的时间去执行,然后通过线上的补丁对遗漏的问题进行修复。如果可以在发布前了解本次测试过程所覆盖代码执行的比例情况,那么就可以一定程度上反应测试的执行情况和系统的质量情况。


   代码执行覆盖率是一种很好评估测试人员在执行测试过程中,所命中技术编码情况的手段,并可以从侧面评估系统的质量情况。我所在的项目前后端都是用Lua进行逻辑业务开发,这里分享如何使用Lua的debug模块进行代码执行覆盖率统计的实现。


三、Lua代码执行覆盖统计工具


   代码覆盖率可以做到行覆盖率,函数覆盖率和分支覆盖率。通过Lua语言debug库的sethook方法可以设置以行或以函数来监控代码的执行行为。


debug.sethook ([thread,] hook, mask [, count]):


   可以通过官方文档获得更好的介绍,这里通过设置回调函数和监控的方式,然后在监控的回调函数里面记录当前执行的文件及执行的行数、以及函数记录。最后在停止hook的时候将上面记录数据输出到文本文件,这样就可以知道本次测试在运行过程中所有代码执行的情况记录。


   通过编写一个分析脚本将执行的数据和源代码的数据进行对比,从而就可以计算出行覆盖率,函数覆盖率,以及分支覆盖率。这样每次在测试执行前开启,在测试结束后统计计算,就可以评估本次测试所覆盖的代码量,甚至可以做更深入的分析判断哪些核心的逻辑没有执行到。


四、Lua监控代码执行情况的项目仓库


https://github.com/memolp/LuaCodeCoverage

使用方法:


   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. 通过上面输出的数据,与源码进行对比计算出覆盖率。(这里需要开发一个统计源代码行数和函数的工具)。


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
6月前
|
C++ 索引 Python
Lua中self 、自索引及其面向对象应用代码示例
Lua中self 、自索引及其面向对象应用代码示例
|
5月前
|
监控 数据处理 开发者
利用Lua代码简化局域网管理软件开发
使用Lua脚本语言可以提升局域网管理软件的开发效率和代码可维护性。示例包括:使用LuaSocket扫描局域网设备;通过动态加载和应用配置文件展示配置管理;利用实时监控功能,当网络流量超过阈值时触发警报;以及通过HTTP POST自动提交监控数据到服务器。Lua的简洁语法和强大功能简化了网络管理和自动化任务。
111 3
|
5月前
|
JSON 监控 数据格式
使用Lua代码扩展上网行为管理软件的脚本功能
本文介绍了如何使用Lua脚本增强上网行为管理,包括过滤URL、记录用户访问日志、控制带宽和自动提交监控数据到网站。Lua是一种轻量级语言,适合编写扩展脚本。文中提供多个示例代码,如URL过滤器、用户活动日志记录器和带宽控制器,帮助用户根据需求定制网络管理功能。通过这些示例,用户可以快速掌握Lua在上网行为管理中的应用。
172 4
|
6月前
|
存储 监控 数据管理
Lua代码解析:实现上网行为监管软件的自定义规则引擎
在当今数字化时代,网络安全和数据隐私保护备受关注。为了确保网络安全和合规性,许多组织和机构需要监管和管理其员工或用户的上网行为。为了实现这一目标,开发一款高效的上网行为监管软件至关重要。本文将介绍如何使用Lua语言开发一种自定义规则引擎,以实现上网行为监管软件的自定义规则引擎。
226 0
|
消息中间件 数据采集 Java
Lua集成kafka第三方插件代码介绍|学习笔记
快速学习Lua集成kafka第三方插件代码介绍
Lua集成kafka第三方插件代码介绍|学习笔记
|
安全
【Lua篇】静态代码扫描分析(一)
静态代码分析是一种通过检查代码而不是执行程序来发现源代码中错误的手段。通常可以帮助我们发现常见的编码错误,例如: 语法错误 违反制定的标准编码 未定义的变量 安全性问题 静态代码分析可以通过评估编写的代码来提高代码质量;可以稳定的运行且可以轻松自动化;增加了在源代码中发现漏洞的可能性,从而提高应用安全;由于是针对源码扫描可以在离线的开发环境中完成。但是静态代码分析并不能完全保证编写的代码没有Bug,它也有一些缺点,
977 0
【Lua篇】静态代码扫描分析(一)
【Lua篇】静态代码扫描分析(四)规则检查
通过前面三篇文章已经初步实现了将Lua源代码文件读取解析成语法树,现在就可以通过得到的语法树进行指定规则的代码扫描检查。下图简单列举了一下单个Lua文件内部的语法关系情况(注意并非真正的类图,也没有列举完全部的节点类型)。
515 0
【Lua篇】静态代码扫描分析(四)规则检查
|
自然语言处理 C++
【Lua篇】静态代码扫描分析(三)语法分析
一、语法分析 通过将词法分析获取的Token流按照目标语言的语法进行解析的过程,例如解析函数声明、函数调用、变量声明、各种语句等。 二、Lua语法分析 在写语法分析程序前,先需要了解Lua的语句和语法,然后进行逐个解析。 下面简单列举一下Lua的语句:
458 0
【Lua篇】静态代码扫描分析(三)语法分析
|
自然语言处理
【Lua篇】静态代码扫描分析(二)词法分析
词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。
378 0
【Lua篇】静态代码扫描分析(二)词法分析