通用嵌入式系统软件测试平台的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2007,43(15)
1引言
目前,软件测试的理论和方法应用于普通个人计算机和大型机中已经非常成熟,这主要得益于它们的硬件资源比较丰富,而且内部结构和外部接口高度统一,并且有强大的操作系统支持。相对而言,嵌入式系统由于受自身内存不丰富,外设资源少,体系标准不统一,没有操作系统,或者难以获得操作系统足够支持等因素的制约,嵌入式软件的测试必须高度依赖于自身的调试平台,而往往这样的调试平台不足以进行全面的软件测试。
通用嵌入式系统软件测试平台(以下简称通用测试平台)通过仿真的手段,在PC机上模拟各种嵌入式系统,让嵌入式系统软件在模拟的环境中运行,并且在通用测试平台的控制下进行各种测试,从而能将成熟的软件测试方法应用于嵌入式系统软件中,有效地提高嵌入式系统软件的可靠性和开发效率、缩短产品的开发周期。
本文讨论的通用测试平台仅针对基于32位ARMCPU内核的各种嵌入式系统。通用测试平台必须高度可配置,可由用户根据实际的嵌入式系统,配置不同的模拟目标,并且真实反映实际的硬件外设资源;更为重要的是,通用测试平台必须提供完善的平台与被测软件交互的接口,通过这些接口,用户能方便地实现和使用各种软件测试方法;而且具备可靠的记录手段,将测试结果保存下来进行后续分析;同时还应该具有良好的结构和人机界面,方便扩充模拟目标和二次开发。
本文将围绕上述要求阐述通用嵌入式系统软件测试平台的整体框架设计,并介绍与之配合使用的工具链。
2通用嵌入式系统软件测试模拟环境
2.1嵌入式系统软件模拟测试方法
本文介绍的通用测试平台运用了全数字仿真技术,在PC机上模拟整个嵌入式硬件系统,不但包括核心CPU,而且将外围各种器件,如串口、定时器、实时时钟、通用I/O等,进行数字化仿真。嵌入式软件无需,或者稍加改动就能在这个仿真环境下运行。在这个封闭的黑盒子中,嵌入式软件如同在真正硬件上被执行,通过仿真模型内建的测试接口导出或发送测试数据,驱动被测软件运行,进而验证软件测试结构,从而实现对嵌入式系统软件动态的封闭测试。
2.2嵌入式系统软件测试环境与功能
通用测试平台为嵌入式软件测试的自动化提供了必要的支持,这些支持分别体现在测试过程的两个阶段:编译插装和测试运行。在测试开始前,使用通用测试平台专用的工具链,将被测软件和测试用例、测试方法进行整体插装和编译。在测试运行过程中,要求通用测试平台能够对测试脚本中的测试任务进行管理和实时的调度,组织被测系统运行所需要的输入条件,并提供人工干预界面,实现测试中人机模型之间以及与被测系统之间的数据交互,并实时地收集从被测系统返回的结果数据用于实时显示和事后的数据分析等。
通用嵌入式系统软件测试平台的设计
沈永清,徐中伟
SHENYong-qing,XUZhong-wei
同济大学通信工程系,上海200331
DepartmentofCommunicationEngineering,TongjiUniversity,Shanghai200331,China
SHENYong-qing,XUZhong-wei.Designofgeneralsimulationtestplatformforembeddedsystemsoftware.ComputerEngineeringandApplications,2007,43(15):83-85.
Abstract:Simulationtestisavaluablewaythatcanimprovethequalityandreliabilityofsoftware;generalsimulationtestplatformisasetofsoftwaresystemrunningonpersonalcomputer,viausingmodulesofARMCPUbehaviorandperipheralhardwaresimulatorandatestingcontroller,whichsupporttestingdifferentembeddedsoftwarewithoutanychanginginsource.Thispaperfocusesonthearchitectureofageneralsimulationtestplatformandthedesignofsimulator,testingmanagerandspecialtoolsforthisplatform,thenputsforwardanimplementationmoduleforthetestingmanagerindetail.
Keywords:embeddedsoftware;softwaretest;embeddedsystemsimulation;testingenvironment;testmanagement
摘要:仿真测试是嵌入式软件系统测试阶段的一种有效测试方法,探讨了通过在PC机上仿真模拟ARM嵌入式系统,对嵌入式系统软件进行仿真测试的通用测试平台的设计。该平台可以在不做大幅度修改的情况下对不同的嵌入式系统软件进行各种测试。重点介绍了仿真模拟器、测试管理器和测试平台专用工具链的设计,提出了一种测试管理器的实现模型,并进行了详细的描述。
关键词:嵌入式软件;软件测试;嵌入式系统仿真;测试环境;测试管理
文章编号:1002-8331(2007)15-0083-03文献标识码:A中图分类号:TP311
作者简介:沈永清(1978-),男,在读硕士研究生,主要研究方向:铁路软件安全测试,计算机通信网;徐中伟(1964-),男,教授,博士生导师,主要研究方向:铁路软件安全测试与安全评估,测试自动化。
ComputerEngineeringandApplications计算机工程与应用83
2007,43(15)ComputerEngineeringandApplications计算机工程与应用
为了满足模拟测试环境的各种功能需求,通用测试平台提供的功能包括核心的CPU模拟、各种外设硬件的模拟、用户接口、测试用例和结果记录管理,见图1。整体系统框架采用分层设计思想划分为三层:测试服务层,仿真核心层,作业层。整个测试平台和被测软件可以运行在同一台计算机中,而且对测试环境和条件要求不高,可快速得到测试结果,非常适合需要经常进行嵌入式系统软件测试的应用。仿真核心层是模拟硬件运行的软件实现,通过它可以在PC上运行其它架构的程序。CPU模拟器,外设模拟器都是该层的子模块。仿真核心层可以比喻作测试平台的心脏。作业层是被测程序与仿真核心交互的桥梁,通过作业层提供的服务,仿真核心能连续自动地执行被测程序,它实现了两个核心功能———对程序的装载和连接。测试服务层是测试平台为了满足用户的测试要求而提供的一系列系统服务的集合,其中包括命令行用户界面、数据的实时收集、数据的显示以及测试方法与测试用例的管理等测试服务,这些服务都是设计测试管理器需要实现的功能。因此,测试服务层可以比喻作测试平台的大脑。以下着重介绍通用测试平台的体系结构和模块设计。
3通用嵌入式系统软件测试平台的体系结构
鉴于上面的分析,可以采用分层系统的体系结构设计通用
测试平台。层次体系结构有助于实现对软件功能的分解,把软件的功能分解为子任务组,其中把每个子任务组置于一个特定的抽象层次上。下面对两个核心部件:仿真模拟器和测试管理器的体系结构作进一步讨论。
3.1仿真模拟器的设计
仿真模拟器之所以是测试平台的核心,是因为它实现了由
软件模拟的包括CPU和外设的最小硬件系统,被测软件在仿真模拟器制造出的虚拟环境运行中。这是进行各种测试的基础。仿真模拟器从总体上可划分为3个层次:
(1)符号处理模块,主要处理执行文件的头信息,解释执行文件中内嵌的调试器的调试信息,对符号表的管理,对源代码表达式的解析,定位源代码中的语句位置和机器码的位置关系等。
(2)目标控制模块,主要完成执行控制(如中断程序的执行,设置中断条件等),程序栈结构分析,对具体目标硬件的控制(如本地调试、
远程调试和模拟调试的控制)。这一部分实现了对运行于测试平台的软件的控制,为测试的开展提供了强有力的支持。
(3)目标模拟模块,这一部分是仿真模拟器的核心。它的功能是模拟嵌入式计算机系统中的主要硬件(包括CPU、内存、通
用I/O和各种硬件外设等)的执行,对执行文件的机器指令进行解释,并模拟执行每一条机器指令,产生相应的硬件响应等。
其中,目标模拟模块是整个仿真模拟器中最重要的一个部分。它包括3个子模块:处理器模拟宏模块、内存模拟模块和I/
O模拟宏模块。图2展示了目标模拟模块模拟的硬件逻辑结
构图。通用测试平台的目标模拟模块从功能上可分为如下几大模块:
(1)配置选项解析和初始化模块:在模拟硬件开始前,控制各种模拟硬件的初始化、解析配置文件的选项行、根据各种硬件的选项,完成各种配置。
(2)处理器模拟宏模块:主要完成与处理器体系结构相关的模拟,可细分为CPU指令模拟执行模块、MMU/Cache模拟模块、CoPocessor(协处理器)模拟模块。
(3)CPU指令模拟执行模块:主要任务是完成指令度去,指令译码,指令执行的工作;如果CPU状态发生变化,调整指令和各种寄存器的值;在指令执行前,调用I/O模拟模块提供的接口驱动模拟各种外设的行为。
(4)MMU/Cache模拟模块:本模块负责模拟体系结构相关的各种内存管理单元和缓存的行为。其中主要分为与具体
CPU型号无关的MMU/Cache子模块,和与具体CPU型号相关
的子模块两部分。
(5)CoPocessor模拟模块:其主要任务是完成各种协处理器的初始化;执行各种协处理器的指令。实际上CoPocessor模块主要为MMU/Cache模块提供支持。
(6)I/O模拟宏模块:本模块包含各种逻辑性为各异的外设模拟,主要包括系统I/O,网络芯片等模拟模块。
(7)系统I/O模拟模块:其主要任务包括根据配置文件对I/
O和外设初始化;完成各种外部I/O设备的模拟(如时钟计数器,产生中断等);进行各种特定CPU和外设的I/O寄存器的读写。
(8)网络芯片模拟模块:主要是完成8019AS网络芯片的模拟工作,包括模拟8019AS的控制逻辑、虚拟网络输入输出
接口处理。
(9)MEMORY模拟模块:它的主要任务包括根据配置文件进行内存初始化,并加载二进制文件,进行RAM/ROM读写的模拟。
由图2看出,仿真核心层通过一种类似层次结构的模型管理和控制各个子功能模块并结成整体,虚拟出一个相对完整的嵌入式系统硬件架构,从而构建了通用测试平台的基础部分。
3.2测试管理器的设计
测试管理器在仿真核心层的支持下,全面接管与测试相关
的工作,其位置在于测试服务层,也是该层最主要的组成部分。对于测试管理器,有如下几个要求:第一,必须保证测试过程中
84