(转)模型驱动的嵌入式系统测试脚本生成方法研究与实现

模型驱动的嵌入式系统测试脚本生成方法研究与实现

黄松1, 陈明宇1, 白云祥2

1.陆军工程大学全军军事软件训练测评中心,江苏 南京 2100012.凯云联创科技有限公司,北京,100000

摘要自动化测试通过运行事先准备好的测试脚本进行机器执行,提升了软件测试效率。然而,测试脚本存在着编写专业性强、调试工作量大、维护成本高、难以复用等困难,成为自动化测试技术的难以广泛使用的主要技术瓶颈。本文以嵌入式系统为测试对象,提出了模型驱动的测试脚本生成方法。首先,使用建模工具BPMN2.0对被测系统业务流程进行可视化建模,获得模型化的测试需求;然后,采用路径深度覆盖算法生成测试路径,根据路径上的约束条件生成测试输入参数;最后,通过自定义的测试动作原语将测试路径和输入参数转化为可在嵌入式系统测试平台Etest上自动执行的测试脚本。实现的原型系统支持嵌入式系统的配置项级和系统级的全过程自动化测试,提高了测试工具的易用性和测试模型及脚本的可理解性、可复用性和可维护性。

关键词:测试脚本生成;业务流程建模;嵌入式系统测试;模型驱动的测试

中图分类号:TPxxx;Vxxx;Nxxx   文献标识码:A    文章编号:1000-8829 (出版年) 期数-XXXX-XX

Doi:10.19708/j.ckjs.年.月.000

Research and Implementation of Test Script Generation Method Based on Business Process Modeling for Embedded System

 HUANG Song1, CHEN Ming-yu1, BAI Yun-xiang2

(1 Military Software Training Evaluation Center of Army Engineering University , Nanjing, 210001, China;

2 Kaiyun Lianchuang Technology Co., Ltd, Beijing, 100000, China)                                       

AbstractAutomated testing of embedded software is generally driven by test scripts. However, test scripts are often difficult to design, expensive to learn, and difficult to reuse. This paper designs and implements a model-based embedded software test script generation system. The system is based on BPMN2.0, combined with the characteristics of embedded software, and provides a visual test business modeling method. It uses the algorithm based on path depth coverage to generate test paths, generates test input parameters through the constraints on the path. Finally, it uses test action primitives to convert test paths and input parameters into test scripts that can be automatically executed on an embedded software testing platform: Etest. The system can assist testers in the design of test cases and automatically generate corresponding test scripts, which plays a significant role in improving test efficiency and reducing the cost of learning embedded testing.

Key words:test case generation; business process modeling; embedded software testing; model-based testing.

[]随着计算科学、控制科学、人工智能等信息技术的迅猛发展,嵌入式软件在武器系统、航空航天、工业控制、医疗电子、汽车电子、智能家电以及穿戴设备等领域已经无处不在,为人们的工作、生活、学习带来了极大的便利。与之同时,由于嵌入式软件处于整个系统的核心控制地位,其失效带来的损失往往是巨大的,在一些安全关键攸关领域的软件失效甚至危及生命和国家安全,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这就要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。

嵌入式软件测试相对于主机环境下的软件测试有其特有的特点,最大的不同在于硬件/软件集成测试阶段是嵌入式软件所特有的,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互[sh1] 。

然而,现有的嵌入式测试工具,如ADS2[1]和ETest[6]等,大多以编写脚本的方式来执行人工设计的测试用例。因此测试人员需要学习复杂的脚本编写,编写完的测试脚本又难以修改和复用,使得测试者的大量精力被脚本的编写和调试所占据,不能专注于测试业务本身。研究嵌入式软件测试脚本的自动化生成,对于提高嵌入式测试的自动化程度具有十分重要的意义。

目前国内外针对测试用例和脚本自动生成的研究主要集中在基于模型的测试[7]上,例如杨波等人[3]以UML模型为基础,定义了一种用于描述测试需求的建模语言,并提出模型生成测试用例的方法。但是其方法没有考虑到嵌入式软件的特点,对嵌入式测试需求难以准确描述,无法应用于实际测试过程。Yan等人[4]提出了层次化建模的思想,并利用深度覆盖算法生成测试用例,但是其测试用例由自然语言描述,无法在嵌入式系统上自动化执行。王博等人[8]以接口自动机模型为基础,使用符号执行的方法来生成嵌入式软件的测试用例与测试场景,但是该方法针对的是嵌入式构件的测试,难以应用到系统级的嵌入式软件测试。

