时间:2024-07-28
鲍冬梅,刘富荣,张慧勇
(中国航发商用航空发动机有限责任公司设计研发中心控制系统部,上海 201108)
商用航空发动机全权限数字电子控制(full authority digital engine control,FADEC)软件开发和验证目标均需满足RTCA DO-178C的要求。国外先进航空发动机机载软件的代码量约为百万行,设计保证等级最高为A级(即可能造成灾难性后果),成本约为数百美元/行。为了提高软件质量、降低研制成本,基于模型的软件设计(model-based design,MBD)技术成为机载软件研制的主流趋势。与传统的自然语言相比,模型将软件设计表述为可以执行的规约。通过模型仿真,验证设计的准确性和一致性,以降低后期测试引起的设计反复和成本[1]。
随着计算机技术的进步,航空机载软件实现的功能逐渐增多、规模不断扩大。软件项目已不可能由单人独立完成。软件开发逐渐过渡到了工程化、产业化的多人协同开发模式。针对机载软件的协同开发模式表现为以下3个部分。①软件开发组织由单一的软件工程专业人员演变为由不同专业背景的人员组成[2]。②软件开发由串行开发过渡为并行开发,在部分需求到位后即可开展软件设计和测试;与此同时,根据新的软件需求和测试过程中发现的软件缺陷,不断进行软件的设计更改。③软件开发过程逐渐规范化,开发过程和标准不断通过工具固化为自动化过程。
开发过程中,如何保证多人并行开展工作又互不干扰,如何有效控制软件技术状态,如何帮助设计人员将精力聚焦于设计工作本身、而不是工具的使用和流程的流转上,是多人协同开发过程中面临的新问题。航空机载软件协同开发策略能有效解决上述问题。该策略给出了基于ClearCase的工作空间设置、数据管理、标签管理、权限管理以及一些有利于协同开发的设计指导等,从多方面解决了上述问题。
航空发动机机载软件研制常用的工具包括需求管理工具DOORS、模型设计工具Matlab/Simulink或SCADE、编码和编译工具,以及自主开发的全数字集成环境、目标集成环境、配置管理工具ClearCase、变更管理工具ClearQuest等。软件研制过程中,均需通过配置管理工具ClearCase进行管理。
ClearCase由IBM公司研制。该工具提供了一个开放性架构[3],能够满足不同地域和规模的开发团队对软件版本控制的要求,近年来被广泛应用于航空机载软件研制。利用其提供的统一变更管理(unified changed management,UCM)模式,一方面将个人工作空间和团队集成空间隔离,减少了个人工作对项目技术状态的影响和相互干扰;另一方面提供了数据的自动提交和同步功能,可实现个人工作空间与团队集成空间的数据交互。其既可将个人的工作成果提交到团队的集成空间中,又可将集成空间的变更更新到个人的工作空间中,并记录下工作空间之间的数据关系[4]。
航空机载软件协同开发策略主要通过ClearCase UCM模式实现工作空间的构建[5]。工作空间分为3个层级,其设置如图1所示。
图1 工作空间设置示意图
各层级的作用和数据迁移关系如下。
①集成流。其用于存储和发布软件过程数据、建立软件标签,不开展任何研发活动。
②调试流。其在开发阶段,供软件开发人员开展软件设计、编码、集成和调试。开发人员同步集成流数据后,进行软件开发、过程数据的存储,并最终将过程数据提交到集成流。若需要多人同时开展软件开发活动,可根据参与人员情况设置多条调试子流,并由软件集成人员将不同调试子流上的调试成果更新到调试流。
③测试流。其在验证阶段供软件验证人员进行软件测试。验证人员同步集成流数据,用于软件源代码和模型验证、软/硬件集成测试等过程的开展和数据的存放。如果需要多人同时开展测试,可设置多条测试子流。如果测试过程中发现缺陷,先提交变更申请,在调试流完成软件修复后将数据同步到测试流,继续开展回归测试工作;直到完成缺陷修复和验证,将更改后的软件数据更新至集成流。
软件过程数据的合理组织和存放有利于过程数据的版本追溯和控制。这也是软件协同开发的基础。机载软件协同开发过程中,各级工作空间中的软件过程数据通过协同开发目录的形式存放和管理。为保证提交和同步时数据准确,要求每个工作空间中的协同开发目录结构一致[5]。协同开发目录结构如图2所示。
图2 协同开发目录结构图
协同开发目录结构中数据的分类原则是:①软件研制不同过程的数据隔离;②不同配置管理对象的数据完整。
各研制阶段和目录及存放数据关系如表1所示。
表1 研制阶段目录及存放数据关系表
标签用于标记软件产品的技术状态[6]。按建立时机的不同,其分为正式标签和非正式标签。正式标签用于提交软件测试前记录版本状态,需要提交申请才能建立;非正式标签用于标记开发过程中软件的版本状态,由开发人员自行创建。
标签的命名形式为:“软件产品代号_标签流水号”。软件产品代号与流名称一致。标签流水号分为三段,初始值为V0.00.00,第一段和第二段的数字用于正式标签,第三段的数字用于非正式标签。第二段和第三段的流水号为2位阿拉伯数字,从00开始递增。当其前一段版本号升级后,该流水号归零,重新从00开始递增。
协同开发过程中,过程数据在调试流、测试流和集成流之间同步和提交。通过非正式标签继承正式标签流水号的前两段,可追溯调试流/测试流与集成流的数据迁移关系。标签继承关系如图3所示。
图3 标签继承关系图
初始的软件标签为“集成流_V0.00.00”。
首先,集成人员将初始标签的数据同步到调试流/调试子流开展软件研制,直到软硬件集成调试完毕并建立标签,如“调试流_V0.00.03”。然后,集成人员将调试流的数据通过ClearCase自动提交到集成流,并在集成流确认数据提交无误后,申请建立新的正式标签“集成流_V0.01.00”。随后,软件研制进入测试阶段。
集成人员将“集成流_V0.01.00”的数据同步到测试流。测试人员开展测试验证活动,发现缺陷后开发人员直接在测试流上修改。测试和修改活动不断迭代,直到完成全部软件缺陷的修复和验证。此时,集成人员将测试流上的软件数据“测试流V_0.01.03”提交至集成流,并建立标签“集成流_V0.02.00”。验证人员确认“集成流_V0.02.00”和“测试流V_0.01.03”软件技术状态的一致性,如果确认过程中发现仍有缺陷或者需求变更,则继续在测试流中修复和验证,以此类推,直到验证充分。
为了控制软件数据状态、帮助设计人员将精力集中于设计工作本身而非工具使用和流程流转,对开发过程中相关人员的权限进行了约束,设置了项目负责人、配置管理员、软件开发、集成人员及测试人员等层级[7]。
首先,由项目负责人申请软件产品代号,由配置管理人员根据代号创建工作空间。一级协同开发目录由配置管理员创建,二级目录由软件集成人员创建并由ClearCase控制,不允许开发人员和测试人员修改目录结构。其次,正式标签的建立需由软件集成人员提交标签建立申请后,经配置管理员配置审核、项目负责人审批通过后,由配置管理员创建。软件集成人员负责非正式标签的创建,以及各个流的数据提交和同步。软件开发和测试人员只需聚焦于设计与测试工作本身,对所负责的文件进行检入/检出操作,不需要额外的工具操作和流程流转。
软件开发过程中,存在多个项目共用的算法和逻辑,应尽量将这些算法和逻辑提炼成独立于具体软件项目的通用库,并由专人进行设计开发、变更和维护[7],制定通用库的引用和升级规则,便于各个项目使用通用库[8]。ClearCase提供了组件引用功能,帮助项目引用某一版本的通用库数据。
为提高协同开发的效率、保证过程数据的一致性,应尽量减少多个工程师同时维护同一数据文件的情况。解决该问题的主要方法是合理设计软件架构,按照“功能高内聚、数据低耦合”的原则将功能分配到同一个C文件或者Matlab/Simulink模型文件中[9]。
此外,Matlab/Simulink提供了Model reference模型引用机制,以实现模型的协同开发。上层模型通过Simulink reference模块引用下层模型,建立调用关系;上下层模型彼此独立,在接口不变的情况下,不同层模型的开发工作互不干扰[10]。
中国航发商发根据航空机载软件大规模、高安全和高成本的特点,制定了基于ClearCase的航空机载软件MBD协同开发策略。通过多个机载软件项目的实际应用,证明了该软件开发策略可行、高效。采用该流程有利于加快软件研制进度,能够提升软件技术状态管控能力并降低软件研制成本。后续可进一步研究协同开发过程中ClearCase与其他开发、验证工具之间的数据交互策略,开展工具二次开发,加强工具间的集成度,提高协同开发的自动化水平,进一步提高研制效率。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!