01
美国对武器系统软件的看法
作者:中国航空工业发展研究中心 李亮
选自:空天防务观察
“软件和网络推动了美国军事部门的作战、训练和业务能力。在作战人员的武器库中,几乎所有武器都是由软件定义的,我们更有可能通过安装新软件而不是修改硬件来‘提高’系统的杀伤力。”
——美国防部作战试验与鉴定局2019财年报告
2022年2月,美国防部副部长凯瑟琳•希克斯(Kathleen Hicks)签署了《美国防部软件现代化战略》,该战略是2019年7月发布的《国防部数字现代化战略》的子战略,以2018年12月发布的《国防部云战略》为基础并取而代之。新的战略提出了“以相应速度实现软件弹性 交付”的愿景,指明了五项总体原则,强调了软件工厂、基于云,以及开发、安全、运维一体化(DevSecOps)框架等软件现代化思路,制定了长期目标与具体思路。
01
美国对武器系统软件的看法
在美国防部看来,软件已成为武器系统最重要的组成部分,其重要性不断增加。软件定义了武器系统在战斗中的观测、通信和作战的方式。软件开发过程最初的设计和采办决策往往具有深远而长期的影响,甚至影响了战争中武器系统的效能,也影响了随时间推进针对环境和需求不断变化的适应能力。
现在,武器系统提供的许多能力来自系统的软件,而不是硬件。相关以硬件为中心构建能力的思路正在大量的转变到以软件为中心构建能力的思路上。美国国防分析研究所2017年发表的一篇论文所指出“国防部的武器系统中以软件实现功能的需求正在爆炸性增长。与此同时,国防软件生产能力和工业基础能力增长得没有那么快。”
在新的武器系统中,软件已成为研发和鉴定的重要部分。不仅正在开发的新武器系统受软件影响,如F-16和F-18战斗机等传统武器系统的使用寿命能够超出设计寿命,也很大程度上依赖软件升级和改进。
美国防部和防务智库甚至提出了软件永存(Software never dies)、软件永未完成(Software is never done)、软件定义战争(Software Defined Warfare)的说法。并提出,为武器系统全寿命周期内改进软件创造条件是一项战略需要,可以确保武器系统在超出早期系统设计需求和规范的条件下,也能够利用软件开发实践持续升级系统能力,适应新的威胁和环境。
02
美国武器系统软件的状态和变化
最近40年,美国武器系统软件规模的增长非常剧烈,下图以航电软件为例展示了关键武器系统中软件代码行数的增长情况(单位为 千行源代码)。
航空电子软件中软件源代码行(SLOC)的增长情况
与此同时,武器系统中软件造成的风险占比也越来越高,根据美国防部2018年的评估,60%的武器系统采办项目中遭遇了软件引发的风险。这是主要是因为在构建武器系统的新能力时,尚未获得实际作战经验,不可能预计到所有的问题和需求,不止在基本操作方面无法全面预计,在作战概念、战术、技术和程序方面也是如此。
其次,软件本身非预期的相互依赖可能会产生复杂的意外情况,这类问题一般是由软件的底层体系架构引发。
早先美国军方武器系统软件采办的最佳实践通过在项目开始时详细说明软件的功能需求来降低风险(最佳实践一般指某种技术、方法、过程、活动或机制可以使生产或管理实践的结果达到最优,并减少出错的可能性)。
然而,当对武器系统进行测试、实验、验证时,通常都会识别大量额外需求,这就导致了大量的软件风险和不断的延期交付。
03
美国武器系统软件研发深受现代商业软件工程实践影响
1、敏捷开发模式
在过去20年间,商业软件开发实践经历了重大变化。2000年以来移动互联网的发展,使得软件企业无法提前设计和分析所有需求,也无法预测未来的安全和测试问题,这迫使业界寻找软件开发的新方法,因为等待需求确认就意味着失去市场。因此转而探索增量的、迭代的软件开发方法,随着时间的推移增量式的提升软件能力。
可以将敏捷模式和瀑布模式的对比,上图为敏捷模型,主张周期性的开展需求、设计、开发、测试、集成、反馈等软件研发活动,下图为瀑布模型,按阶段开展工作,等一个阶段所有工作完成之后,再进入下一个阶段。
软件行业经常使用管理学中的“最佳实践”一词来描述新的技术方案、模式或者路径 。当前商业软件开发的最佳实践已经从传统的 “瀑布式”软件开发模式(即先确定功能需求和规范、再编写软件,之后按照需求和规范测试软件)演变为敏捷(Agile)开发模式或者迭代(Iterative)开发模式。
和瀑布式不同,敏捷开发模式中,首先明确软件目标和部分特性,但并不定义明确而严格的需求。用户反馈用于确定每次迭代的目标(称为“冲刺”),从而明确最小可行产品(MVP)的定义和需求,以实现尽早交付,交付后再和用户一起反复迭代。开发团队采用冲刺、测试、评审、反馈等组织活动,在较小模块范围中开发、测试软件,集成部署后可以由用户重复增量的试用、评估和反馈。这种方法允许将更新和改进快速集成到软件中,在许多情况下,软件每天都会进行更新。
这种现代的敏捷开发模式,需要重新组织管理人员、开发人员、用户、运维人员,重新定义相关职责、关系、组织、活动甚至文化等管理要素。此外,还对软件本身和软件环境提出了新的要求:
(1)因为软件是持续变更的,允许不断的调整需求内容和需求优先级,在设计软件架构时就必须考虑允许这种变更。因此,必须将功能按照模块化分解,考虑软件功能的构成、耦合和扩展方法。有些商业公司会同时启动多个团队采用不同架构开发同一款软件,并在必要时再从纵深的角度考虑选择一个架构进行长期开发。
(2)软件的持续变更,就意味着持续开发、测试、试用、反馈、评定需求、开发……的周期性迭代活动,测试意味着需要重新构建、编译和集成,用户的试用反馈则意味着重新部署,如果集成和部署过程过于复杂则会造成非常高的迭代成本,这就产生了当前的自动构建、自动测试、持续集成和持续部署工具,也促进了开发运维一体化框架(DevOps)等软件开发框架和软件工厂的发展。
2、开发运维一体化(DevOps)框架
DevOps的名称由开发(Development)和运维(Operations)组合而来,顾名思义,这种模式强调开发、IT运维和质量管理之间的协作,目标是更快更频繁地发布软件。因此,开发人员也可能负责运营,或者可能有两个独立的团队进行开放性沟通。无论具体如何管理和配置,都应该让团队感觉到对整个软件寿命周期的所有权。DevOps的整体价值观与敏捷一致,可以将DevOps看做将敏捷实践扩展到产品寿命周期的所有范围。
DevOps最大的两个特点是协作和自动化。在自动化方面,一个常见的DevOps原则是 “基础设施即代码”(Infrastructure as Code),这意味着对操作环境的管理与代码相同,需要进行版本控制、自动化和持续测试。另一个常见的特征就是形成了针对开发软件的自动构建、自动测试、持续集成和持续部署的管道。
DevOps的目标是频繁的小版本更新,为了达到敏捷和快速的目的,一般采用以下原则:
流程自动化:DevOps团队希望尽可能频繁地发布软件,这需要自动化测试和开发、持续集成和持续部署交付)。
标准化环境:当新代码在操作环境中不能工作时,会出现许多互操作性问题。由于DevOps团队使用与运行环境一致的标准化环境开发软件并进行故障检测和排除,因此开发人员越来越熟悉此环境。标准化环境有助于解决这些互操作性问题。
微服务:为了实现软件的频繁发布,DevOps团队使用基于微服务集成的软件架构,微服务是小型、分离的软件组件,理想情况下独立于其他软件组件工作。
监测:DevOps团队负责运行和维护,因此团队需要持续监控生产环境运行的软件。频繁发布可以帮助团队定位问题版本所在,并快速解决。
DevOps框架也是一种开发模式,将敏捷思路纳入软件的全寿命周期,涵盖设计、开发、构建、集成、部署、运行、反馈等全阶段,DevOps更是一种模式和文化,而非严格的规范,有大量的支持工具和流程供企业选择
3、软件工厂
软件工厂也是一种创新的方法,可以帮助开发团队基于可重用流程和软件框架创建软件开发的流水线。通过提供一系列资源、工具,并采用和执行相关规范,软件工厂能够帮助开发团队重用模板、规范、实践路径从而实现规模化开发,实现更快的交付、更少的测试、更高的质量以及更好的可维护性。
在美国军方的研究中,将软件工厂定义为“低成本、基于云的计算环境,能够组装一系列工具,使开发人员、用户和管理人员每天能够在一致的节奏中协同工作。”
现代商业软件开发最佳实践同时使用敏捷开发模式和软件工厂,软件工厂的落地是一组软件工具,开发人员使用这些软件工具编写代码,确认代码符合规范和相关要求,程序员与开发团队的其他成员协作,自动化的构建、测试和记录过程进度。这样,开发团队就能够在用户频繁反馈的情况下进行迭代开发。此外,商业机构还使用了一些新的工具和技术并将其规范化应用,包括:
规模自动化
在产品的整个生命周期内持续开发
提高计算能力并降低计算成本
静态测试、动态测试和模糊测试技术,支持大量自动化软件测试
开源,利用开发人员社区来创建可重用的组件和工具
该图为某软件工厂思路架构图,软件工厂与开发模式的不同在于,开发模式一种文化、组织方法和工具,软件工厂则是开发模式的彻底贯彻、规范化和规模化
04
美国武器系统软件研发的现状和变革
1、美国以前的武器系统软件采办过程
在过去15年间,商业软件开发经历了重大变化,而武器系统软件的开发则继续使用1970年代至1990年代开发的技术。美军多数情况下在软件采办中仍然使用较慢的传统瀑布方法,这种方法在多年前已经被商业公司抛弃。
美国防部传统的瀑布式软件开发过程一般为:首先明确并编制软件的最终需求,在项目开始时设定进度和成本,并在发布开发建议书(RFP)之前进行初步设计评审。达到里程碑B和完成合同授予后,也完成了软件各部分的源代码行数(SLOC)的估算,以此确定资源来开发软件。经过5-7年的开发周期后, 进行系统测试和缺陷修正,最后正式作为产品发布并部署。
美军传统的瀑布式采办流程
2、美国对军用软件引入现代开发方法的认识
2017年以来,美国防部、美国国防创新委员会、美国政府问责局以及美国国防授权法中陆续发布一系列文件,旨在推进在武器装备系统软件采办中引入现代化方法。明确了对瀑布式方法缺点的批评,和对敏捷式方法、软件工厂等现代方法的认可。
首先因为采用敏捷方法的商业公司都高度评价这种方法带来的回报,而敏捷模式的一系列方法已经成为商业软件开发的标准,从微软到亚马逊,从谷歌到脸书,包括传统IT企业IBM也转而使用这种方法。与此同时,却没有商业公司从敏捷方法反向过渡到瀑布方法。
其次,因为缺少权威的或明确的数据能够明确说明敏捷等现代软件方法的优势,2016年开始,美国军方不同的部门和研究机构对敏捷开发方法进行了评估和实验。比如,2018年财年美国国防授权法(NDAA)中就明确要求启动2个敏捷软件试点,涉及到陆军的综合防空导弹防御(IAMD)、空军的F-22能力管道、海军的海上战术指挥与控制(MTC2)等14个项目。此后,包括美国防部负责采办和维护的副部长、美国防部创新委员会、美国政府问责局等机构对相关的项目进行了评估,这些评估和实验项目验证了在商业机构采用敏捷式开发实践所带来的好处。并认为,在许多情况下,采用敏捷、迭代开发方法能够使国防部和国防承包商受益匪浅。
第三,美国防部认为并不是所有的项目都很适合敏捷或迭代的开发方法。如发动机数字控制系统和寿命将终止的遗留平台等,未必能从敏捷开发中受益。固定硬件平台的控制系统在寿命周期内很少变化,而且有些软件往往有相关的操作限制也不建议改变。然而,即使这样的系统也会受益于现代软件工厂所鼓励的自动化构建和测试。
美国防部认为,敏捷方法的主要好处是能够快速、连续地捕获软件缺陷,轻松集成新代码,并在整个应用程序开发过程中获取用户反馈。武器平台任务软件、电子战、通信、雷达和发射系统等软件都能从系统能力的持续改进和扩展中获益,这对于创造战术优势和应对战略突袭至关重要。并认为电子战领域的软件尤其如此,因为在电子战中,快速的软件改进能够在有限的作战周期内部署新的探测能力从而形成优势。
3、美军不断鼓励和牵引敏捷开发模式的应用
从2018年开始,美国防部不断推进武器系统软件采办中现代工程实践的应用,其中最重要的就是敏捷开发方法。这在2018年之后多年的国防授权法案中都有体现,依据该法案,在美国政府问责局每年的武器系统采办项目评估中,都会针对所有项目的软件现代化实践进行专项评估,同时给出建议。在国防授权法和政府问责局的要求和建议中,现代开发方法的定义还比较开放,极限编程、KanBan、Scrum、DevOps、精益软件开发都算作是广义的现代软件开发或敏捷软件开发方法。
到2022年,美国军方项目中使用敏捷等现代软件方法的项目占比已经很高。
现代软件开发方法的使用:美国政府问责办公室2022年调查了59个重大国防采办项目(MDAP)和中层采办项目(MTA),其中有39个项目报告使用了至少一种现代方法。中层采办项目中使用现代方法的频率高于重大国防采办项目,19个中层采办项目中有15个(79%)使用现代方法,而40个重大国防采办项目中有24个(60%)使用现代化方法。
工作软件的尽早和持续交付:现代软件开发方法(如敏捷)强调尽早和连续的软件交付,以及快速的周期性反馈,以便持续评估软件的功能、质量和用户满意度。连续交付的频率在商业界能够达到每2周一次。
美国防部认为考虑武器系统的安全性要求,6个月至1年交付一次软件更为合适。在美国政府问责办公室调查使用现代软件开发方法的39个项目中,有22个项目在12个月以内向用户交付一次软件。但美国政府问责办公室仍然认为6个月到1年的软件交付频率不符合敏捷原则,不会从快速迭代反馈循环中获益。
美国政府问责办公室在2022年年度评估报告中调查了40个重大国防采办项目和19个中层采办项目中现代软件方法的应用情况
4、美军推进和规范化DevSecOps框架应用并建设推广“一号平台”
在实际推进中,美国防部开展了一系列行动。首先,由美空军牵头,推进“开发、安全和运维一体化”(DevSecOps)框架。美国防部总信息官已经签署正式文件将DevSecOps框架视为现代软件开发实践的主要参考框架。此后,在空军部的牵引下,建设了PlatformOne产品,被美国防部授权在美国军方全面推广。
DevSecOps 是 DevOps 的增强,允许将安全实践集成到 DevOps 方法中。与传统的集中安全团队模型相反,每个开发团队都有权在其软件交付中考虑安全控制问题。安全实践和测试在软件开发周期的早期执行,符合安全左移的思路。其安全实践内容主要包括:静态测试、动态测试、微服务交互测试。
DevSecOps软件生命周期阶段如图所示,涉及9个阶段的迭代:计划、开发、构建、测试、发布、交付、部署、操作和监测,安全嵌入到每个阶段
“一号平台”(Platform One)即是指的美国防部DevSecOps服务团队,也是指的DevSecOps落地的软件产品。
作为软件产品,一号平台提供规范的DevSecOps工具和环境,能够创建了 DevSecOps 编码环境,可帮助软件团队将精力集中在研发、运行和持续改进其软件应用程序上。
根据报道,“一号平台”至少包括“铁银行”(Iron Bank)和“大爆炸”(Big Bang)2个工具,“铁银行”是软件容器仓库,提供超过800个开源和商业货架软件,软件已根据国防部规范进行了安全加固,“大爆炸”是DevSecOps规范化实例构建工具,能够支持移动端、云端和本地的快速DevSecOps环境构建。
5、美军推进软件工厂建设
2017年,美空军组建了美军第一个软件工厂——凯塞尔航线(Kessel Run),此后美空军的软件开发团队网络取得了巨大的发展,已经有遍布全美的17家软件工厂、3个软件工程小组和2个服务机构。根据2022年年初媒体报道,美国军方的软件工厂数量已经达到29家,除空军的软件工厂建设较早外,美陆军于2021年开设了第一个陆军未来司令部软件工厂,美海军2021年也开设了名为“锻炉”(Forge)的软件工厂和名为“黑珍珠”(Black Pearl)的服务机构。
近年来,美空军的软件开发团队网络取得了巨大的发展,已经有遍布全美的17家软件工厂、3个软件工程小组和2个企业服务机构(美空军图片)
在技术和方案上,美国防部不断提升“DevSecOps”生态环境和“一号平台”的先进性和完整度。并出台了一系列手册、工具指导和推进软件工厂的建设。DevSecOps和“一号平台”为软件工厂提供了用于开发、构建、测试、安全、发布和交付软件的流程、管道、脚本和工具,以最少的人工干预生成一组软件开发、测试、部署环境,自动化了开发、构建、测试、发布和交付阶段的活动。
美国防部DevSecOps软件工厂的参考架构图,包括用于开发、构建、测试、安全、发布和交付软件的流程、管道和工具
6、美国防部发布新的软件采办路径并实施
2020年1月,美国防部更新了其采办指令5000.02,确立了新的适应性采办框架(ADAPTIVE ACQUISITION FRAMEWORK )以及上层政策,以实现灵活和适应性采办。并将采办路径和职责的选择权分配给采办官员。
新的适应性采办框架建立了六种获取途径:
(1)应急能力采办(2)中层采办(3)重大能力采办(4)国防业务系统采办(5)软件采办(6)服务采办。
之后,2020财年的美国国防授权法案要求国防部编制软件采办途径。2020年10月,美国防部发布题为“软件采办路径操作”的指令5000.87,旨在集成现代软件开发实践,如敏捷、DevSecOps和精益实践,目的提供安全软件的高效和有效获取、开发、集成和及时交付。
根据两个指令文件,软件采办路径专为软件密集型系统设计,包含两条路径:用于部署在商用硬件和云平台上运行的软件路径,以及用于武器系统中的嵌入式软件路径,包括对嵌入式软件进行升级和改进。指令鼓励采办项目中将决策权交给最低实践级别,经常与用户接触,尽可能实现自动化,并至少每年达到关键采办项目里程碑。
在指令发布后,国防部、空军和国防采办大学都开展了相关培训,美国防部还发布了一系列指南,提供了技术工具和资源,并创建了软件现代化高级指导小组实现现代软件实践的过渡。