本文设计并实现了一种基于模型的嵌入式软件测试脚本生成系统,该系统基于BPMN2.0业务流程建模标准设计了针对嵌入式软件测试的建模方法。BPMN(Business Process Model and Notation)2.0业务流程建模符号[5]是由OMG推出的一套业务流程建模规范,它提供了一组易于理解的建模符号,来进行业务流程的建模和流程的实现,弥补了从业务流程设计到流程开发的间隙。BPMN2.0是国际通用的业务流程建模标准,它的语义丰富扩展能力强,可以在其原本的基础上扩充多种图元素。同时它还是一套开源的建模标准,易于修改和实现。

在该建模方法的基础上,本系统采用路径深度覆盖算法和输入参数绑定路径的方法生成测试用例,通过提取测试动作原语的方法将测试用例自动转化为嵌入式软件测试平台Etest可执行的测试脚本,提高了嵌入式软件测试的自动化程度。

1 系统总体设计

1.1 系统架构

嵌入式软件测试脚本生成系统的总体结构如图1所示。整个系统分为三层:用户层、业务逻辑层和数据层,系统使用Node.js开发,实现了友好的可视化交互界面。

其中,用户层主要包括用于和用户进行交互的测试建模界面,分为接口建模、协议建模和业务流程建模三个部分。用户通过操作交互式的图形化界面来建立起这三种模型,从而共同构成最终的测试模型。

业务逻辑层主要包括执行路径生成模块、输入参数生成和测试脚本生成模块三个部分。执行路径生成模块能够扫描模型自动生成执行路径;输入参数生成模块能够根据参数的约束条件生成测试输入参数。生成的测试路径和输入参数共同构成测试用例,由测试脚本生成模块将测试用例转化为可执行测试脚本。

数据层主要包括业务流程模型存储和用例存储两个部分,用于存储测试人员建立好的模型和生成的测试用例。测试模型采用XML格式进行结构化存储,测试用例则存储为更方便生成与分析的JSON文件。

正在上传…重新上传取消

图1  系统整体架构

1.2 系统工作流程

嵌入式软件测试脚本生成系统的工作流程如图2所示。

正在上传…重新上传取消 图2  系统工作过程

测试人员首先需要对待测嵌入式设备和外部组件进行分析,设计接口协议,通过接口建模和协议建模功能构建接口协议模型,再通过测试业务的分析,构建测试业务的业务流程模型。在设置完输入参数的约束条件之后,系统能够使用基于路径深度覆盖的算法生成测试路径,根据参数约束条件自动生成测试路径上的测试数据。最后,测试人员再将代表嵌入式测试关键动作的测试动作原语附加到业务流程模型的节点中,系统就能够根据测试用例和模型,自动化生成可执行的测试脚本。

  1. 系统技术方案
    1. 测试建模

嵌入式软件是依托于设备存在的,想要对嵌入式软件进行测试,就离不开实际的设备和外围组件。因此,本系统通过接口和协议模型描述了待测系统和外部组件之间的连接关系和接口、协议等信息,再结合基于BPMN2.0标准的测试业务流程模型,充分描述嵌入式软件测试的测试业务。

2.1.1 接口与协议建模

本系统支持建立CAN、serial、DI、DO、AD、DA、232、422、485、1394、1553BC、1553DSP等多种类型的接口模型。根据每一种接口的特点可以设定不同的接口参数。在建立好接口模型的基础上,测试人员能够以图形化表格的形式建立协议模型,通过设定协议字段的参数改变字段的名称、比特位数、默认值、字节顺序、编码方式等属性,并且支持协议段分组和动态分支的建立。

2.1.2 业务流程建模

测试业务通过业务流程模型来进行描述。图3是一个业务流程模型的简单示例。

正在上传…重新上传取消

图3  业务流程模型示例

