摘要:在信息技术迅速发展的今天,嵌入式系统的应用日趋复杂,开发技术日新月异,硬件发展的日益稳定,而软件故障却日益突出,其质量引起人们的重视,对嵌入式系统的测试研究显得尤为重要。嵌入式软件测试由于其自身的特点使得测试较为困难。在嵌入式软件测试中,采用正确的测试方法和策略,可以提高嵌入式软件测试效率,避免目标系统的瓶颈。
关键词:嵌入式系统;软件测试;嵌入式软件测试
1、引言
随着数字化时代的到来,大量系统架构复杂、功能日益强大的嵌入式系统正不断进入市场,应用也日趋复杂,这对嵌人式软件的开发技术和测试技术提出了更高的要求。嵌人式系统的复杂性和集成度越来越高,其中的软件部分也开始在整个嵌入式系统中占有越来越多的比例,并经常实现硬件的功能。嵌入式系统的专用程度较高,所以对其可靠性的要求也比较高,为了保证系统的稳定性,避免由于其可能出现的失效而导致灾难性的后果,要求对嵌人式系统,包括嵌入式软件进行严格的测试、确认和验证。基于嵌入式软件自身的特点,如实时性(Real-timing),内存不丰富,I/O通道少,开发工具昂贵,并且与硬件紧密相关,CPU种类繁多,其缺陷不像PC软件的缺陷容易修补等等。传统的软件测试理论不能直接用于嵌入式软件测试,因此,研究嵌入式软件的测试方法和策略,对于提高和改善嵌入式软件的质量有重要意义。
2、嵌入式软件测试的基本方法
嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、可靠性、成本、体积及功耗严格要求的专用计算机系统。嵌入式系统的软硬件功能界限模糊,测试比PC系统软件测试要困难得多,嵌入式软件系统测试具有如下特点:
(1)测试软件功能依赖不需编码的硬件功能,快速定位软硬件错误困难;
(2)强壮性测试、可知性测试很难编码实现;
(3)交叉测试平台的测试用例、测试结果上载困难;
(4)基于消息系统测试的复杂性,包括线程、任务、子系统之间的交互,并发、容错和对时间的要求;
(5)性能测试、确定性能瓶颈困难;
(6)实施测试自动化技术困难。大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的重要的行业中的嵌入式软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。
在嵌入式软件测试中,既要考虑软件本身,还要考虑软件同硬件平台和操作系统的集成,同时还有条件苛刻的时间约束和实时要求,以及其他合性能相关的要求。
2.1 全数字模拟测试
全数字模拟测试是指采用数学平台的方法,将嵌入式软件从系统中剥离出来,通过开发CPU指令、常用芯片、I/O、中断、时钟等模拟器在开发主机平台(Host)上实现嵌入式软件的测试。该方法操作简单,适用于功能测试,是一种可以借鉴的常规软件测试方法。但是全数字模拟测试有较大的局限性,使用不同语言编写的嵌入式软件需要不同的仿真程序来执行,通用性差,实时性与准确性难以反映出嵌入式软件的真实情况,当并发事件要求一定的同步关系时,维护统一、精确地系统时钟,理顺时序关系相当困难。因此,设计一个能进行系统测试的环境代价太大,全数字模拟测试只能作为嵌入式软件测试的辅助手段。
2.2 交叉测试(Host/Target测试)
自从出现高级语言,嵌入式系统的开发环境和运行环境通常是存在差异的,开发环境被认为是主机平台(Host),软件运行环境为目标平台(Target),相应的测试为Host Target测试(交叉测试)。测试过程中,充分利用高级语言的可移植性,将系统中与目标环境无关的部分工作转移到PC平台上完成,在硬件环境未建好或调试工具缺乏时就可以开展,这时可以借鉴常规的软件测试方法。系统中与硬件密切相关的部分在Target上完成,用到的测试工具需要支持目标环境。最后,在目标环境中进行验证确认。交叉测试适用于高级语言,操作方便,测试成本较低,但是实时性受调试环境的制约,在目标环境中测试时要占用一定的目标资源。
3、常规软件测试方法
嵌入式系统中与目标环境无关的大部分测试工作可以在PC平台上完成,这就可以充分借用PC软件的测试方法。
3.1 静态测试和动态测试
静态测试(Static Test)包括代码检查、静态结构分析等,是指对软件文档或程序进行扫描分析,无需运行程序,与嵌入式环境无关。人工或借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处。
动态测试(Dynamic Test)是指选择适当的测试用例,实际运行被测代码,观察代码运行时所体现的功能、逻辑、行为、结构等,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。
3.2 黑盒测试和白盒测试
白盒测试和黑盒测试是动态测试的两种主要方法。
白盒测试又称为结构化测试,是一种基于结构的测试,主要进行软件的控制流测试(语句覆盖、分支覆盖等)和数据流测试。覆盖率和性能是衡量软件质量的重要指标,也是白盒侧试的主要内容。白盒测试主要测试依据是软件设计,它对软件内部工作过程的细致检查,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
黑盒测试又称为功能测试或行为测试,是一种基于需求的测试,目的是验证被测软件是否符合软件的需求。它着眼于软件的外部结构,不考虑程序的逻辑结构和内部特性,仅依据软件的需求规格说明书,在软件界面上检查程序的功能是否符合要求,以此判定测试结果的正确性。黑盒测试不是白盒测试的替代品,而是辅助白盒测试发现其他类型的错误。嵌人式软件的黑盒测试一般在嵌入式系统上进行,不需借助于测试工具和测试平台。
3.3 单元测试和集成测试
单元测试和集成测试是软件测试的两个阶段。
单元测试又称模块测试,是指依据详细的设计描述对每一个功能相对独立的程序模块逐个测试,多个模块可以平行的独立进行单元测试。所有单元级测试都可以在主机环境上进行,除非少数情况,特别具体指定了单元测试直接在目标环境进行。在主机平台上运行测试的速度比在目标平台上快得多,当在主机平台完成测试时,可以在目标环境上重复作一次简的确认测试,确认测试结果在主机和目标机上没有被它们的不同影响。
集成测试是指在单元测试的基础上,将所有模块按照设计要求组装起来进行测试,主要测试内容有程序模块间的接口参数传递、集成后的功能实现以及模块间的相互影响等。软件集成可在主机环境上完成,在主机平台上模拟目标环境运行,当然在目标环境上重复测试也是必须的,在此级别上的确认测试将确定一些环境上的问题,比如内存定位和分配上的一些错误。在主机环境上的集成测试的使用,依赖于目标系统的具体功能有多少。有些嵌入式系统与目标环境耦合的非常紧密,若在主机环境做集成是不切实际的。一个大型软件的开发可以分几个级别的集成。低级别的软件集成在主机平台上完成有很大优势,越往后的集成越依赖干目标环境。由于嵌入式软件最终要运行在目标环境中,所以必须在实际运行环境中,将嵌入式软件与计算机硬件、外设、某些支持软件、数据和人员等元素结合在一起,对整个系统进行的测试。
4、嵌入式软件测试策略
在嵌入式软件的测试过程中使用有效的测试策略,可以使开发的效率最大化,避免目标系统的瓶颈。
4.1 先静后动、从小到大、由黑到白
(1)先静态测试后动态测试
从代码规则检查做起,测试开展的越早,付出的代价就越小。静态分析简单、方便、成本低、见效快,能为动态测试打下良好的基础,从而大大降低测试的成本。
(2)先单元测试后集成测试
单元测试是集成测试的基础,单元测试得越好,集成测试的工作量就越小。
(3)先黑盒测试后白盒测试
先验证软件的功能是否满足需求,后验证程序覆盖率,补充测试。
4.2 质量分析,事半功倍
软件模块的逻辑结构能客观地反映出软件的质量,结构越“良好”,代码就越可靠。结构化测试是软件代码质量分析的好方法。由于代码复杂度与代码出错的关联性非常强,在测试工程中,充分应用结构化测试技术,从结构入手分析代码的复杂程度,可以指导测试的进行,指出代码质量改进的方向。
4.3 选好工具,抓好管理
工欲善其事,必先利其器。进行软件测试,通常工具是必需的,但不是万能的。根据测试的需要和测试工具的特长选择合适的测试工具,不但可以客观、准确的获得测试结果,还可以减轻人的工作量,降低测试成本。软件测试是一项长期化、系统化、常态化的工作,并且需要维护和更新,因此,需要对整个测试过程进行严格管理。
5、结论
嵌入式系统设计中,硬件集成度越来越高,软件的功能越来越强大,为了降低系统的成本,获得更大的灵活性,软件正越来越多地取代硬件,软件的重要性逐渐引起人们的重视。因此,进行嵌入式软件测试方法和策略的研究,能够对日益复杂的嵌入式软件进行快速有效的测试,提高软件测试效率,确保软件质量。