于 倩,常 江
(北京控制工程研究所,北京100190)
嵌入式软件仿真测试平台构件化技术研究
于 倩,常 江
(北京控制工程研究所,北京100190)
软件测试在航天嵌入式软件研制过程中占有极为重要的地位,使用全数字仿真测试平台进行软件测试是行之有效的方法.对仿真测试平台进行层次化构件分解和构件设计,研究航天软件仿真测试平台构件化开发方法,并给出应用实例,证明了该方法可大幅提高平台开发效率.
软件构件;仿真测试平台;软件测试
航天软件为嵌入式软件,进行测试一般可采用以下2种方式:一是将嵌入式软件代码剥离出来,用全数字仿真测试平台进行测试;二是直接将整个系统(包括硬件和嵌入式软件)和其交联的物理设备真实搭建进行测试.方法二具有测试费用高、可靠性测试难于实现等不可克服的缺点.
使用全数字仿真测试平台对嵌入式软件进行测试,是目前国内外公认的、行之有效的、具有广泛应用前景的方法[1].全数字仿真测试平台(简称仿真测试平台),是指使用计算机仿真的方式构建嵌入式软件运行所需的硬件环境(处理器、接口芯片)以及运行时所需要的外部接口数据源[2],在此基础上通过施加各种测试激励(包括故障激励),实现对软件的功能、性能、可靠性、安全性以及强度等各项测试评估验证工作.
航天嵌入式软件有其自身的行业特点:软件主要功能相对固定、软件继承性强、复用性强、研发工作量巨大且时间紧迫.传统的仿真测试平台随着被测系统的种类、通信接口等发生变化,需要重新投入大量时间、人力、物力构建新的测试平台,已经不能满足当前航天嵌入式软件测试的需要,基于构件的仿真测试平台可有效增强平台复用性,避免测试平台搭建时间长、工作重复的问题,提高平台搭建效率.
1.1 软件构件定义
软件构件是软件复用的核心实体,是一组封装的、规范的、可替换的、可重用的系统组成部分,它能在定义完善的体系结构环境中实现某一清晰的功能,是一个与语境无关的组合单元,它的思想来自于工业产品部件.软件构件技术是一种类似于“零部件组装”的集成组装式软件生产方式,它把零件、生产线和装配运行的概念运用在软件产业中,彻底打破了手工作坊式的软件开发模式.
1.2 层次化构件
复合构件是可以被逐层分解的,一个复合构件经过从顶层到底层的层层分解后呈现为树结构[3],最终分解为原子构件,如图1所示.
图1 软件系统构件分解图Fig.1 Component decomposition of the software system
复合构件的规约中,构件对外提供的功能和要求的外部功能分别被映射到成员构件相应的功能上,这就意味着,可以把复合构件之间的连接信息逐层进行消解,最终归结到原子构件之间的连接.然后把原子构件的接口处的连接映射为构件在实现体中的连接,不应对原子构件本身对应的实现体做任何改动.最终生成的软件系统可看作一个多对象原子构件.
2.1 构件分解
采用结构分析的方法,依据嵌入式仿真测试平台的系统构成进行构件分解,共分为5个顶层构件,测试平台系统的构件分解图如图2所示.
图2 测试平台系统构件分解图Fig.2 Component decomposition of the simulation testing platform
(1)内核模拟器构件
内核模拟器负责模拟软件运行环境的处理器,包括寄存器、指令系统及存储器的仿真,以实现被测软件的正确执行.空间飞行器软件检测站自主研发的Vtest就是一个内核模拟器构件,支持8086、695等航天常用芯片,另外也可直接使用商用内核模拟器,如KeilμVision2为51系列单片机的内核模拟器.
(2)交联系统仿真构件
交联系统仿真构件是对被测软件外围环境的计算机仿真,它负责模拟软件接口设备发送测试数据,驱动被测软件运行.交联系统仿真构件是仿真测试平台最重要最复杂的组成部分.由于每个软件的运行环境、系统构成均不相同,为增强软件复用性,需要对交联系统仿真构件进行进一步分解.
根据航天软件交联系统常见硬件接口类型进行分解,可将交联系统仿真构件分解为通信接口构件、采集接口构件、输出接口构件、看门狗构件等,该层构件的复用性主要体现为:支持扩充及重用,建立标准的层接口实现上下两层之间及同层之间的交互.
对各接口类型根据常用芯片进行分解,将各芯片仿真模型构件作为原子构件,例如通信接口常用芯片有CAN总线、1553B总线、RS422串口等.该层构件的复用性主要体现为:仿真模型的封装性及通用性,仿真模型从结构上都包括内特性和外特性两部分,建立仿真模型时,内特性应按真实系统仿真并封装,外特性可以通过配置文件进行配置.
图3 交联系统仿真构件分解图Fig.3 Decomposition of the conjunctive-system simulating component
图3为交联系统仿真构件的构件分解图.
(3)测试脚本解释构件
测试脚本解释构件负责将测试脚本解释执行,驱动模型运行,产生激励信号,使得被测软件按测试用例指定的方式运行,实现软件测试.测试脚本解释构件可分解为脚本翻译构件及脚本驱动构件,脚本翻译构件将固定格式的脚本文件翻译为机器语言,脚本格式为[时间令];#脚本名称,参数1,参数 2……;脚本名称及参数范围可通过配置文件进行设置.脚本驱动构件依据翻译得到机器语言产生仿真输入信号及数据,脚本驱动构件需针对不同软件不同测试方法定制.图4为测试脚本解释构件的构件分解图.
图4 测试脚本解释构件分解图Fig.4 Decomposition of the testing script interpretive component
(4)测试结果分析构件
测试结果分析构件负责收集记录测试结果,并对收集到的测试数据进行分析和自动比对,确定是否有软件错误,从而实现自动化测试.测试结果分析构件可分解为数据记录构件及自动比对构件,数据记录构件收集测试数据(包括输入数据和输出数据)形成记录文件;自动比对构件根据比对数据处理方式进行分解,并且可针对不同软件进行扩展.图5为测试结果分析构件的构件分解图.
图5 测试结果分析构件分解图Fig.5 Decomposition of the testing results analysis component
(5)性能及覆盖率统计构件
性能统计及覆盖率构件负责实时测试结束后统计软件运行过程中性能指标,以及被测软件的测试语句覆盖率、分支覆盖率.性能统计构件包括时间性能及RAM使用量统计等,可通过配置文件设置起始时刻及位置;覆盖率统计构件采用空间飞行器软件检测站自主研发的通用覆盖率统计工具UCA和Coverager,该工具用于统计基于目标码的语句覆盖率和分支覆盖率,并对已执行/未执行的语句和分支进行记录和显示.
2.2 构件设计
按照I cube理论,构件可以被描述为三层结构[4]:第一层是接口层,声明为其他构件提供的接口;第二层是调用层,确定需要其他构件提供的接口;第三层是实现层,描述该构件的具体行为.为提高构件的通用性和复用性,并结合测试平台的特性,本文在设计构件模型时增加用户配置层.因此仿真测试平台构件采用调用层、实现层、接口层、用户配置层的四层设计.
下面以CAN总线仿真构件为例,对构件设计及具体实现进行说明.
(1)调用层
调用层在CAN总线仿真构件中与内核模拟器关系最大,调用层的功能就是为了屏蔽不同的内核模拟器,提供一个与处理器无关的统一接口.调用层要对内核模拟器中内存及I/O口读写、时间管理以及消息输出的函数等进行统一封装,方便构件中的一致调用.调用层设计如表1所示.
表1 调用层设计表Tab.1 Design of the call level
(2)实现层
实现层是构件的主体.CAN总线仿真构件的实现层完成对CAN总线内部特性的计算机仿真,共包含4个C文件,CAN.c、CANBasic.c、CANPeli.c、CANComm.c.CAN.c主要完成对CAN总线的初始设置,CANComm.c为辅助函数,CANBasic.c及CANPeli.c为实现层的核心,分别对CAN总线BasicCAN和PeliCAN两种形式进行仿真,包括CAN总线数据接收、CAN总线数据发送以及CAN总线故障模型的仿真实现.
(3)接口层
接口层是仿真测试平台不同组成部分衔接的约定.CAN总线仿真构件的接口层由CAN.h头文件完成,其中定义了供其他构件使用的数据结构及函数.接口层部分内容如表2所示.
表2 接口层设计表Tab.2 Design of the interface level
(4)用户配置层
用户配置层是增强构件复用性的重要环节. CAN总线仿真构件的用户配置层由CAN.ini、DATA.ini两个配置文件完成,其中CAN.ini用于配置CAN总线外部特性,包括总线基地址、挂接引脚、晶体频率、通信波特率等;DATA.ini用于配置总线数据,包括正常数据和非法数据.
下面给出一个应用构件搭建的某星载软件的仿真测试平台实例.
被测软件(SDIU)为某型号星载接口软件,处理器为80C32,编程语言为 C语言,主要功能为通过1553B总线与CTU进行连接,通过RS422串口为CFI设备连接,完成数据采集转发及指令处理等功能.
将该软件测试平台进行层次化构件分解,并对复用性进行分析:内核模拟器使用商用模拟器Keil μVision2;交联系统仿真构件中1553B总线、RS422串口、AD采集均使用常用芯片,端口地址输出为常见操作,对应构件可复用,看门狗接口使用硬件电路设计,未采用常见芯片,因此看门狗接口构件需新研;测试脚本解释构件中脚本翻译构件为通用构件,测试驱动构件需考虑软件输入和测试方法新研;测试结果分析构件中数据收集构件、文件记录构件均为通用构件,通过1553B总线及RS422串口收集的数据均为直通型数据,可复用直通型数据比对构件,通过端口地址收集的离散指令格式特殊,需新研离散指令比对构件;性能及覆盖率统计构件为通用构件,可复用.该软件测试平台构件组成如图6所示.
该仿真测试平台复用构件代码量占总代码量的90%以上,平台搭建时间缩短85%.
本文研究了航天软件仿真测试平台构件化开发方法,对仿真测试平台进行构件化分解,举例说明了构件的设计方法,并经过实例证明仿真测试平台构件化开发方法可加强平台复用性,大幅提高平台开发效率.
图6 接口软件测试平台构件组成图Fig.6 Architecture of the SDIU-testing-platform component
[1] 刘斌,高小鹏,陆民燕,等.嵌入式软件可靠性仿真测试系统研究[J].北京航空航天大学学报,2000,26 (4):490-493 Liu B,Gao X P,Lu M Y,et al.Study on reliablility simulation testing system for embedded software[J].Journal of Beijing University of Aeronautics and Astronautics,2000,26(4):490-493
[2] 贺红卫.全数字仿真环境技术及其在航天软件测试中的应用[C].软件测试学术交流会,黄山,2005 He H W.All-digital simulation environment technology and its application in aerospace software testing[C]. Software Testing Symposium,Huangshan,2005
[3] 张世琨,张文娟,常欣,等.基于软件体系结构的可复用构件制作和组装[J].软件学报,2001,12(9):1351-1359 Zhang SK,Zhang W J,Chang X,et al.Building and assembling reusable components based on software architecture[J].Journal of Software,2001,12(9):1351-1359
[4] Chang C K,Kim S.A petri-net based specification method for architectural components[C].The 23rdAnnual International Computer Software and Application Conference,Phoenix USA,1999
Com ponent Technology for Em bedded Software Sim ulation Testing Platform
YU Qian,CHANG Jiang
(Beijing Institute of Control Engineering,Beijing 100190,China)
Software testing occupies a very important position in space embedded software development process,and the all-digital simulation testing platform is considered as an effective method for software testing.This paper studies hiberarchy component decomposition and design for simulation testing p latform,and component-based developmentmethod for space software simulation testing platform.Finally,an app lication example is given to verify these methods.
software component;simulation testing platform;software test
TP311
A
1674-1579(2012)05-0038-04
10.3969/j.issn.1674-1579.2012.05.007
于 倩(1982—),女,工程师,研究方向为软件测试;常 江(1979—),男,工程师,研究方向为软件测试.
2012-03-14