摘 要:计算机技术应用的不断普及,使得实时嵌入式软件在航空、航天、工业控制、交通、医疗和军事安全等诸多领域发挥着愈来愈重要的作用。不难看出,这些领域对软件的可靠性有很严格的要求,因为该领域的软件一旦失败,就会直接或间接影响人类的生命财产和生态环境的安危。所以,嵌入系统开发中软件的代码质量对产品的最终质量起到了决定性的作用,但是事实上由于对软件开发缺乏科学的监管手段,开发的软件往往得不到很好的测试与分析,未经充分的测试就交付给用户使用,从而影响了软件的使用效果。
关键词:嵌入式; Python
1.Python实时嵌入式软件的特点
Python是一种解释型、面向对象、动态语义、语法优美、跨平台的开源脚本语言。理论上Python可以在任何平台(包括各种嵌入式操作系统,如Palm OS,VxWorks等)上编译并运行.。Python可以借助语言提供的API,使用C或C++来进行功能性扩展,既保留了方便灵活的语法和功能,又可以获得与C或C++几乎相同的性能。Python还被当作一种入门程序员最适合掌握的优秀语言,因为它免费、面向对象、扩展性强同时执行严格的编码标准。Python作为实时嵌入式系统,他具有极强的实时性与包含着嵌入系统所拥有的各种特点。
1.1 实时性
所谓实时性,即必须满足时间约束的特性。实时软件的处理速度并不一定非常快,重要的是需要准时和及时,如表1 所示。对于实时软件而言,其正确性不仅由系统的功能和行为特性决定,还依赖于系统的时间特性。与非实时软件相比,时间特性是实时软件的一个重要方面,它是决定实时软件成功与否的关键因素之一。
1.2 嵌入式特性
所谓嵌入,即一个系统A 内置于一个更大的系统B中,则称为A嵌入于B。嵌入式软件系统的一个突出特点在于,通常只为软件提供执行环境(运行环境),而不提供软件的开发环境(宿主环境)。也就说,嵌入式软件的开发环境和运行环境是不一致的。正是这个不同,给嵌入式软件的测试带来了不少的麻烦。因为即使在宿主机环境下测试再充分,也不能说明在目标机环境下该软件运行不出问题。因而,嵌入式软件还面临着目标环境的测试。这不仅增加了测试的代价,而且还带来了嵌入式软件的测试策略问题,即哪些测试分配在宿主环境进行,哪些测试分配到目标环境下进行。嵌入式系统中常见的类型恰恰又是实时系统。
二.实时嵌入式软件的测试环境
要测试整个Python实时嵌入式软件的主要是根据测试软件的运行环境(目标机环境)和开发环境(宿主机环境)的不一致进行测试,这一特点导致实时嵌入式软件测试要对当前软件运行的环境进行测试。
2.1 Python嵌入式软件测试的系统结构
Python实时嵌入式软件在软件的开发过程当中,大都属于在主机上进行软件编码,之后将该段代码编译之后加载到目标机上进行运行,并通过测试代理的方式,对该段代码进行错误、反复等白箱与黑箱的测试。由于目标机的资源相对匮乏,测试所得的信息在目标机上不便分析,通过主机和目标机之间的通信把测试所得信息上传回主机,再由主机中的测试结果分析工具对测试信息进行分析。嵌入式测试系统基本结构如图1所示。
2.2 宿主机及目标机的结构
如图2 所示,在宿主机方,在测试开始前制定测试计划,根据不同的测试目的选择相应的测试用例,生成测试脚本,通过脚本解释器实时解释非实时生成的测试命令,并将测试命令和数据通过目标服务器发送至被测目标系统;同时将从目标机上的测试代理获得测试结果数据后,可显示测试结果,以提示测试人员,还可以由测试结果分析工具对测试结果进行分析,最后传送回测试结果数据库,并生成测试报告。通常宿主机上进行的测试是单元测试。如果被测单元所使用的是高级语言或与目标机相同的汇编语言,则可以直接在宿主机上进行测试;如果被测单元使用的汇编代码与目标机不同,则需要指令仿真器。
在目标机方,测试代理接收测试命令后运行被测实时嵌入式应用软件,被测应用软件将测试后生成信息发送到测试代理中的一个专门任务的消息队列中,此任务负责在适当的时候将这些信息发送到宿主机方。同时目标服务器中也有负责接收测试所得信息的专门任务,它从目标机上的测试代理获得测试结果数据。无论在宿主机上进行的测试如何完善,在目标机上的测试仍然是不可替代的, 因为有一些问题只能在目标机上测试才可以被确认和发现。
3.脚本测试及脚本解释器
3.1脚本测试
在整个Python语言测试过程当中,对于脚本技术的引入是实现整个软件开发的自动化技术的最有效手段,软件脚本的测试不但可以减少测试人员的工作量,而且能够提高整个软件测试的可维护性、可在用性。实现软件测试过程当中用户与被测软件之间的相互支持。同时由于Python语言的移植性较好,在实现跨平台操作时,代码的重复利用性,可以增强软件代码的重复性使用的概率。
测试脚本的编制是编制具有正规语法的数据和指令的集合。在软件测试过程中,测试脚本通常以文本形式存在,由测试脚本组织用户所施加的一系列软件执行动作,达到驱动被测软件运行的目的,从而完成测试。
3.2脚本解释器
根据实时嵌入式软件测试脚本语言的设计,设计针对该语言的解释器。脚本语言解释器是脚本语言的支撑,解释器设计的成功与否直接关系到能否实现脚本化的实时嵌入式软件测试。针对上述脚本语言设计中所提到的用户施加的测试命令及其特性,则需要处理测试中各命令的时间要求以及命令之间的并发同步等问题,解释器应由两部分组成,即控制部分和解释部分。
控制部分的作用在于对测试脚本进行预处理,提取各种命令的执行脚本,生成按时间排列的命令表,然后根据实时调度时钟信号和条件判断触发解释部分的调用,借助在控制部分中的多命令处理方式可以保证测试中各种命令的并发和同步的处理,从而保证了实时嵌入式软件测试中对实时特性的要求;解释部分的工作原理是在控制部分按时钟信号触发后,加载需要解释的脚本执行代码,脚本源代码首先由词法分析器进行词法分析,分离出标识符、关键字和变量名等,然后由语法分析器根据语法定义,分析源程序的语法正确性并根据语义执行相应的语义动作,最后生成测试命令并通过目标服务器下载到目标机上,以驱动被测软件的运行。
4.小结
随着我国软件业的发展,作为软件质量保证的重要组成的软件测试已越来越受到重视,而软件测试自动化工具由于可以提高软件测试的有效性和效率。因此,软件测试自动化工具的开发已成为软件测试的一个重要研究领域。本文将Python语言作为实时嵌入式软件测试脚本的主要工作,初步浅谈了整个软件测试脚本的作用与实际方法。
参考文献:
[1]武海燕、晏立,嵌入式实时软件的任务构造[J],计算机工程,2010,36(7):39-41
[2]王海晟、楼文晓,嵌入式软件模拟测试平台的设计与实现技术[J],计算机工程,2006,32(15):247-249
[3]王轶辰、刘斌、阮镰,嵌入式软件可靠性仿真测试环境框架[J],计算机工程,2006,32(19):43-45,4