李建军1,2
(1. 中国电子科技集团公司第三十二研究所,上海 201808;2. 国家工程软件产品质量监督检验中心,上海 201808)
摘要:随着自主可控战略的实施,国内多家基础软件厂商推出了相关的国产化嵌入式实时操作系统软件,作为底层系统级软件,目前业界普遍缺少相关的测试经验和规范。分析并给出了国产化嵌入式实时操作系统测试内容、测试方法和测试技术等,为从事嵌入式实时操作系统测试验证活动提供参考指南。
关键词:国产化;嵌入式实时操作系统;验证与测试;测试规范
中图分类号:TP311.5文献标识码:ADOI: 10.19358/j.issn.16747720.2016.24.007
引用格式:李建军. 国产化嵌入式实时操作系统软件测试方法研究[J].微型机与应用,2016,35(24):22-24,29.
0引言
嵌入式系统已经在众多行业和领域获得了广泛且成功的应用,比如机载航空、轨道交通、工业控制等方面。就嵌入式应用开发来看,目前绝大部分功能较复杂的嵌入式系统都基于嵌入式实时操作系统进行开发,一方面可以使嵌入式应用软件开发人员避开繁琐的硬件管理, 而把主要精力放在目标应用的算法研究以及应用程序自身的构架上,另一方面应用实时操作系统提供的各种服务 , 可以更容易地构建出复杂的嵌入式实时应用系统,并且在软件重用性和开放性方面实时操作系统也起到了非常重要的作用。国产化嵌入式实时操作系统基础软件是我国自主信息化能力和水平的重要体现,更是保障我国信息安全的重要组成部分,因此研究其软件测试方法和技术具有重要的意义,国内外研究人员已经对嵌入式实时操作系统的测试进行了一定研究[13],但目前还未形成系统成熟的测试方法。本文主要针对国产化嵌入式实时操作系统的测试内容和测试方法进行研究。
1RTOS测试内容
国产化嵌入式实时操作系统的测试主要指基本功能组件[4]测试,包括进程管理、异常/中断管理、时钟/定时器管理、信号量管理、文件系统、I/O管理、标准符合性、网络协议栈等方面的测试。涉及的测试类型包括:文档审查、代码审查、功能测试、性能测试、接口测试、余量测试、边界测试、人机交互界面测试、强度测试、安全性测试、恢复性测试、标准符合性测试、安装性测试等。
2RTOS组件测试
2.1进程管理
系统的分配和运行都是以进程为基本单位的,因而对系统的管理可归结为对进程的管理。关于进程管理的测试,主要包括进程的创建终止、阻塞唤醒、挂起激活、同步通信、调度机制几个方面,具体为:
(1)支持进程的创建:支持进程的创建,并包括申请进程控制块、为进程分配资源、将进程导入相关就绪队列等一系列功能。
(2)支持进程的终止:支持响应进程正常结束或异常结束,终止进程,以及释放进程所占有资源,将进程控制块从队列中移除等功能。
(3)支持进程的阻塞和唤醒:准确响应进程阻塞和唤醒的相关条件,将进程排入阻塞和唤醒队列中去。
(4)支持进程的挂起和激活:准确响应进程的挂起和激活,并根据相关调度机制更改进程状态。
(5)支持进程的同步和通信:根据系统的需要设计合理的进程同步和通信机制。
(6)支持进程的调度:支持调度管理功能,实现可抢占的优先级调度、同等优先级先进先出调度、同等优先级时间片轮转调度算法、抢占调度控制、任务锁定调度等功能。采用功能分解法,通过创建多个任务,并设置支持基于优先级抢占、同等优先级先进先出/时间片轮转的任务调度方法,通过查看任务切换的日志记录来验证是否符合要求。
2.2异常/中断管理
异常/中断管理模块的测试通过异常/中断处理句柄的安装来实现,包括不同级的中断响应控制、当前系统的中断信息管理以及及时响应外部产生的中断几个方面。测试时应覆盖以下内容:
(1)支持中断任务的创建和删除,通过创建、执行、删除多个不同的中断任务,利用获取任务的属性信息函数和相应的日志记录来验证操作是否正确。
(2)支持异常发生时保存现场的异常框架,通过在不同任务中插入相应中断异常,查看异常框架能否保护现场数据,进行异常处理,异常清除后,验证任务能否从异常中恢复,继续执行。
(3)支持异常发生时系统输出相应诊断数据,包括当前任务信息、内存数据、错误类型等,并执行系统默认的异常处理,可通过在不同的任务中插入相应中断异常,查看异常发生时系统输出的相应系统诊断数据,验证能否进行系统默认的异常处理。
(4)支持与体系结构相关联的异常处理机制;支持体系结构相关的异常处理,如x86平台上的除零异常和返回非法地址异常等,可通过在不同的任务中插入与体系架构相关的不同的中断异常,查看异常发生时系统输出的相应系统诊断信息,验证能否进行系统默认的异常处理。
(5)支持向用户提供异常处理的挂接函数,对于无法满足用户需求的系统默认处理,用户可以修改异常处理函数,通过在不同的任务中插入不同的中断异常,查看异常发生时系统输出的相应系统诊断信息和系统默认的异常处理,然后通过挂接函数修改异常处理函数,重复执行一次,验证能否进行用户自定义的异常处理。
2.3时钟/定时器管理
时钟/定时器管理模块的测试可以通过系统时钟的管理来实现,包括定时器功能、单调速率周期的计时方式及显示指定定时器的信息等方面。测试时应覆盖以下内容:
(1)实现微秒级高精度时钟,单调速率定时器,并支持绝对时间计时和相对时间计时。
(2)支持时钟管理,实现基本定时功能,基本粒度范围,可通过在程序代码中插桩,显示系统启动定时任务时和系统触发定时任务时的时间戳,来验证系统的基本定时功能和基本粒度范围;显示系统时间片轮转调度时刻的时间戳,来验证系统为轮转调度提供的时间片,并实现定时触发功能。
(3)支持维护系统流逝时间和实时时钟: 支持维护系统流逝时间,包括系统启动后的真实时间、逻辑时间等,可通过在程序代码中插桩,显示当前系统启动后的真实时间和逻辑时间的时间戳,以验证系统支持维护流逝时钟。
(4)支持定时器的创建、初始化、删除、取消、启动等基本操作。
(5)实现为轮转调度提供时间片,并用于信号量、事件、消息队列、信号等操作的定时触发管理。
2.4内存管理
内存用于保存进程运行时的程序和数据,测试时应验证通过核心工作区和用户工作区控制任务对硬件内存资源的访问,提供内存的分配及释放功能、系统内存信息显示功能等。测试时应覆盖以下内容:
(1)支持核心工作区和用户工作区的系统动态内存管理,可通过在程序代码中插桩,在内存的核心工作区和用户工作区分别进行内存管理等基本操作,来验证系统支持核心工作区和用户工作区的系统动态内存管理。
(2)支持在核心工作区内分配核心对象控制块、分配任务栈、分配消息队列缓存区等功能,可通过在内存的核心工作区分配核心对象控制块、分配任务栈、分配消息队列缓存区等,从而验证系统支持在核心工作区内分配核心对象控制块、分配任务栈、分配消息队列缓存区等功能。
(3)通过调用显示系统中内存总数、已使用数以及空闲内存数等信息,来验证系统支持内存信息显示功能。
(4)进行内存分配、内存释放、内存重新分配以及分配内存对齐等操作,验证内存管理基本功能。
(5)支持硬件MMU,实现虚拟内存与实际内存的一一映射。
2.5信号量管理
信号量作为用户进程之间进行通信同步的原始机制,该模块可以通过不同种类的信号量通信方式进行测试,包括二进制信号量、计数信号量和互斥信号量,实现多任务间的同步、临界资源的互斥访问以及共享资源的有效访问。
测试时应覆盖以下内容:
(1)支持互斥信号量、二进制信号量、计数信号量,实现多任务间的同步,临界资源的互斥访问以及共享资源的有效访问: 二进制信号量只允许一次获取和释放;计数器信号量则允许多次获取或释放,获取/释放的最大次数在信号量创建时设置;互斥信号量是特殊的二进制信号量,支持所有权、递归访问、任务删除安全,可通过执行符合POSIX 1003.13-2003标准的信号量管理模块的接口函数调用,由此验证操作系统信号量管理相关接口的符合性和正确性。
(2)支持互斥信号量采用优先级继承或优先级天花板方式防止优先级逆转,在使用优先级天花板协议时,可指定所有使用此信号量的任务的最高优先级以及优先级范围。
(3)通过在不同类型的不同任务的程序代码中插桩,显示信号量拥有者、空闲信号量、已用信号量等信息,从而验证系统支持信号量信息显示。
(4)支持获取信号量、释放信号量、删除信号量等功能。
2.6文件系统
文件系统用于组织和管理计算机中所存储的大量的程序和数据。测试文件系统模块包括对文件的管理以及实现对文件及目录的常见操作,包括创建、打开、关闭、读写文件和注册文件系统等几个方面[5]。
测试时应覆盖以下内容:
(1)支持根文件系统,能够对硬盘等块设备实现挂接/卸载多种文件系统(FAT\\NTFS\\EXT2\\EXT3\\VFAT等)。
(2)支持文件系统访问块设备操作表,能使用主设备号访问设备表的信息,可通过执行挂接/卸载操作,验证其是否提供具体文件系统的挂接/卸载函数,能够对硬盘等块设备进行文件系统的挂接。
(3)支持文件句柄操作控制表维护文件的操作,包括目录、设备、内存文件等,可通过执行程序来验证文件系统访问块设备操作表,使用主设备号访问设备表的信息。
(4)支持显示当前已注册文件系统的设备节点及安装点信息,通过在程序中调用文件系统信息访问函数。
(5)通过在程序中调用文件格式化操作相关接口函数,以指定的文件系统类型格式化设备,验证文件系统格式化功能的正确性。
(6)通过在程序中调用文件操作相关接口进行目录、设备、内存文件的创建、读写、删除、关闭操作,验证根文件系统功能的正确性。
(7)支持多分区,在单个分区下可创建多层目录结构,可以创建任意数量的文件直至剩余内存空间不足。
(8)支持对块设备进行格式化,对系统数据的完整性进行检测。
(9)支持VFAT长文件名。
(10)支持FAT12、FAT16、FAT32文件分配表类型,可通过设置FAT12、FAT16、FAT32文件分配表类型,验证对文件分配表类型支持功能的正确性。
(11)通过在dosfs文件系统中调用文件操作相关接口进行目录、设备、内存文件的创建、读写、删除、关闭操作,验证dosfs文件系统实现块设备的文件操作和目录操作功能的正确性。
(12)通过编程进行多任务读写操作,验证系统对多任务读写功能的支持。
(13)兼容广泛使用的多种块设备,如软盘、硬盘、闪存等,通过在各种块设备,如软盘、硬盘、闪存等硬件上创建文件系统,验证兼容多种块设备功能的正确性。
2.7基本I/O管理
I/O控制模块可以通过设备驱动表、设备表、文件描述符表、总线驱动支持、设备中断处理机制对上层应用程序提供统一的接口,支持对硬件设备的统一访问等[6]。
测试时应覆盖以下内容:
(1)创建一个或多个任务,调用I/O接口函数(open、close、read、write等)实现挂接设备、打开设备、读写设备、关闭设备、控制设备等功能,验证系统支持设备文件的统一操作。
(2)通过创建一个或多个任务,调用文件接口函数(open、close、read、write等)实现打开文件、创建文件、文件位置指针操作、读文件、写文件、修改文件的属性、获取文件的信息、删除文件、显示文件、截取文件大小等功能,验证系统支持普通文件的操作。
(3)通过创建一个或多个任务,调用目录接口函数(open、close、read、change等)实现创建目录、读目录、关闭目录、改变目录路径、打开目录、删除目录、获取当前目录、移动目录、重置目录等功能,验证系统支持目录操作。
(4)通过在系统初始化时实现三个基本的描述符:0(标准输入,stdin),1(标准输出,stdout),2(标准错误,stderr),以后打开的文件描述符从3开始,创建一个或多个任务,调用接口函数操作文件描述符,验证系统支持基本描述符统一管理。
(5)支持设置最大文件描述符,支持复制文件描述符,可通过创建一个或多个任务,调用接口函数设置文件描述符,来验证系统支持任务设置0、1、2的局部文件描述符和全局文件描述符。
(6)通过创建一个或多个任务,调用接口函数实现设备驱动注册、卸载、显示等操作,验证系统支持设备驱动表操作。
(7)支持设备驱动注册、卸载、显示,要求卸载的同时必须释放所占用的全部资源及设备表维护系统挂接的所有设备,根据主次设备号访问对应的设备驱动,可通过创建一个或多个任务,调用接口函数实现设备驱动卸载操作,并查看所有占用资源的释放情况,从而验证系统能否在设备驱动卸载的同时释放所占用的全部资源。
(8)支持显示当前设备表中已注册的设备信息,支持动态安装/卸载设备,可通过创建一个或多个任务,调用接口函数显示当前设备表中已注册的设备信息,验证系统支持显示当前设备表中已注册的设备信息。
(9)支持字符设备的输入/输出缓存管理,对于终端输入提供行规则和非行规则处理模式,其中行规则可以对特殊字符的处理规则进行定义,实现终端管理程序,可通
过创建一个或多个任务,调用接口函数实现动态安装/卸载设备,来验证系统支持动态安装/卸载设备。
(10)支持POSIX终端接口,包括设置波特率、设置奇偶校验、获取和设置终端属性、设置规范模式、设置原始输入模式、设置输入奇偶选项、设置软件控制流、设置原始数据输出、设置软件流控制字符、设置阻塞读写功能。
2.8标准符合性测试
操作系统标准符合性测试主要包括:
(1)POSIX标准符合性测试
操作系统的系统调用与编程接口支持POSIX规范的系统调用接口,保障应用的可移植性。具体包括:POSIX_DEVICE_IO、POSIX_NETWORKING等类。
(2)TCP/IP标准符合性测试
验证BSD SOCKET套接字的标准函数接口[78]。
(3)字符集标准符合性测试
验证国产操作系统数据及访问接口是否支持GBK、ASCII、GB18030、UNICODE,并验证在操作系统文件编码不一致时数据访问的正确性。
3结束语
本文研究了国产化嵌入式实时操作系统的测试方法和要点。对于国产化嵌入式实时操作系统的测试具有一定的参考价值。本研究成果已被用于多个国产化RTOS测试工作中,取得了较好的效果。下一阶段的研究方向为如何基于业界领先的风河公司的VxWorks操作系统的测试结果数据建立基准,对相关国产化同类产品进行评估。
参考文献
[1] 石亦磊.嵌入式实时操作系统测试方法研究[D]. 长沙:湖南大学,2011.
[2] 郁发新.常用嵌入式实时操作系统比较分析[J]. 计算机应用,2006,26(4):761 764.
[3] 董佳梁,李彦峰,杨秋松,等.面向航天系统的嵌入式操作系统实时性评测[J]. 计算机工程与设计,2013,34(1):114 120.
[4] 王远方.面向嵌入式操作系统的功能测试方法与实现[D]. 成都:电子科技大学,2011.
[5] 赵辉,刘志勤,胡宝成. 基于嵌入式实时操作系统的文件系统的研究与设计[J]. 航空计算技术,2004,34(3):73 75.
[6] 马超,尹长青. VxWorks嵌入式实时操作系统的结构研究[J]. 电脑知识与技术,2006(2):133 134.
[7] 何健.嵌入式操作系统网络协议栈测试的研究与实现[D]. 西安:西安电子科技大学,2014.
[8] 郝京宇,黄建华,贾风根. 协议栈的实现方法[J]. 计算机工程,2004,30(14):93 94.