掌桥专利:专业的专利平台
掌桥专利
首页

基于轻量级测试框架的智能电能表软件白盒交叉测试方法

文献发布时间:2023-06-19 11:49:09


基于轻量级测试框架的智能电能表软件白盒交叉测试方法

技术领域

本发明涉及嵌入式软件测试领域,特别涉及一种基于轻量级测试框架的智能电能表软件白盒交叉测试方法。

背景技术

作为惠民工程建设智能电网的采集终端设备,智能电能表除了基本的计量功能之外,还具备以双向通信为基础的附加功能,对原始电能数据进行采集分析、计量显示和传输,完成双向多种费率计量、负荷控制用户端、远程供断电、防窃电等系列智能化操作并得到广泛应用。上述功能的实现大多需要质量可靠的软件来支撑,软件代码的复杂性致使电表电量计量数据异常、黑屏故障等安全隐患不断攀升,因此有必要在软件生命周期的早期单元测试阶段对其进行测试。

现有的对于智能电能表的内嵌式软件测试如公开号为CN201710878684.9的中国专利公开的智能电能表软件黑盒测试系统及方法,主要方法步骤为:数据分析服务器将故障注入指令发给故障注入测试设备,将第二故障注入指令发送给负载及波纹检测设备,对第一测试数据和第二测试数据进行分析;故障注入测试设备将干扰及故障模拟信号注入待检测智能电能表,待检测智能电能表产生第一测试数据;负载及波纹检测设备采集并处理待检测智能电能表在带电子负载情况下产生的纹波电压,获得第二测试数据。

但是黑盒测试内嵌式软件存在测试介入晚、代码内部运行结构及测试用例对应执行逻辑无从得知、bug追踪难度大、修复成本高、自动化效率低、周期长等问题。据此,又出现了内嵌式软件的白盒测试方法。

内嵌式软件的白盒测试方法如公开号为CN101576850B的中国专利公开的一种改进的面向宿主的嵌入式软件白盒测试方法,主要方法步骤为:1.第一阶段测试(粗预测),包括程序不变量的提取、基于支持向量机的机器学习与机器预测等,初步揭示隐含错误;2.第二阶段测试(传统白盒测试),将去除了可揭错误属性后的程序进行嵌入式软件白盒覆盖测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、软件度量分析、覆盖率分析;3.第三阶段测试(精预测),将排除覆盖测试出现的问题后的程序再应用第一阶段中的机器预测步骤进行辨识,得到可能隐含更深的程序错误。

由于智能电能表软件开发于宿主机,运行于目标机的环境具有不一致性,上述专利申请提供的仅基于宿主机环境的模拟测试的白盒测试方法不具备充分性。此外,鉴于其内存芯片资源有限,限制了测试代码的占用量,一般仅剩1K~2K的内存空间可供测试代码使用。现有的如Gtest、CUnit等自动化测试框架会造成过大的代码膨胀率或是仅适用于基于宿主机的单元测试,需要开发设计更具针对性的轻量级框架用于交叉测试,这在一定程度上增加了测试难度。

发明内容

为解决现有技术中的基于宿主机的嵌入式软件白盒测试方法测试不具备充分性以及基于目标机测试时硬件资源有限的问题,本发明提供的基于轻量级测试框架的智能电能表软件白盒交叉测试方法消除了白盒测试在目标环境中的瓶颈制约即环境差异对测试结果的影响,增加了测试结果的可靠性。

基于轻量级测试框架的智能电能表软件白盒交叉测试方法,包括如下方法步骤:

S110搭建Host/Target交叉测试环境,在宿主机上进行相关测试设计、编译链接和测试分析,而被测程序运行在目标机中;

S120根据被测智能电能表软件设计适用于该被测软件的轻量级测试框架;

S130将所述轻量级测试框架移植到被测智能电能表软件工程代码中;

S140根据测试需求和覆盖原则设计测试用例;

S150生成可执行文件下载到目标机中执行测试,获取测试结果。

具体的,所述交叉测试即对宿主机环境与目标机环境建立物理/逻辑连接,构成测试交联结合,使智能电能表软件中被测程序的动态信息运行在更接近实际运行的硬件环境目标机上,并通过宿主机进行词法语法分析、编译链接和测试分析等操作。

