隗合建 /中国运载火箭技术研究院
2022 年,中国航天科技集团有限公司印发的年度质量工作要点中明确提出,要加速航天精益产品保证工作落地见效,补充建设相应的产品保证专业技术支撑机构。中国运载火箭技术研究院在三年质量提升工程中也提出,建立面向型号和产品的一体化、专业化产品质量保证队伍,完善产品质量保证标准规范,完善技术支撑机构的产品质量保证工作流程等明确要求。
软件产品是航天工程任务的重要组成部分,随着研究院新型号、新任务、新产业的不断增加,软件任务量也大幅增加,同时软件在航天工程任务中功能占比也呈现逐年增加的趋势,可以看出软件在航天工程中发挥了越来越重要的作用。软件产品的质量直接关乎整个工程研制的质量,因此需要建立符合航天工程任务特点的软件产品保证体系。
自20 世纪80 年代,美国航空航天局(NASA)就紧密围绕航天工程任务成功,将技术与管理有机结合,发布了一系列关于软件的文件,突出了软件产品保证安全性、系统性、规范化、专业性和独立性等特点,并随着工程应用实践不断更新。笔者通过对NASA 软件工程和产品保证实践经验的学习,结合目前我国航天软件产品保证工作的特点,提出了航天软件产品保证要准确把握航天软件安全关键的本质特征,紧密围绕确保航天工程任务成功的核心目标。采用技术和管理相结合的方法关注风险识别与控制,将产品保证与组织过程改进相结合,充分发挥技术支撑机构作用开展软件产品保证基础工作和型号软件产品保证,并通过信息化手段实现高效产品保证。
航天软件的本质特征是高可靠性、高安全性、高实时性,并与航天重大工程背景协同一体化。航天软件工程的本质特征是实现软硬件集成系统,软件需求通过试验逐渐完备,开发过程整体在遵循瀑布模型的前提下,具体研制工作快速迭代,实现航天工程任务圆满成功。
产品保证是对航天系统大型复杂工程研制过程中质量相关工作的综合。软件产品保证是为确保软件产品质量满足交办方的需求,而在软件产品生命周期中有计划和系统地采取一系列有关质量、标准、规范和过程的控制活动。
(1)软件产品保证的目标是确保航天工程任务成功
软件产品保证遵循系统管理、一次成功的理念,通过技术和管理活动控制产品质量形成的过程和要素,提高型号研制、生产、服务的效率和效益,确保型号产品完成任务目标。
(2)软件产品保证是技术和管理相结合的工作
软件产品保证不仅是质量管理、标准化工作,也是在软件生命周期中开展各项管理和技术工作的综合,具有明显的技术特征。产品保证队伍与设计、测试、质量管理队伍分离,同时强化产品保证工程师识别变化、把握关键的职责,实现对产品研制过程的全程监督把关。
产品保证工作的机制是全过程管控,自设计至测试、从自研至外协实现过程全覆盖,并在不同阶段、针对不同对象采取差异化管控方法,重点将传统的粗放式质量管理转向精细化,确保产品质量一致性和稳定性。
产品保证工作的配套建设主要通过人员的专业化、文件体系的规范化、制度标准的齐备化,将原来的经验式研制转变为知识型研制。以风险性、精细化、技术性优化管理过程,兼顾多接口、全过程、全要素的管理。
(3)软件产品保证关注风险识别与控制
实现软件产品保证过程中技术和管理相结合,最重要的方法是采用风险管理。对型号研制过程中的技术风险进行充分的鉴别、评价、预防和控制,保证航天软件产品安全、可靠、可用,能够完成规定的任务目标。产品保证的工作基础是科学配套的产品保证标准、制度体系,细致严谨的产品保证文件体系,以及行使预警、叫停职责的技术和管理融合的专业技术人员队伍。
(4)软件产品保证和组织过程改进
产品保证和过程改进均出于高质量过程产生高质量产品这一理念,施以有效的方法使安全关键软件万无一失。前者评判一个产品是否合格,后者评判一个组织的能力,两者密不可分。研制单位更关注组织本身能力的提升;航天重大工程更关注各研制单位提供的产品是否满足质量要求。因此,软件过程改进适合研制单位开展,软件产品保证适合工程型号推进。
NASA 实践表明,为了发挥质量与可靠性保障作用,有必要建立集技术和管理权威于一体的技术支撑机构工作体系,完整体现各级组织、型号及技术支撑机构相互结合的关系,并发挥技术支撑机构的独立监督、服务作用。
技术支撑机构需要统一部署,形成专业、技术上的优势,全面参与型号研制的策划与过程管理,制定软件产品保证工作计划,覆盖型号研制所有环节,发挥独立把关作用,将控制点前移,将预防为主方针落到实处,推动型号软件产品保证实施。
技术支撑机构是开展前沿性和基础性专业技术研究的权威机构,应总体掌控型号中的质量与可靠性技术基础研究需求,制定专业技术发展路径,提前筹划基础研究与能力建设工作,以满足型号研制需要。
技术支撑机构应对积累的数据进行深入分析,建立质量问题举一反三基线,将新技术方法、工具设备和管理模式融入到型号研制过程中,为型号研制流程优化、研制能力提升提供决策支撑。
(1)评测机构能力认证
航天软件在几十年的发展过程中提出了以评测促软件工程化的理念,软件评测机构在软件研制过程中发挥了重要的作用。软件评测机构均有擅长的测试领域,工程型号选择软件评测机构时,不仅要按照传统的嵌入式软件、非嵌入式软件、可编程逻辑器件进行评测能力认证,也应按照计算机、控制器、雷达、导引头、敏感器等产品进行评测能力认证,提升评测机构在特定产品领域的评测专业技术能力。
(2)举一反三基线和故障启示录
NASA 一直致力于航空航天的进步,这不仅体现在技术发展本身和技术著作上,还体现在技术史、经验总结等方面。NASA 出版的《工程中的经验教训》回顾了近60 年的太空计划项目,提炼升华为9 个工程准则以及27 个经验教训,几乎覆盖了技术攻关、项目管理、人力资源等航天系统工程的所有领域。
NASA 针对软件质量归零问题和典型问题,编制举一反三基线、故障启示录等代表性的经验教训总结报告,从系统需求、软件需求、源代码、测试用例、问题描述、问题机理、更改措施、经验启示进行全流程的总结,可供研制方、测试方参考借鉴。
(3)测试数据分析报告
航天软件较为复杂,涉及的研制单位、产品领域多,同时航天软件研制单位和产品领域又相对固定。通过对软件研制过程中的代码走查、开发方测试、第三方测试数据进行统计分析能够发现各研制单位、各产品领域软件主要故障模式,从而对“常见病”“多发病”进行分析,明确软件设计和测试中的关注点,优化测试方法,加强在系统试验环境、板级测试中验证软件主要功能,在仿真测试环境中针对典型故障模式做针对性测试,以便在测试时间短的情况下达到最佳测试效果。
(4)软件架构、设计准则、测试规范、测试集
NASA 发布的《飞行软件复杂度研究报告》对过去40 年的大量任务(包括已发射和未发射的)中的飞行软件问题进行了综合分析,分析飞行软件规模和复杂度的增长,提供降低管理复杂度的建议,提出解决软件复杂度问题只能依靠“最佳实践”,其中软件架构是缓解复杂度的关键技术手段,而构建参考架构是“最佳实践中的最佳”。
加强编译器、数据库等基础软件和飞行控制软件以及信息处理软件等应用软件的设计、测试经验固化,构建可重用的软件参考架构,形成设计准则、测试规范、测试集向工程师推送,便于员工培训、提供设计和测试指导,有助于快速抓住研制重点、建设测试环境、提升测试效率。
(5)软件研制工具体系建设
针对航天软件实时性强、硬件资源约束等特点,应研制代码编程规则检查、质量度量等静态测试工具以及目标码测试、全数字仿真等动态测试工具,支持空间单粒子翻转、长时间在轨运行导致的计时计数溢出、时序不匹配等航天软件典型问题的检查,摆脱软件测试对硬件环境的依赖,提高故障注入手段。
型号软件产品保证从型号研制方案阶段开始,根据任务要求和风险分析结果,确定关键节点和关键产品,按源头起控、过程监督、独立审查的原则开展活动,嵌入型号研制的全流程中。根据型号研制实际情况,软件生命周期往往有所裁剪,在开展软件产品保证的过程中,对于入口应坚持底线思维,确保满足产品保证工作的最低要求清单,逐渐进行迭代演化;对于出口应坚持红线思维,明确不能突破的负面清单,进行有限制条件的放行。
(1)研制单位能力确认
型号研制方案阶段应对研制单位通过GJB5000认证的资质能力进行确认,如果发现存在未通过GJB5000 相应等级认证的单位,应在研制过程中予以关注,在技术状态管控、配置管理、更改影响域分析等方面开展必要的软件工程化检查活动。
(2)软件研制要求制定
在型号研制早期,产品保证队伍应配合型号队伍制定软件研制有关的顶层要求。软件系统方案中应明确软件配套表、软件产品结构树、软件上下位通信信息流;软件通信协议包括内外部通信介质、数据格式和发送时序;软件工程化大纲中可考虑工程研制阶段与试验鉴定阶段要求融合;开发运行环境统型应考虑芯片、编译器、数据库、操作系统等使用统一版本,避免由于版本过多、版本不一致带来的研制风险。
(3)软件需求审查
从历年质量归零问题来看,软件需求缺陷问题每年占15%以上,主要原因是软件需求中关于安全性设计准则的描述笼统。在软件研制过程中,要加强软件需求验证,开展软件系统级时序时限匹配性的分析和验证。软件需求审查应有型号研制人员和产品保证人员参加,型号研制人员重点关注功能需求,产品保证人员重点关注安全性/可靠性设计准则、性能等非功能需求是否根据本型号的实际情况予以具体细化。
(4)代码走查
软件缺陷越早发现进行更改的成本越低。单元测试是发现早期缺陷的有效手段,但是往往投入不足。这种情况下,组织有经验的软件工程师开展代码走查是非常有效的手段。
(5)软件第三方测试
软件第三方测试是软件研制过程中的关键环节。一个工程型号中的各个软件第三方测试要求应横向一致,除了在依据软件需求规格说明进行测试外,还应按照软件故障模式库挖掘软件隐含需求,这就需要技术支撑机构对软件第三方测试过程进行技术审查。
(6)软件归零、举一反三、专项复查和独立评估
归零是航天行之有效的质量管理手段,为系统研究问题、积累知识提供了基本方法。软件产品保证过程遇到软件质量问题时,通过技术上的分析、管理上的改进,进行有针对性的举一反三,提高航天产品的质量水平达到系统预防的目的。
技术支撑机构要针对工程型号的具体特点,制定专项复查要求,由各研制单位自行复查,技术支撑机构予以确认。对于工程型号中特别巨大的风险,应该开展独立评估,技术支撑机构对系统需求、软件需求、软件设计、源程序、测试用例、测试结果等软件生命周期中的所有产物及其过程进行全面的审查。
(7)软件验收
软件验收是软件研制过程的集中体现,A、B级软件应独立验收,软件产品保证人员应参加软件验收,并确认研制过程中识别出的风险是否均已通过相应措施进行控制。
软件产品保证工作应依托信息化平台进行,将软件产品保证思想、质量控制措施等贯穿于整个软件研制流程。通过搭建信息化平台,可以为一定范围内的软件研制、管理人员提供软件研制过程中可用、有效的信息,统计分析研制过程数据、质量数据,获取软件设计准则、测试规范等知识,从源头提升软件产品质量。
部分软件研制单位构建了协同开发平台,系统设计人员、软件设计人员、软件测试人员、质量管理人员可以实时掌握软件研制信息,在系统设计初期准确把握软件实现需求。软件设计人员利用平台自动推送的设计准则、重用代码库快速实现软件功能模块并与系统设计人员、软件测试人员实现高效迭代;软件测试人员通过信息平台推送的通用测试用例、测试准则,对软件进行敏捷测试;质量管理人员通过共享的信息平台,准确把握软件研制进度,跟踪软件质量问题处理情况,及时总结并不断完善研制流程中质量控制点,协同实现对软件产品质量保证。
软件产品保证从基础建设到融合发展,是一个不断深化的过程。提升平台技术水平、扩大应用规模、纳入业务流程是发展重点,将数据采集、信息扩散、知识使用等环节逐步融入科研生产流程,实现产品保证要素的闭环管理,促进高质量经验知识的传递、激发、沉淀和积累,打造组织知识管理、项目协同推进、员工能力提升的一体化平台,实现知识型研制。