其中,无特殊标志的节点为活动节点,表示待测软件当前的活动或者状态;带有表格标志的节点为动作序列节点,表示测试者进行的测试动作序列,例如发送和接收数据包;带有加号标志的节点为子模型节点,表示一个折叠起来的子流程模型,利用该节点可以进行层次化的建模,提高模型的易理解程度;带有脚本符号的节点为脚本节点,表示一个通过直接编写测试脚本实现的测试动作,该节点的存在使得本系统的测试模型在对测试业务流程进行抽象描述的同时,也保留了直接编写测试脚本的功能,使得系统能够适应一些复杂的测试场景。

    1. 测试用例生成

2.2.1 测试路径生成

本系统采用了基于路径深度覆盖的测试路径搜索方法[5]。该算法首先按照网关判定节点,对整个模型进行层次划分。划分完层次之后,按照指定的路径深度对相邻层级的路径进行组合。最后再生成覆盖所有组合的测试路径。

在生成测试路径时,测试人员可以选择路径组合的深度,深度越深路径组合就会变得越复杂,直至达到对于所有测试路径的全覆盖。通过选择对于路径深度的覆盖,避免了一次性生成所有测试路径时产生的路径爆炸的问题。

2.2.2 输入参数生成

在使用本系统进行测试建模时,测试人员需要在业务流程模型的路径上绑定测试输入参数,并设置参数的范围、精度、等约束条件。系统能够通过等价类划分和边界值测试原则,生成参数的初始取值。再结合参数所绑定的测试路径,对输入参数进行组合求解,从而生成最终的测试用例。

    1. 测试脚本生成

不同的测试工具为自动化执行测试所封装的库不同、甚至编写脚本的语言也不相同,所以测试脚本的生成离不开具体的测试工具,本系统所生成的测试脚本为Python语言,可以在Etest测试工具上执行。

2.3.1 测试动作原语

嵌入式软件测试主要通过模拟外部组件向待测设备发送数据包来进行测试。本文对嵌入式测试过程中的基本测试动作进行了分析,提炼出九种测试动作原语,如表1所示。

测试动作原语

动作原语名称

动作原语介绍

send

在指定接口上发送协议数据

recv

在指定接口上接收协议数据

read

在接口上读取一个值

write

将参数值写入指定接口

delay

延时指定的毫秒数

print

依次打印输出传入的参数

reset

重置指定的接口

assert

执行断言

call

函数调用

测试动作原语是和接口、协议以及设置的输入参数紧密联系的,在设置测试动作原语时,需要设定执行测试动作的接口和对应的协议段数据,并把输入参数绑定到指定的协议字段上。测试人员在完成测试业务的流程建模之后,可以将测试动作原语按照顺序附加到模型中的动作序列节点上,这样一个动作序列节点就成为了一个可独立执行的测试任务。

2.3.2 测试脚本转换算法

在测试人员完成测试动作原语的编辑之后,系统将测试动作原语存储为格式化的JSON数据,从而能够方便地实现从测试动作原语到Python测试脚本的转换,图4是动作原语send的存储结构。对于模型中绑定的测试输入参数,系统将其统一封装在参数列表中,通过列表下标来在脚本进行调用。

正在上传…重新上传取消

图4  send原语的结构化JSON数据

本系统通过动作原语转换算法将测试用例中的测试任务翻译为一段测试脚本,算法如表2所示。其中GetFun()函数的作用是按照设定好的代码模板,通过正则表达式匹配的方法生成测试动作原语所对应的测试脚本。在完成单独测试任务的脚本生成之后,按照测试用例中测试路径的顺序,把每个测试任务的脚本组合起来,就是该测试用例最终的可执行测试脚本。

动作原语转换算法

算法:动作原语转换脚本

输入:prim_array原语列表,paraList参数列表

输出:script_arr该任务对应的测试脚本,primDict原语和行号的对应表

function Primitive2Scripts (prim_array, paraList)

for each prim in prim_array

prim_script GetFun(prim, paraList) //GetFun()是根据模板生成指定动作原语脚本的函数

if prim_script and prim_script.length > 0 then

tmp lineNum //lineNum是代码行号

lineNum lineNum + prim_script.length

add [tmp, lineNum] into primDict

add prim_script into script_arr

else

add [lineNum, lineNum] into primDict

  end if

end for

return script_arr, primDict

end function

3 系统应用实例

空调温度控制板是一个典型的嵌入式设备,它由室温传感器、工作电机组、空调控制板和遥控器组成。其原理如图5所示。空调控制板从室温传感器采集当前的室温信息,根据遥控器所设定的房间温度,向工作电机组发送相应的控制指令。测试人员需要分别对温度设置、室温采集处理和控温自动调节功能进行测试。