所述轻量级的测试框架作为一种抽象构件与构件实例相交互的系统可重用设计,本方案设计的轻量级测试框架,通过管理测试用例的输入与测试结果的输出及时充分地发现代码逻辑缺陷和潜在隐患,提高软件质量

优选的,所述轻量级测试框架包括测试初始化模块、测试用例管理模块、测试执行模块、异常定位模块及测试结果处理模块;

所述测试初始化模块用于对全局资源和非全局资源进行初始化;

所述测试用例管理模块由测试套件Testsuite和测试用例Testcase构成最基本的组成单元,对被测函数用例进行统一的组织管理;

所述测试执行模块负责将testcase集加入testsuite,读取入口参数标识、预期结果等相关测试数据执行测试;

所述异常定位模块及测试结果处理模块根据数据类型调用对应的断言ASSERT宏用于期望值与实际值的对比,对测试失败的异常信息定位并记录具体所在的文件路径、函数名和行号;最后将实时记录的所有测试结果信息通过串口打印传回宿主机。

具体的,测试初始化模块定义一系列宏来简化程序结构。通过SetUp/TearDown宏的资源共享创建被测程序相关变量的赋值和串口、时钟、CPU等硬件状态的初始化以及清空测试数据来完成用例资源的释放。

测试用例管理模块中,Testsuite是包含一个或多个Testcase的集合,二者共同实现该模块中用例的统一存储管理和扩展功能。根据测试用例间关联干扰与否定义两类测试函数TCase(tsname,tcname)与TCasef(tsname,tcname)存放测试用例并加以区分,在多个测试场景需配置相同数据而在上条用例未释放的情况下调用后者。

测试执行模块在调用ADD_SUITE()和ADD_CASE()将所测函数接口与Testcase加入Testsuite的前提下,接收指令进入Test_entry(),读取入口参数标识、预期结果等相关测试数据,生成对应的测试代码并执行。

异常定位模块通过定义函数RAISE_EXCEPTION_WITH_MSG()实现测试过程中异常信息的定位处理,监视断言抛出的信息,记录和描述异常代码所在的文件路径、函数名和行号。

测试结果处理模块提供丰富的断言ASSERT宏定义用于期望值与实际值的对比,以决定测试用例的运行结果,若断言失败则中断测试跳出当前函数。为了精简测试框架节省资源,采用串口直接打印结果信息替代日志文件系统。

优选的,所述轻量级测试框架采用printf重定向方法,调用fputc函数进行字符串输出并指向串口以获取测试结果数据。

采用printf重定向方法解决了基于目标机的动态测试在Keil环境下不支持printf打印语句问题。

优选的,所述测试初始化模块能对相关测试变量以及串口、时钟、CPU硬件状态进行初始化。

通过对被测程序相关变量的赋值和串口、时钟、CPU等硬件状态的初始化以及清空测试数据可以完成用例资源的释放。

优选的,Host/Target之间的数据交互利用RS-232串口通讯实现。

构建宿主机/目标机交叉测试环境的基本条件前提是要确立二者的通信方式,通常是由串口通信、借助仿真器或基于IP/TCP协议的以太网等途径建立物理或逻辑连接进行数据信息的传输,捕捉目标机接收测试信息的正确性来验证软件质量;因此,本方案采用RS-232串口通讯实现Host/Target之间的数据交互是合适的。

优选的,依据语句、判定、条件、条件组合、路径、判定/条件和MC/DC覆盖准则结合具体的测试需求,设计测试用例。

语句覆盖:属于最基本的结构性测试方法,要求通过执行测试用例来实现程序中可执行的语句的覆盖,即每条语句都至少执行一次。

语句覆盖率=(被执行的语句数量/所有可执行语句数量)*100%

判定覆盖:也称分支覆盖,要求通过执行测试用例来实现程序中每个判定表达式都获得一次“真”和“假”,即真假值都满足一次;或者每一个分支都至少通过一次覆盖测试,直接由判定结果决定执行哪条语句。

判定覆盖率=(判定结果被执行的次数/判定结果总数量)*100%

