刘志蕾、张建国、王效亮、丁怀龙、宋茜 /北京精密机电控制设备研究所
软件开发过程需要按照一定的生命周期模型开展,一般软件开发包括以下几个阶段:需求分析、软件设计、软件测试、验收交付和运行维护。当从零开始进行开发时,有大量的重复性工作,例如:不同软件具有相同或相似的功能时,有重复性需求分析、编码、测试及重复的项目文档。
随着型号任务的不断增多,各型号配套伺服软件开发设计及测试任务也越来越繁重,每个软件设计/测试人员同时负责5 ~10 个型号软件的开发/测试工作。为了在有限的人力资源条件下,缩短型号伺服软件的开发及测试周期、降低开发难度的同时,进一步保证和提高软件设计质量,研究所开展了软件组件产品化工作。
目前,研究所伺服软件主要为伺服控制类、CPLD/FPGA 类和地面测试类三大类,3 类软件持续开展产品化设计工作,在产品级、框架级、模块级3 个层次形成系列化弹箭上伺服软件产品,按照软件工程化相关要求,完成产品化组件的代码走查、单元测试、开发方测试、第三方测试和系统联试,有条件的通过飞行试验验证,弹箭上伺服控制软件重用率力争达到60%以上。软件产品化规划框架如图1 所示。
图1 软件产品化规划框架
产品级组件主要是针对3 种情况:一是当一个型号完全借用另一个型号的硬件产品,且伺服控制类软件不做任何修改时,该伺服控制类软件属于产品级重用;二是当硬件处理器平台及其外围电路模块(主要是外围逻辑电路)相同或基本相同,所配置的CPLD/FPGA 软件可以实现产品级重用;三是地面测试类软件中完成特定功能、可在多个型号通用的软件也属于产品级重用。产品级组件可以实现目标码级的重用。
框架级组件主要依托不同的处理器平台来开展,一个处理器平台一般开发出一个通用框架级组件产品,所有以此处理器为平台的软件都重用此框架级组件产品。框架级组件产品一般为源代码级的重用。
模块级组件主要面向功能单元,当一个功能单元功能基本固定、性能基本一致的情况下,可以采取模块封装的形式形成模块级组件产品,模块级组件产品可以有很多,规模一般很小,主要是在软件研制过程中积累起来的。模块级组件产品可以实现目标码级或源代码级的重用。
研究所根据软件组件的设计、测试、使用等方面的特点,结合软件工程化实际,制定了《嵌入式软件组件产品化设计要求》和《基于源代码的软件组件产品化设计要求》2 项标准,用于指导和推动软件产品组件的研制和应用。同时,还制定了《软件工程过程方针及通用要求》《软件工程过程文档及记录格式要求》《软件研制过程》《嵌入式软件C语言编程要求》《可编程逻辑器件Verilog HDL 代码设计要求》《伺服软件静态测试规范》《伺服软件单元测试规范》和《伺服软件配置项测试规范》等多项标准,用于指导软件的编码、研制文档的编写和软件测试用例的设计,推动软件产品化进程。
对伺服控制软件进行功能分析和总结,各型号嵌入式伺服软件的主要功能为采用1553B/CAN/422 总线完成与控制、遥测系统的信息通信,并完成系统闭环控制及性能补偿功能。系统测试过程中,可以通过1553B/CAN/422 总线完成软件的升级及控制参数的更改。
按照软件功能的不同,软件模块主要有初始化模块、闭环控制模块、参数采集处理模块、通信处理模块和总线在线程序下载及参数装订模块等5 大类。初始化模块和闭环控制模块由于各型号使用资源或需求的差异,不能达到较高的通用性和一致性,设计为源代码模块级组件。参数采集处理模块、通信处理模块和总线在线程序下载及参数装订模块均涉及到软件内外接口,通过进一步分析,参数采集处理模块中常用的包括AD 采集和旋变位置采集处理,由于使用的通道和处理方式差异性较大,设计为源代码模块级组件。通信处理模块中各软件1553B 总线通信处理一致性更高,而CAN 总线和422 总线相对协议差异较大,不易统一,故1553B 总线通信处理模块设计成目标码模块级组件,CAN/422总线通讯处理模块设计成源代码模块级组件。总线在线程序下载及参数装订模块均为研究所内使用,协议可统一,故均设计为目标码模块级组件。
源代码模块级组件和目标码模块级组件的开发流程均按照软件工程化及GJB5000A 三级认证要求执行,其开发流程略有不同。目标码模块级组件开发流程见图2。目标码模块级组件开发工作包括以下几个方面:
图2 软件目标码模块级组件开发流程图
(1)目标码模块级组件开发时需要组成专门的项目组,项目组设置可以在任务书中明确,至少要明确项目负责人、任务书提出人员、需求分析及设计人员、测试人员和配置管理人员,任务书提出人员、需求分析及设计人员、测试人员要相互独立;
(2)目标码模块级组件需进行代码走查、静态分析、单元测试和配置项测试(需要有调用此组件的软件配合),组件更改后需要进行代码走查、静态分析、单元测试、配置项测试和回归测试,测试通过后作为组件产品发布新版本;
(3)目标码模块级组件的开发方配置项测试和第三方配置项测试应进行正式评审,一般与调用该组件的型号软件一同开展。
源代码模块级组件开发要求如下:
(1)源码模块级组件的源代码需从已交付使用过的软件中提取;
(2)源码模块级组件研制过程中输出2 个文档,分别是组件使用说明和组件源代码文件;
(3)源码模块级组件使用说明包含组件概述、组成、使用说明等部分;
(4)源代码文件格式由所使用的编译环境和编程语言决定,如.c、.cpp、.cs 文件等;
(5)源代码需开展代码走查,以会议纪要方式记录,走查问题的跟踪以会议问题的管理方式开展。
框架级组件开发要求如下:
(1)选择经过飞行试验考核的有代表性的各平台软件,整个软件工程作为框架级组件;
(2)框架级组件输出2 个文档,分别是组件使用说明和组件源代码文件。其他要求与源码模块级组件开发要求基本相同。
框架级组件根据伺服软件处理器平台和配套伺服系统的不同进行设计开发,目前研究所共有6 个框架级组件。
产品级组件开发流程与要求目标码模块级组件基本相同,不同之处在于地面测试类产品级组件无第三方测试要求。
针对3 种情况的产品级组件进行梳理,目前研究所可完全做到产品级重用的组件共11 个。
各类型组件均作为一个独立的软件配置项进行开发库、受控库和产品库的配置管理,严格履行软件审批,组件通过第三方测试后方可纳入产品库。
组件纳入配置管理后,通过评审后由组件设计人员纳入组织级组件库。纳入组件库时,需将组件源代码/目标码、组件使用说明和组件评审结论一同纳入。
组件重用人员必须清楚组件的功能、性能、接口等内容,使用前需要详细解读组件使用说明中的所有内容,对组件的重用依据,包括组件的使用方式、数据接口、协议接口、调用方法、编程环境、硬件平台、编译器选项等内容进行分析,确保满足组件的重用条件后从组织资产的组件库中出库。出库时需要写明应用的软件,经过审批和再次确认方能进行实际应用。
重用组件型号软件的相关设计文档中需对软件组件进行重用说明,并开展相应评审。
目标码组件重用时不允许组件重用人员直接调用软件源代码,不允许其更改源代码,不可对组件封装库进行更改。
续表表1 组件重用情况
源代码组件重用时,如重用的需求与组件的功能不同,可以将源代码复制修改后使用。
目标码组件和产品级组件如果确实需要添加新的功能、性能要求,需与软件组件项目负责人商议进行软件升级;其更改由组件的设计人员进行,不允许组件使用者对其进行更改,更改必需履行更改审批,必要时进行评审。组件更改时需从受控库出库,组件更改完成后必须经过相应的测试,测试通过后方可纳入配置管理。
截至目前,研究所共有各级别组件37 个,其中模块级组件20 个,框架级组件6 个,产品级组件11 个,且除地面测试类产品级组件外的其他30 个组件均已经过飞行试验的考核,各组件自纳入组织资产库后应用情况见表1。
表1 组件重用情况
研究所在2012 年之前,软件重用基本为框架重用,重用率约为17%;在线程序下载及参数装订组件成功应用后,重用率达到30%;1553B 总线控制软件组件成功应用后,重用率约为33%;近年随着源代码级模块组件逐步应用,软件产品化进一步发展,目前软件重用率可达65%。
各组件的成功应用实现了各软件设计人员的优势互补,集结每个设计人员的优势、经验和教训,消除了包括分析、设计、编码等大量的重复性工作,提高了软件开发的效率;同时避免相似程序模块的重复测试,减少了测试人员的工作量,测试效率可提高30%以上。软件组件产品化工作的开展对缩短软件开发周期、提高软件产品质量都有着极其重大的意义。