随着软件规模和结构复杂度的提高,软件开发过程存在的问题逐年上升,在近几年的军品软件研制过程中,软件开发过程延期、经费开支超出预算等情况比比皆是,甚至出现项目失败的极端情况,交付产品存在的软件缺陷和软件质量问题也时常出现。软件开发过程质量控制已成为系统中风险最大的问题。近年来,软件工程方法在军品软件开发过程中的重要性逐步被人们所认识,其中重要的一项质量控制手段就是由专门的软件测试人员开展的独立于开发部门的软件测试工作。通过软件测试来发现软件开发过程中的缺陷和问题,并通过各种软件缺陷和问题的解决以及相应的回归测试来提高软件质量。实践证明软件测试工作是提高软件质量水平的一种十分有效的方法。
由于军品实时处理等特殊性,嵌入式软件越来越多地用于军用装备中。嵌入式软件开发过程是一个软硬件相互支持相互作用的复杂过程,系统软件功能和性能的实现与硬件功能和性能的实现是捆绑在一起的,且当前军品研制过程大部分采取的是并行工程,软件开发过程中硬件平台开发过程同步进行,有时甚至软件编码完成时硬件还未完成研制。现有的软件测试程序和办法主要针对的硬件平台明确的独立软件产品,不能很好地解决嵌入式系统中软件硬件功能实现上相互作用的问题。因此需针对军品开发特点进一步明确嵌入式软件开发过程中软件测试工作的流程、要求和规范,以适应军品并行工程中嵌入式软件开发过程的特殊性。
1 嵌入式软件的特点
嵌入式系统开发过程通常是先分别进行软硬件的独立开发,硬件部分独立开发形成裸机平台,软件部分独立进行单元、部件、配置项开发编程,硬件平台测试通过后,将相应开发的软件在该硬件平台上进行集成,开展各项功能和性能调试。
在嵌入式系统开发过程中底层驱动程序、操作系统和应用程序的界线是不清晰的,根据需要甚至混编在一起。系统功能和性能要求必须在软硬件共同作用下才能实现,因此嵌入式软件开发过程是软硬件之间相互协调、互相反馈和互相测试的过程。同时由于嵌入式系统中软件对硬件的依赖性,软硬件开发各项功能和性能要求的实现需软件和硬件结合才能得到结果,这就使得嵌入式软件功能和性能的实现与外部硬件和设备联系紧密,在大部分情况下嵌入式软件缺乏继承性,软件与硬件形成一对一的关系,随着硬件的不断升级,必须不断地重新开发相应的软件。造成软件编程工作量大,继承性差,另一方面,由于硬件更新速度快,又存在着软件编制过程中缺乏硬件平台支持的问题,往往软件编程完成时硬件还在研发过程中,软件编程完成后还不能确定是否能实现产品的功能和性能要求,需要在硬件平台上完成相互的联调测试后才能最终确定嵌入式系统基本的功能、性能要求是否能实现。
2 软件测试过程中遇到的问题
从预防为主的角度出发,软件测试工作开展得越早对软件的质量控制越有利。
传统的软件测试工作分为单元测试、部件测试、配置项测试、系统集成测试四个层次,对可以脱离硬件平台的纯软件产品,这一测试方法无疑是可以实现的,但在嵌入式软件开发过程中,如何开展软件测试工作遇到了一些问题,主要问题有:
(1)在嵌入式软件开发过程中,由于产品功能性能的实现是软硬件相互结合的过程,在软硬件结合过程中会根据软硬件的实际情况进行大量的调整,在没有通过硬件平台验证以前单纯对软件进行正式合格性测试是没有意义的,但在贯彻预防为主的软件质量管理过程中又要求尽早安排软件测试工作,如何协调这一矛盾需要进一步的明确。
(2)对于重大修改或新研设备,由于算法、功能、性能要求没有在实际平台上进行验证,产品功能性能需进一步验证,其新开发的软件一些算法、性能需要在整机功能性能试验期间确定、验证;另一方面在C3I等控制软件开发过程中,由于各设备与指控中心均为独立开发,往往由于对接口协议理解的不一致性或协议的周全性不够,在系统对接联调过程中对软件进行较大改动,用早期的软件版本进行测试对实际软件质量起不到太大作用。
(3)在软件测试工作中单元测试、部件测试、配置项测试、系统集成测试等,每项测试中均包含有功能测试和性能测试内容,但在嵌入式软件实际开发过程中由于绝大多数装备在软件开发过程中只有单台套装备,没有测试平台,因此对嵌入式系统软件的功能测试和性能测试的安排在实际工作中无法实现,造成了诸多矛盾。
种种矛盾和问题使嵌入式软件测试成了无从下手的死循环:一方面要求软件必须经过单元、部件和配置项测试才能与硬件结合开展调试工作,另一方面由于软件单元、部件和配置项没有装入硬件实际平台的测试,又无法最终确认软件的功能性能是否符合要求,无法完成软件测试工作。
3 对嵌入式软件开发过程软件测试工作的过程分解
为解决这一问题,在贯彻海军装备软件质量管理要求和软件质量测试实施细则过程中,本着预防为主、实事求是的原则,针对嵌入式软件开发的特殊情况,综合考虑测试成本、时间、有效性,重新明确软件测试阶段与硬件研制阶段的对应关系,在软件开发过程中,根据软件开发过程实际情况,在承制单位软件测试工作中软件测试内容重新划分,打破单元、部件、配置项测试界限,各类测试不一刀切,各部分交叉分批进行,以推进软件测试工作的进展,提高软件开发质量水平和过程控制能力。
具体方法和思路:
(1)对软件测试项目分类,打破原先单元、部件、配置项测试的过程模式,除按软件测试要求中将软件测试工作分为单元测试、部件测试、配置项测试、系统集成测试四个过程外,再将单元测试、部件测试按静态测试、动态测试两部分进行区分,具体分类见表1。
(2)对单元测试、部件测试中凡能脱离硬件平台进行的软件测试工作,如文档审查、代码审查等,统称为静态测试,这部分测试内容均应尽量安排在软硬件联调前进行并完成回归。
(3)对在单元测试、部件测试中需结合硬件真实环境进行测试的内容如性能测试等,统称为动态测试,这部分测试内容根据设备是否存在硬件平台,是否属成熟产品等实际情况,可以安排在前期进行,也可与配置项测试、系统集成测试内容一起安排在软硬件调试完成,通过相关试验验证功能性能达到要求后开始。
各部分软件测试工作具体开展时机见表2。
4 结语
要做好嵌入式软件测试工作,即要贯彻预防为主的方针,按软件工程的方法开展软件开发和测试工作,又要综合考虑软件测试的成本、进度、风险、有效性等因素,以保证测试的可靠性。在实际工作中我们根据实际产品特点和软件开发过程,对通用的软件测试过程重新进行了分解和细化,将事前预防和提高软件测试质量,减少重复性劳动,提高工作效率等有机地结合起来,我们认为这会有助于进一步缩短开发时间,减少开发成本,进一步提高军品软件质量水平。
作者单位
1.海军驻南京九二四厂军事代表室 江苏省南京市 211100
2.海军驻北京地区电子设备代表室 北京市 100000