条件覆盖:针对多条件判定测试需求引入的条件覆盖,要求通过执行测试用例来实现程序中不仅每条语句都至少执行一次,同时每个判定中的每个逻辑条件的可能性取值至少执行一次,即每个单独的条件都至少取一次真知,一次假值。

条件覆盖率=(条件操作数至少被执行一次的次数/条件操作总数量)*100%

判定/条件覆盖:上述判定覆盖和条件覆盖都不能保证二者的包含关系,各自都存在不足,因此将二者结合形成判定/条件覆盖。通过设计足够多的测试用例,实现程序判定中每个条件的可能取值至少执行一次,且每个判定表达式自身也能取到所有可能的结果。

判定/条件覆盖率=(条件操作数值或判定结果至少被执行一次的次数/判定执行总数与条件操作总数值之和)*100%

条件组合覆盖:基本思想就是使程序每个判定表达式中各个条件的所有可能组合都至少出现一次,便于对各条件的独立影响力进行测试分析。

路径覆盖:即通过执行测试用例,实现程序中每一条可能的路径至少都要被执行一次。

路径覆盖率=(程序路径至少被执行一次的次数/总路径数)*100%

修正条件判定(MC/DC)覆盖:一种修正的条件判定覆盖方法,属于后者的一个精简测试子集,指设计足够的测试用例实现程序中每个入口点和出口点都至少被出现调用一次,每个判定本身及其中每个条件的可能结果至少都转换一次,同时每个判定中的每个条件都必须具有独立影响性。保证其他条件不变,仅改变其中某单一条件就能改变判定结果,可以更充分地测试每个独立的子条件,消除各单独条件的相互影响。一般运用唯一原因法和屏蔽法来设计条件独立影响判定结果的最小测试用例集,用例数量相比于多条件覆盖的指数级增加,其线性增加的特点更加精简高效。

MC/DC覆盖率=(程序中符合MC/DC的判定个数/总的判定个数)*100%

鉴于实际交叉测试中内存空间的限制以及考虑到测试效率问题,原则上需要结合上述方法通过最少的测试用例达到最大的覆盖率。

优选的,所述述步骤S110还包括搭建交叉测试环境之后利用测试入口函数、用例名称及其相关测试变量的定义来进行测试资源的封装预处理。

优选的,所述步骤S150生成可执行文件的对象包括轻量级测试框架、被测程序、API接口函数。

优选的,所述步骤S150还包括获取测试结果后利用VectorCAST检查测试用例的覆盖率。

利用

优选的,所述轻量级测试框架采用标准C编写。

采用标准C编写的轻量级测试框架,结构清晰、可移植性强,能在不同操作系统和环境配置下使用不同的编译器进行测试,支持按需修改使用。

与现有技术相比,本发明的有益效果在于:

(1)交叉测试环境下基于目标机的动态单元测试,消除了白盒测试在目标环境中的瓶颈制约即环境差异对测试结果的影响,增加了测试结果的可靠性。对被测程序代码中的隐藏逻辑缺陷进行跟踪定位,便于bug修复和回归测试阶段的验证。

(2)针对诸如智能电能表等嵌入式软件有限的内存资源和强实时性特征,基于既有的开源测试框架设计思想对其进行裁剪改进,代码膨胀率低、时序和资源开销较小,通用性强,又使得测试过程可管理化,具有一定的可重用性和维护扩展性。

(3)根据语句、判定、条件、条件组合、路径、判定/条件和MC/DC覆盖准则,结合代码测试需求设计合理的测试用例达到了测试充分性。

(4)测试框架采用标准C编写,结构清晰、可移植性强,能在不同操作系统和环境配置下使用不同的编译器进行测试,支持按需修改使用。

(5)交叉测试的实现无需引用其他昂贵的商业化测试工具,测试成本较低。

附图说明

图1为本发明提供的测试过程图;

图2为本发明提供的交叉测试环境图;

图3为本发明所述轻量级测试框架模块构成图;

图4为本发明主要测试过程流程图;

图5为本发明实施例中串口显示测试结果照片;

图6为本发明实施例中覆盖率验证照片;

图7为与本发明所述测试方法对比结果照片。

具体实施方式

下面结合附图和实施例对本发明做进一步详细描述。

