嵌入式软件仿真测试环境实时脚本技术的研究
2014-03-28周汉清
周汉清 刘 畅
(中航工业综合技术研究所,北京 100028)
航空装备对嵌入式软件的质量要求不断提高,各种自动化嵌入式软件仿真测试环境不断涌现。目前,这些测试环境被广泛采用,成为国内外公认的有效的软件测试手段,对于发现软件缺陷及提高软件质量起到非常关键的作用。由于测试脚本能够描述复杂的测试场景使得测试更加充分,进而提高测试质量,在仿真测试环境中,利用测试脚本来描述测试用例的输入,并通过仿真测试环境中的脚本解释器来执行测试用例是一种有效的测试方法。但机载嵌入式软件硬实时性的特点对测试脚本提出实时性的要求,为了获得准确的测试结果,在实际测试过程中,需要精确地在某一时刻注入测试激励,并在特定的时刻观察被测系统的响应判断执行结果是否正确。测试激励和结果查看通常都需要精确地在某一时刻进行,否则无法获得准确的测试结果。在构造嵌入式软件仿真测试环境时,实现激励数据的实时控制和测试结果数据的实时收集成为业界的一大难题。为此,本文提出并实现了一种实时脚本技术,实现了测试过程中激励数据的实时控制和结果数据的实时收集,以满足机载嵌入式软件实时性的测试要求。
1 嵌入式软件可靠性仿真测试环境SATE
本文中,实时脚本是基于嵌入式软件可靠性仿真测试环境SATE(Software Automation Testing Environment)实现的。SATE为嵌入式软件可靠性测试提供了一个从测试用例编辑、仿真模型开发、接口配置集成,到测试用例激励、测试数据收集、仿真模型和测试脚本的运行管理、接口驱动管理,再到测试数据管理分析的全过程解决方案。能够满足嵌入式软件对嵌入特性、接口特性、实时特性以及交联特性的要求。
测试环境采用了目前国内外较成熟产品GESTE[1]、ADS2[2]等的体系结构。如图1所示。测试环境分为测试主控机和实时处理机两部分,其中测试主控机主要完成测试用例、仿真模型、脚本的编辑和加载,测试过程的控制,以及测试结果的显示与分析等。实时处理机通过真实总线与被测系统连接,实现对被测系统的系统交联模型的仿真。执行时实时处理机接收主控机下传的测试数据并进行加工,完成向被测系统施加测试激励的功能。此外,实时处理机还要完成测试结果数据的收集任务。
图1 SATE软件体系结构
接下来,我们讨论实时脚本在SATE中所处的位置以及实时脚本与SATE其他模块之间的关系。从图1中可以看出,测试主控机上的脚本编辑器和实时处理机上的脚本解释器协同实现了SATE的实时脚本功能。测试人员通过测试主控机的脚本编辑器编写脚本并进行语法检查。测试开始后,测试脚本通过TCP/IP下发到实时处理机。实时处理机中的脚本解释器在任务调度模块的驱动下对脚本进行解释,并将解释完的测试激励数据通过接口驱动管理模块下发到被测系统,同时解释器接收被测系统的反馈结果,并根据结果执行相应的脚本逻辑。
2 实时脚本的设计与实现
由于实时处理机中的脚本解释器是经过深度定制的,是脚本的实际执行机构。主控机中的脚本编辑器中的语法检查规则需要根据实时处理机中的脚本解释器确定。因此,本文首先阐述实时处理机中脚本解释器的实现方案。
2.1 脚本解释器
实时处理机中脚本解释器构造主要包括脚本解释器移植、解释器裁剪、解释器的扩展和嵌入3个主要过程。
2.1.1 脚本解释器移植
在SATE中,实时处理机是一台加载VxWorks实时操作系统的工控机,而目前Python脚本解释器无法直接在VxWorks中进行,这就需要进行脚本解释器移植。目标是获得一个能够在VxWorks系统上运行的Python解释器。
在SATE中,我们将Linux系统版本的Python解释器移植到VxWorks 5.5系统中。具体的移植方法参见[3]。由于Python解释器采用C语言实现。移植主要工作是系统函数替换,将Python解释器中相关的Linux系统调用函数替换成VxWorks中的系统调用函数。
2.1.2 脚本解释器裁剪
进行脚本解释器裁剪的原因主要有以下两方面,一是在上述移植的过程中,解释器中有些系统调用在VxWorks中并不存在,无法进行相应的名称替换。对于这类系统调用,在移植的过程中进行裁剪删除。第二个原因是,我们移植的目标系统是一个嵌入式系统,系统资源十分稀缺。由于Python脚本解释器结构复杂、功能庞大,使用时所占用大量的系统资源,因而在移植过程中,对于执行测试脚本无关的模块,例如网络模块、图形用户编程模块、Web模块、数据库模块等也进行裁剪删除。裁剪后的脚本解释器既满足了执行测试脚本的要求,同时结构简单紧凑、占用更少系统资源,具有很高的运行效率。
2.1.3 脚本解释器扩展和嵌入
经过上述两步,我们获得了一个运行在VxWorks上的Python脚本解释器。但是为了能够执行测试主控机中的测试脚本,还需要这个解释器跟实时处理机中的其他模块相互协作。脚本解释器扩展和嵌入就是建立协作的过程。
由于实时处理机中其他模块都采用C语言实现,所以扩展和嵌入就是集成C语言和Python语言。扩展是指用C语言实现Python的扩展模块,然后从Python中调用这些模块的功能。嵌入是指将Python解释器嵌入到C语言编写的应用程序中,使应用程序可以解释执行Python语言编写的测试脚本。扩展和嵌入都是通过Python的C语言应用程序编程接口来进行,由此形成的结构如图2所示。
图2 Python扩展和嵌入结构
由于嵌入实现比较简单,下面主要介绍扩展的实现方式,扩展主要是在Python脚本解释器的基础上加入针对实时嵌入式软件测试特性的描述,包括测试激励、测试反馈和任务调度。
1)测试激励
在SATE中,被测系统只与接口驱动管理模块进行数据交互,实时脚本对被测系统的测试激励通过接口驱动管理模块进行施加。本文采用的扩展方式对SATE中的接口驱动管理模块函数进行封装,测试脚本可以通过扩展模块提供的方法来设置激励数据的值。最终通过接口驱动管理模块发送给被测系统。实现后的代码示例如下:
2)测试反馈
实时脚本获取被测系统的反馈数据也是通过接口驱动管理模块完成,接口驱动管理模块按照接口协议接收并保存被测系统的反馈数据。测试脚本通过扩展的方法来获取相应反馈数据的值。实现后的代码示例如下:
3)任务调度
测试脚本承载的测试行为被封装成一个个独立的测试任务,测试任务分为两种,一种是周期型任务,另一种是事件型任务。周期型任务是在测试执行过程中按规定周期重复运行。事件型任务是在指定时间到达时执行一次。无论周期型任务和事件型任务,都需要接收任务调度模块的统一调度,这就需要实现一个扩展的注册函数,将脚本任务注册到任务调度模块中。注册函数主要将任务的类型、执行时间以及周期等信息注册到任务调度模块的任务列表。测试开始后,任务调度模块根据任务的时间特性自动调用测试脚本函数。实现后的代码示例如下:
2.2 脚本编辑器
脚本编辑器提供了友好的人机界面进行脚本开发。包含了常规代码编辑器中的脚本编辑、脚本自动补全、代码折叠、语法高亮、代码注释、字体放大缩小、换肤,显示代码行号等功能。由于Python语言是解释执行,在执行过程中如果遇到语法错误,解释器能够自动停止程序运行并给出错误提示,因而现有的商业Python脚本编辑器中不包含语法检查功能。但在SATE中,脚本的编辑和执行分布在两个不同的平台。脚本解释器执行脚本时,测试过程已经开始。如果此时遇到脚本语法错误,测试过程将被中止,此前已经得到的测试步骤需要在修改脚本完成后重新执行,最终造成测试执行效率低下。因而,在测试执行之前对脚本进行语法检查是十分必要的。
在脚本编辑器中单独实现语法检查器工作量非常大,需要很高的开发维护成本。为此,本文提出一种实现脚本语法检查的方法,这种方法的主要思路是通过在脚本编辑器中内嵌一个特殊的脚本解释器,在测试过程开始前,先利用该解释器模拟运行脚本并给出语法检查的结果。这就使我们在测试执行开始前就能获得一个可以正确执行的脚本。
图3 语法检查脚本解释器与执行脚本解释器的关系
实现语法检查工作的重点是在测试主控机上的脚本编辑器中实现一个语法检查用的脚本解释器。上文已经介绍了实时处理机中的脚本解释器的实现方案。该解释器是测试脚本的实际运行机构,是脚本编辑器中语法检查规则建立的依据。如图3所示,图中左侧是实时处理机中脚本解释器的实现过程,右侧是测试主控机上脚本编辑器中用于语法检查的脚本解释器的实现过程。标准的脚本解释器可以直接在测试主控机中运行,因而无需脚本移植过程。除此之外,构造过程与实时处理机中的脚本解释器一致。
将语法检查用的脚本解释器内嵌到脚本编辑器中,实现了语法检查的功能。由于解释器的构造方式与实时处理机中的相同,因而,两个解释器的支持的语法结构、语法检查判断准则都完全一致。最终实现了在测试主控机的脚本编辑器中进行语法检查,在实时处理机中的脚本解释器中运行脚本的目的。
3 应用实例
最后,我们使用嵌入式软件仿真测试环境SATE对“飞机襟缝翼伺服控制模拟系统软件”进行可靠性测试,测试脚本采用Python脚本进行编写。测试概况如表1所示。
表1 工程案例项目概况
下面介绍两个典型的测试用例。
3.1 输入信号消抖能力测试
验证目标:测试软件对输入信号确认功能(信号保持300ms确认有效,否则保持原状态)实现的正确性。
验证方法:通过实时测试脚本,控制输入信号持续的时间。
图4 输入信号消抖能力测试结果
测试结果如图4所示。验证结论:人工测试时无法精确到ms级,因而无法完成此项功能的测试过程,无法找出软件缺陷。仿真环境中实时测试脚本可以精确有效模拟软件输入信号持续时间,发现了软件存在的缺陷,从而充分验证软件数据处理是否满足要求。
3.2 极端异常条件下系统响应测试
验证目标:测试机翼在转动中突遇强大的气流压力迫使机翼突然变向转动时软件的响应是否正确。
验证方法:通过实时测试脚本,通过脚本模拟飞机异常环境条件,施加异常测试激励数据给被测系统。
测试结果如图5所示。
图5 极端异常条件下系统响应测试结果
验证结论:仿真环境可以准确模拟飞机异常环境条件,从而充分验证在异常条件下软件的处理能力是否满足要求。
4 总结
本文在嵌入式软件仿真测试环境SATE中设计并实现了一种实时Python脚本技术,通过测试实例证明,采用实时脚本技术的SATE能够完成各种复杂测试场景的描述,具有很强的测试描述能力。通过使用CodeTest进行性能测试,测试脚本的定时精度可达1ms,能够充分满足机载嵌入式软件测试的要求。综上所述,本文设计并实现的实时脚本技术具有很好的推广应用价值。
[1] 钟德明,刘斌,阮镰. 嵌入式软件仿真测试环境软件体系结构研究[J]. 北京航空航天大学学报,2005,31(10):1130-1134.
[2] ADS2:Avionics development system 2 generation[EB/ OL]. www.techsat.com,2004.
[3] Raskin S.How To port Python To VxWorks[EB/ OL].https://mail.python.org/pipermail/pythonlist/1999-May/003929.html.