张利娜、康冰、苏娟/北京航天发射技术研究所
随着装备自动化、信息化、智能化发展,软件在装备中起到的作用愈发明显,软件部署数量急剧增加,规模越来越大,复杂度也越来越高。为了实现专业软件领域的高质量、可持续发展,满足用户多样性定制化需求,同时实现项目快速研发,北京航天发射技术研究所以软件重用为切入点,深入探索软件产品化方法,建立了四层软件重用结构的软件产品研发体系,从而初步达到提升软件研制质量、提高开发效率、节省人力资源、缩短交付周期、降低开发成本的目标。
研究所以软件重用为切入点,经历了模块级重用、构件级重用、配置项级重用、平台级重用过程,建立了多层级软件产品体系。
为了应对用户需求的不断变化及急剧增加的项目研制任务,研究所从2011 年开始建立软件代码重用库,以专业领域为切入点,按照编程语言和使用场景搭建软件重用库框架,开展了函数级、模块级可重用代码设计及提取;后续逐步开展了基于软件驱动层、协议层和应用层的分层设计,开始软件构件级重用。编制软件可重用设计准则并使设计准则标准化,软件重用过程更加具有通用性;经过几年努力,重用建设取得初步效果,研究所项目平均软件代码重用率达到40%~50%,极大减少了软件代码的重复开发。
随着项目任务增多,软件构件级重用已不能满足项目快速开发交付需求。2015 年以后,结合研究所产品化工作,通过规划产品化发展路径,依托产品化通用单机的研制及使用,按照领域分析并规划产品化单机配套软件的使用场景,对软件功能、性能及通信接口进行统一化设计,并根据使用需求规划软件可配置参数及范围,开展软件配置项级重用建设。通用配置项级重用推动了系统统型设计,控制模式由分布式向集中式转变,以单机为单位的产品成熟度得到了大幅提升,极大减轻了项目软件调试及维护的工作量。
2019 年,研究所通过对多年软件重用库的建设效果进行总结分析,将软件重用层级划分为平台级、配置项级、构件级、模块级四个层级。将软件重用由单一设备扩展到软件研制平台及产品领域平台,通过横向以专业为单位,规划统一的软件研制平台,推进软件可重用设计框架的编写及使用;纵向以产品领域为切入点,提炼统一的软件产品平台,推进基于控制要求和系统架构的统型设计。
通用配置项层是四层软件产品体系中的第二层,对应软件产品货架。通用配置项层通过领域分析,统一考虑硬件选型、统一硬件端口资源分配、统一控制功能划分,统一对外接口,实现标准软件配置项,达到软件产品级重用。输出物包括需求说明、设计说明、代码、测试文档等等。通用配置项软件完成研制和第三方评测后,进行所级验收交付,进入储备库;通过项目验证考核,完成软件产品定型,进入产品货架;再经过多次项目任务考核不断提高成熟度。
从2019 年开始,研究所逐步开展软件产品型谱、软件产品树建设,以此为基础进行系统性的软件产品多级规划,推出软件货架库、储备库、零部组件库,覆盖产品生产、交付运行、维护保障多个使用场景的可重用软件产品。同时推出软件成熟度定级规则,逐步推向各级用户,鼓励用户选取成熟度高的产品,通过用户的反馈意见,逐步迭代优化设计,实现软件产品体系内部各级交互采用标准化接口,从系统层面向下推广覆盖全层级的软件产品重用。2020 年至今,通过逐步推进可重用模块及构件的开发及应用、通用配置项选用、可重用框架的选用、基本型的开发和应用,实现了覆盖项目研制全生命周期的软件产品化研发目标落地,并在推进过程中不断总结提炼经验,逐步开始转向基于软件可重用需求、软件集成方案及软件仿真测试平台的软件系统产品化研发道路。
研究所涉及的专业领域为信息与控制领域、电源及电机驱动领域、定位定向与瞄准领域。按照各专业领域特点,建立软件产品树。信息与控制领域分解为底盘控制、上装控制、信息处理、维护保障、仿真测试等五类系统平台;电源及电机驱动领域分解为供电配电、电源变换、电力驱动三大类单机平台;定位定向与瞄准领域分解为瞄准系统、定位系统、辅助驾驶系统等三类系统平台。每类平台下细分通用配置项,形成系列化产品树。
在各专业领域产品树基础上,建立四层重用产品结构,具体如下:
通用平台层是四层软件产品体系中的最上层,是系统级规划。某一类产品软件的通用开发平台,是与各专业负责系统(单机)产品化的设计协同规划,目标是系统级重用,带动配置项级、构件级重用。包括统一的系统设计架构、设计规范、设计标准、接口协议、通用配置项、软件通用架构、通用模块等。输出物是标准、文档、代码。
通用配置项层是四层软件产品体系中的第二层,对应软件产品货架。通用配置项层通过领域分析,统一考虑硬件选型、统一硬件端口资源分配、统一控制功能划分,统一对外接口,实现标准软件配置项,达到软件产品级重用。输出物包括需求说明、设计说明、代码、测试文档等等。通用配置项软件完成研制和第三方评测后,进行所级验收交付,进入储备库;通过项目验证考核,完成软件产品定型,进入产品货架;再经过多次项目任务考核不断提高成熟度。
研究所每年发布软件产品货架目录,并制作软件货架产品样本,供各项目直接沿用或通过修改配置参数的方式使用。研究所制定并发布了所标 准《 软 件成熟度定级细则》,每年据此开展软件产品成熟度定级及提升工作。
通用构件层是四层软件产品体系中的第三层,对应通用部件货架。该层实现特定功能的软件模块集或函数集,实现标准架构统一,达到部件级重用。通用构件包含软件框架、驱动层构件(与硬件相关、基本数据结构相关等)、领域共性构件(领域需要的基本构件,如CAN 网络)、应用专用构件(应用系统中特有的构件)。输出物包括使用说明、设计说明、代码、测试文档等。通用构件库首推软件通用框架的应用,框架提供软件重用基础的设计平台,在同类产品中,统一设计思路、统一内部接口、统一设计实现,达到对设计框架一致的理解。
通用模块层是四层软件产品体系中的第四层,对应部门级可重用模块管理库。通用模块即通用地实现特定功能的可执行语句集合的统称,如典型控制模块、数据处理模块、人机交互功能模块等,内部接口固定,可被同类开发平台调用,可用于跨产品跨系列的重用。输出物包含模块代码、模块说明、模块设计、模块测试文档。通用模块级特点是通用性好,重用灵活,可跨领域、跨系列重用。
图1 为控制软件框架,属于面向对象的框架,通用构件级产品。框架要点是将系统按照不同的功能需求分类组织成有序的层次,层级间保持松耦合。其中用户层由开发人员根据实际需求自定义设计,其余三层由框架提供,由可重用构件组成。
图1 控制软件框架
通用模块层是四层软件产品体系中的第四层,对应部门级可重用模块管理库。通用模块即通用地实现特定功能的可执行语句集合的统称,如典型控制模块、数据处理模块、人机交互功能模块等,内部接口固定,可被同类开发平台调用,可用于跨产品跨系列的重用。输出物包含模块代码、模块说明、模块设计、模块测试文档。通用模块级特点是通用性好,重用灵活,可跨领域、跨系列重用。
研究所每年更新并发布软件产品树,依据四层产品结构建立重用资产库,更新并发布软件重用资产目录,供型号设计人员出库选用。
研究所软件专业标准体系纳入GJB5000B 软件过程管理体系建设,提出了工程技术、组织管理、项目管理、配置管理、测量与绩效管理、质量保证等工作要求,同时细化了包括工程类、管理类和支持类三大类标准,覆盖软件生存周期模型各阶段。工程类包括工程设计类标准、配置项级应用类标准、构件级设计标准、模块级设计标准等。管理类包括航天型号地面设备软件产品成熟度定级细则、重用资产管理指南等。支持类包括通用软件产品代号编制规则、各配置库管理指南、各专业领域重用库管理要求等。
研究所在GJB5000B 软件过程管理体系的测量与绩效管理实践域文件中,提出“型号软件产品化率”“型号代码重用率”测量项,作为考察产品重用情况的重要数据。这两个测量项可基本覆盖通用配置项、通用构件、通用模块各层级的应用效果分析情况。“型号软件产品化率”用来衡量型号配套中软件通用配置项的应用效果,计算公式是:型号软件产品化率=∑通用配置项使用 次 数/∑型号配套配置项个数。“型号代码重用率”用来衡量型号配套中新研软件配置项使用通用构件和通用模块的应用效果,计算公式是:型号代码重用率=∑重用代码规模/∑型号配套交付代码规模。
研究所在软件重用建设中经过不断磨练、摸索,建设形成了产品规划、平台开发、应用优化、产品保证四个小组组成的通用平台产品化软件项目团队。在运行过程中,从规划平台、规划产品树、规划配置项、规划构件产品开始,各组成员通过持续迭代的方式推进平台化工作。通过产品在多个型号中应用,项目逐渐进入运行维护阶段,直至本平台产品体系被新技术替代。实际产品由型号研制团队维护,并向平台团队反馈应用效果,定制问题由平台团队协助型号研制团队解决,平台问题由平台团队分析升级后向各型号通报。
软件产品化研制流程按照规划产品体系、研制软件通用产品、型号选用三个阶段来执行,后续的迭代更新随着产品反馈给平台研制团队。其中,平台软件产品应按照瀑布开发模型设计,型号软件产品应用按照完全沿用、仅修改装订参数或适应性更改模型设计。
研究所在软件重用建设中经过不断磨练、摸索,建设形成了产品规划、平台开发、应用优化、产品保证四个小组组成的通用平台产品化软件项目团队。在运行过程中,从规划平台、规划产品树、规划配置项、规划构件产品开始,各组成员通过持续迭代的方式推进平台化工作。通过产品在多个型号中应用,项目逐渐进入运行维护阶段,直至本平台产品体系被新技术替代。实际产品由型号研制团队维护,并向平台团队反馈应用效果,定制问题由平台团队协助型号研制团队解决,平台问题由平台团队分析升级后向各型号通报。
重用资源在型号研制应用中,通过通用平台推广,提高了系统可靠性、软件成熟度;通用配置项级软件产品的直接沿用,减少了软件重复开发;软件框架的使用,达到接口标准化、设计统一化;软件的设计文档、代码、测试等多方面重用,减少了软件开发活动中的重复性工作,提升了软件开发效率及产品质量。
从重用资源推广角度考察重用资源库使用情况,以某型通用控制软件为例,控制软件已经应用在多个型号的多个通用单机上,将通用控制软件配置项的个数减少到个位数,软件研制周期大幅缩短,降低了研制成本。通用配置项级产品软件经过多个型号的验证,提高了软件成熟度和产品质量,进而提高了系统的可靠性。
研究所通过持续建设四层软件重用结构的产品化体系,形成了丰富的软件货架产品和重用资源,减少了代码重复开发,降低人力成本的同时提高了产品成熟度,能够平稳应对急剧增加的型号研制需求。在未来,研究所将重点关注软件需求与验证,基于通用配置项和通用构件开展共性需求和通用测试用例的关联开发。