技术领域
[0001] 本
发明涉及一种基于源代码打桩的嵌入式软件动态测试方法。
背景技术
[0002] 随着嵌入式软
硬件技术的发展,各种各样
消费电子产品如智能手机、平板等使用该技术以实现各种复杂的功能,嵌入式
软件代码规模越来越庞大,功能日益复杂。为了提高嵌入式软件的
稳定性与可靠性,在软件开发和测试阶段,需要做大量的测试工作,寻找软件潜在的问题。测试工作在嵌入式设备研制过程中将占用大量的时间,为了提高测试工作效率,减少简单重复的人工测试操作,引入嵌入式自动测试工具,借助第三方测试平台或自行开发的配套测试措施对嵌入式软件进行测试。
[0003] 目前通用的嵌入式软件自动化测试工具的工作原理如图1所示。自动化测试工具使用源程序编译环境提供的编译命令对代码进行预处理,对源代码的宏定义和注释等进行处理。在词法语法分析阶段,主要对源代码中的语法关键字进行识别,为插桩做准备。
[0004] 根据用户的测试
用例和
覆盖率类型在源代码的某些地方插入桩点函数。插桩完成后,调用源代码项目所使用的集成开发环境提供的命令行编译指令,对插桩后的源代码文件进行编译,生成可执行的目标代码,下载到目标机或仿真器中运行。
[0005] 插桩后的程序在运行到桩点
位置,通过串口、网口、IO系统发送或记录桩点信息。测试工具所在的计算机收集这些桩点信息,程序执行完成后,对桩点信息进行分析,最终根据用户的文档格式要求生成测试报告。
[0006] 因此,通用的嵌入式软件自动化测试工具存在以下问题:
[0007] 1)纯软件的自动化测试工具,在插桩上和预处理上使待测系统的源代码量增大,在IO、内存、CPU资源比较缺乏的
嵌入式系统中运行,这些额外的代码增加了系统的负担,甚至造成链接失败或运行失败,用户程序运行的环境与实际环境有所差别,不能做某个函数的性能分析,只能做基于模
块或单元覆盖率测试。通过编译器的词法/语法分析产生的桩点信息较多,导致最后生成的嵌入式程序体积增大,系统性能降低,使得被测试软件与实际运行环境存在较大差异;
[0008] 2)对于有用户操作界面的嵌入式软件,如何有效真实的模拟用户行为是通用嵌入式软件自动化测试工具实施的难点。
发明内容
[0009] 为了克服
现有技术的上述缺点,本发明提供了一种基于源代码打桩的嵌入式软件动态测试方法,在原嵌入式软件源代码的
基础上,增加一个测试代理模块,由测试代理分布在原嵌入式软件源代码的底层数据收发
接口的桩函数提供
数据采集与控制机制,并提供与计算机测试
服务器软件串口通信机制,实现计算机测试服务器软件控制嵌入式软件开展自动化测试功能,能够解决上述被测软件与实际运行环境差异大的问题,真实模拟用户行为,实现嵌入式软件的自动化动态测试。
[0010] 本发明解决其技术问题所采用的技术方案是:一种基于源代码打桩的嵌入式软件动态测试方法,在被测嵌入式终端设备的软件源代码中增加一个测试代理模块,所述测试代理模块在外设驱动的数据收发接口函数入口处设置参数采集函数和桩函数,用于
修改硬件平台提供的数据或中断事件或采集应用程序发向硬件平台的数据及控制
信号;所述测试代理模块通过硬件平台及外设驱动提供的串口通信方式实现与计算机测试服务器软件通信,接收测试服务器的用户行为仿真命令,发送测试数据给测试服务器;所述测试服务器根据被测嵌入式终端设备的功能与对外通信协议流程进行测试用例设计与开发,分析协议流程及终端界面显示是否正确,形成测试记录供用户查询。
[0011] 测试代理通过设备已有的串口连接接受计算机测试服务器的测试命令,调用设备外部中断服务程序,修改设备驱动数据读写接口的返回数据,并将应用程序输出的数据长度、内容、类型等信息收集到临时数据缓冲区,设备空闲时通过串口连接发送给计算机。
[0012] 测试方法的具体步骤如下:
[0013] 第一步:收集测试需求
[0014] 根据嵌入式终端设备应用程序对外通信协议和界面显示规定,将硬件驱动数据收发接口、显示输出接口函数
整理出来,建立数据输入与输出的对应关系,计算机测试服务器采用字符串关键字检索
算法对比输入与输出的匹配情况,判断测试是否通过。
[0015] 第二步:制定计算机测试控制协议
[0016] 根据嵌入式终端设备的用户输入界面特点,制定出按键、触控坐标等模拟用户操作行为的命令清单,计算机测试服务器具备通过串口发出这些测试命令协议的能
力。
[0017] 第三步:源代码打桩与测试命令接收编码实现
[0018] 嵌入式终端设备软件提供测试代理,具备通过设备已有串口与计算机测试服务器的通信能力,接收测试控制命令,发送测试采集的数据。另外提供参数采集函数和桩函数,分别用于接口入口参数采集,编码,测试控制命令的响应。
[0019] 在应用程序的硬件驱动数据收发接口、显示输出接口函数的入口处依次调用参数采集函数、桩函数。参数采集函数的参数列表为各接口入口参数的地址、长度、参数是否结束标志,调用的次数根据需要观察的参数数量而定,保存入口参数数据到临时缓冲区。桩函数的参数为接口函数地址。桩函数内部对临时缓冲区的参数数据编码后,添加到串口发送缓冲区,并根据接口函数地址,屏蔽
用户界面输入相关硬件寄存器状态,返回测试控制协议相关的值。参数编码内容包括数据长度、数据特征码串、接口类型,格式为ASCII字符串类型。
[0020] 与现有技术相比,本发明的积极效果是:
[0021] 本发明旨在解决:降低嵌入式终端软件引入自动化测试带来的测试环境与实际应用环境的差异,通过全面模拟用户操作行为,对嵌入式终端软件的性能与可靠性进行测试。通过优化测试代理的打桩机制,在关键的协议数据收发接口设置桩,避免采用通用嵌入式软件自动化测试软件插桩技术带来的代码剧烈膨胀的问题。
[0022] 与使用通用嵌入式软件自动化动态测试方法相比较,本发明对嵌入式设备软件运行正常功能带来的影响小,对嵌入式处理器的资源占用少,有利于开展面向用户使用的自动化测试工作。测试服务器支持多串口通信,控制多个被测嵌入式终端设备自动化执行功能,有利于开展设备所在系统网络的稳定性与可靠性的测试工作。
附图说明
[0023] 本发明将通过例子并参照附图的方式说明,其中:
[0024] 图1为通用嵌入式自动化测试工具工作原理;
[0025] 图2为本发明的自动化测试基本原理图;
[0026] 图3为网络环境应用示例图。
具体实施方式
[0027] 一、原理说明
[0028] 嵌入式终端设备软件运行的环境通常为嵌入式
单片机,其内存、
硬盘资源有限,用户界面功能相对简单,但对设备的稳定与可靠性要求较高。嵌入式终端设备一般具备输入、输出界面,输入方式包括按键、触摸等,输出内容包括显示文本、控制命令,并对外提供网络连接,与外部设备进行通信,遵守相关通信协议,为用户提供业务功能。业务的稳定性与可靠性是某些关键用户的核心需求,对终端设备自身和网络的可靠性提出更高要求。根据终端设备的功能要求,测试服务器控制软件模拟用户各种操作行为,接管被测终端设备的外部
输入信号,激励嵌入式终端设备软件执行响应动作。
[0029] 测试方法的基本原理如图2所示,原嵌入式终端设备包括硬件平台、外设驱动和应用程序,增加测试代理模块实现自动化软件测试。测试代理在外设驱动的数据收发接口函数入口处设置桩点函数,通过桩点函数修改硬件平台提供的数据或中断事件或采集应用程序发向硬件平台的数据及
控制信号。测试代理通过原嵌入式终端设备硬件平台及外设驱动提供的串口通信方式实现与计算机测试服务器软件通信,接收测试服务器的用户行为仿真命令,发送测试数据给测试服务器。
[0030] 测试服务器为运行在计算机windowsXP下的
应用软件,根据被测嵌入式终端设备的功能与对外通信协议流程进行测试用例设计与开发,分析协议流程及终端界面显示是否正确,形成测试记录供用户查询。
[0031] 二、具体实施方法
[0032] 为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及
实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0033] 为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0034] 图3是本发明实施例提供的网络环境应用图。
[0035] 某电话通信网络中,电话终端为嵌入式终端,通过窄带数字
通信接口与通信网络中的交换机进行通信,提供到网络中其他电话终端的电话功能,具有
液晶显示界面和数字
键盘。用户摘机,拨叫对方终端的电话号码,交换机收齐电话号码后,发起到被叫电话终端的呼叫,如果呼叫建立成功,则通知主、被叫振铃。待被叫用户摘机后,主、被叫用户可进行通话。通话结束后,用户挂机,另一端收到交换机给出的挂机
请求后提示用户挂机。
[0036] 第一步:收集测试需求
[0037] 以拨打电话为例,用户操作包括按键、
手柄摘机、手柄挂机,当话机处于正常待机情况下,用户摘机,话机液晶显示“请拨号”;用户通过数字键盘进行拨号时,话机液晶显示输入的号码;交换机通过主叫发出的被叫号码,寻址到被叫话机时,主叫话机液晶显示“呼叫中”,被叫话机液晶显示“来电”,进入振铃状态;当被叫话机用户摘机后,主、被叫话机进入通话状态,液晶显示“接通”;其中一个用户放下手柄挂机,话机进入待机状态,液晶显示“待机”,另一个话机液晶显示“请挂机”,表示用户挂机。此时用户挂机,话机也进入待机状态,液晶显示“待机”。
[0038] 输入与输出的对应关系如下表所示:
[0039]
[0040] 第二步:制定计算机测试控制协议
[0041] 根据电话终端的用户输入方式包括数字按键与手柄摘、挂机,输出方式为液晶显示,制定出测试命令清单如下,测试命令均为字符串。
[0042]
[0043] 第三步:源代码打桩与测试命令接收编码实现
[0044] 在电话终端的程序源代码中增加测试代理功能模块,该模块提供至少5个函数,函数清单如下:
[0045]
[0046]
[0047] 电话终端源程序修改完成后,编译生成执行文件,下载到硬件平台上。电话终端通过串口与计算机连接,设备加电并连接到电话网络中,运行计算机上的测试服务器程序,就可以开展自动化电话拨打测试工作了。