正在上传…重新上传取消

图5  空调控制板的工作原理

正在上传…重新上传取消

图6  遥控器数据包传输协议

通过分析空调控制板与外部组件的交联环境,在可执行测试用例生成系统中建立起接口与协议模型。图6为系统中建立的遥控器组件的数据包传送协议。

在分析完待测设备的工作流程之后,分别对三个功能模块进行测试业务建模。本文以控温自动调节模块为例说明系统的过程。其业务流程模型如图7所示。

正在上传…重新上传取消

图7  控温自动调节模块的业务流程模型

该模块中输入参数为当前室温和设置温度。选中对应的路径连接线,进行参数进度和取值范围的设置,随后系统会自动生成参数取值列表,如图8所示。

正在上传…重新上传取消

图8  参数设置

随后,设置测试路径组合的深度为2,系统就可以根据当前模型和参数信息生成测试用例,生成的测试用例如图9所示。

正在上传…重新上传取消

图9  测试用例生成

为了生成可执行的测试脚本,需要向模型中的动作序列节点附加测试动作原语,如图10所示,向图中节点添加模拟遥控器和室温传感器发送数据包的测试动作原语。

正在上传…重新上传取消

图10  附加测试动作原语

完成所有测试动作原语的添加之后,系统能够自动生成Etest工具可执行的测试脚本。控温自动调节模块的测试脚本如图11所示。

4  结束语

本文设计并实现了一种基于模型的嵌入式软件测试脚本生成系统。系统采用了一种可视化的测试建模方法,并使用路径深度覆盖算法和输入参数绑定路径的方法生成测试用例,通过测试动作原语生成可在Etest测试工具上执行的测试脚本。使用该系统能够提高测试效率,降低测试的学习成本,同时把测试人员从繁杂的脚本编写和调试工作中释放出来,让其更加专注于测试业务本身。 该系统中建立的业务流程模型

正在上传…重新上传取消 图11  控温自动调节模块的测试脚本

可以作为测试业务与脚本之间的一种中间表示层,当测试业务发生改变,或者是需要进行回归测试时,只需对测试模型进行修改,就能自动生成新的测试脚本。如果要生成其他测试工具的脚本,可以通过添加对应工具测试脚本的模板来实现对多种测试工具的支持。

由于自动生成的测试路径与输入参数的组合数量较多,容易产生部分冗余的测试用例,因而可考虑进一步研究测试用例的选择或者排序问题,提升系统生成的测试用例的有效性。

参考文献:

  1. TECH S A. GmbH, Avionics Development System 2nd Generation User Reference Manual [EB/OL]. (2004). http://www. techsat. com.
  2. Stanojević M, Peković V, et al. Workflow based test script generation[C]//. Berlin: 2013 IEEE Third International Conference on Consumer Electronics, 2013: 275-278.
  3. 杨波,吴际,徐珞等. 一种软件测试需求建模及测试用例生成方法[J]. 计算机学报,2014,37(03):522-538.
  4. Yan Y, Wu L, Peng Y, et al. A Test Case Design Method Based on Path Depth Coverage[C]//2019 IEEE 19th International Conference on Software Quality, Reliability and Security Companion (QRS-C). IEEE, 2019: 89-96.
  5. Allweyer T. BPMN 2.0: introduction to the standard for business process modeling[M].Demand: BoD–Books, 2016.
  6. 黄松,李佳洁. 嵌入式系统测试实训教程 [M]. 北京:旋极科技, 2019.
  7. Jorgensen P C. The craft of Model-Based testing[M]. Auerbach Publications, 2017.
  8. 王博, 白晓颖等. 基于接口自动机与符号执行的嵌入式软件测试用例生成[J]. 计算机学报, 2015, 38(11): 2125-2144.

               □

 

收稿日期:2019(年)-xx(月)-xx(日)

资助项目:国家重点研发计划重点专项项目(2018YFB1403400)

作者简介:黄松(1970—),男,汉族,教授,博士生导师,主要研究方向为软件测试和质量评估;陈明宇(1997—),男,汉族,硕士研究生,主要研究方向为基于模型的测试。


 [sh1]这个地方到下一段没有衔接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值