如图1所示,本实施例提供的基于轻量级测试框架的智能电能表软件白盒交叉测试方法,包括如下方法步骤:

S110搭建Host/Target交叉测试环境,在宿主机上进行相关测试设计、编译链接和测试分析,而被测程序运行在目标机中;

S120根据被测智能电能表软件设计适用于该被测软件的轻量级测试框架;

S130将所述轻量级测试框架移植到被测智能电能表软件工程代码中;

S140根据测试需求和覆盖原则设计测试用例;

S150生成可执行文件下载到目标机中执行测试,获取测试结果。

具体的,如图2所示,在宿主机200中将设计的轻量级测试框架300移植到被测的智能电能表软件程序工程中,配置相对应的测试编译命令和库文件的工作路径等环境变量;目标机100负责接收宿主机200上编译链接生成的目标文件动态信息,运行生成的测试结果传回宿主机200,在PC端加以收集和显示;上述交叉测试环境中Host/Target连接采用RS-232串口通信方式实现数据交互过程。

如图3所示,轻量级测试框架300包括测试初始化模块310、测试用例管理模块320、测试执行模块330、异常定位模块340及结果处理模块350;其各模块的功能实现将结合图4与具体实施例的测试过程加以说明。

具体的测试过程如图4所示,包括如下步骤:

S210对被测程序相关变量的赋值和串口、时钟、CPU等硬件状态的初始化;

S220利用测试入口函数、用例名称及其相关测试变量的定义来进行测试资源的封装预处理;

S230将宿主机与目标机串口对接配置打开通信;

S240根据被测软件设计适用的轻量级测试框架并将其移植到被测软件工程代码中;

S250设计测试用例创建脚本;

S260对轻量级测试框架、被测程序、API接口函数进行编译链接生成可执行文件;

S270目标机读取接收测试数据;

S271在目标机内执行测试过程;

S272在目标机内得出测试结果;

S280宿主机接收测试结果数据并进行覆盖率检测;

S281覆盖率检测未达到要求,返回步骤S250;

S282覆盖率检测达到要求则进行断言是否有失败用例;

S291不存在失败用例则去初始化,释放测试资源后结束测试;

S292存在失败用例则进行BUG追踪与定位分析后再执行步骤S291。

关于步骤S250,具体的,以智能电能表软件程序的同步总线模块中m_SyncBus_ReadData()函数为例,设计测试用例:

1、测试if(NULL==pucData)为真,直接返回。设计测试用例如下表1:

表1

2、测试if(NULL==pucData)为假,

2-1、若ucMemType匹配case E_CHIP_FLASH,设计测试用例如下表2:

表2

2-2、若ucMemType匹配case E_CHIP_RAM,设计测试用例如下表3:

表3

2-3、若ucMemType匹配case E_CHIP_EEPROM,设计测试用例如下

表4:

表4

2-4、若ucMemType匹配case E_FRAM/case E_EEPROM/case E_EXT_RTC/case E_COG_LCD任一条件,设计测试用例如下表5:

表5

2-5、若ucMemType匹配case E_DATAFLASH,设计测试用例如下表6:

表6

2-6、若ucMemType匹配case E_OTHER_CHIP,设计测试用例如下

表7:

表7

2-7、若ucMemType未匹配任何case情况,设计测试用例如下表8:

表8

图5所示为串口显示的目标板中上述15条用例测试结果,包含每条测试用例的执行情况和所有用例执行的统计汇总结果,由图5可知预期返回值与实际运行均匹配成功。为了获取测试用例的覆盖率情况,借助VectorCAST单元测试工具作进一步验证。

由图6可知,其语句、分支、MCDC覆盖率均达到100%,证明了测试的充分性。

如图7所示,可以看到测试结果包含了一条未通过的用例,用例10在模拟器上是执行fail的;由于缺乏相关硬件资源支持,EEPROM无法进行数据的读取导致测试失败,而实际代码逻辑并不存在错误;两种测试结果差异性也进一步地说明了本发明所述的一种基于轻量级测试框架的智能电能表软件白盒动态交叉测试方法的必要性和有效性。

以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

相关技术
  • 基于轻量级测试框架的智能电能表软件白盒交叉测试方法
  • 一种基于测试框架的软件测试方法
技术分类

06120113066906