敏捷软件开发对商业航天发展的启示

2023-07-03 07:03
军民两用技术与产品 2023年5期
关键词:代码文档火箭

郑 丹

中国酒泉卫星发射中心

近年来,国内商业航天得到了快速发展,短短几年内突破了入轨门槛,但是距离以美国太空探索技术公司(SpaceX)为代表的国外商业航天的发展水平还有较大差距。商业航天的发展必须依赖创新,怎样高可靠性、低成本地实现创新发展,是国内商业航天面临的难题和挑战。从SpaceX公司的扁平化管理、快速试错、迭代发展的运营模式中,能够处处看到敏捷项目管理的理念,其快速迭代模式也被国内商业航天公司借鉴。

敏捷软件开发技术不仅仅是一套软件开发方法,更是一套适用于复杂系统开发的原则、模式和理念。如果把“敏捷”简单地理解为“快速”+“低成本”,为实现“快速”而盲目删减测试项目,为降低成本使用工业级器件代替航天级器件而缺乏相应的容错机制,那么,由于航天工程的高复杂性和高风险性,只会给商业航天公司的发展带来不必要的挫折。事实上,“快速”+“低成本”是敏捷开发的结果,而不是敏捷开发的技术要求。因此,本文首先给出敏捷软件开发的核心思想“迭代开发”对商业航天型号发展的建议,然后详细分析了敏捷软件开发的“重构”“自测试”“简化文档”“消除重复代码”等技术要求对商业航天技术创新、管理运营等方面的启示。

一、迭代开发

敏捷软件开发为了应对迅速变化的需求并且实现快速开发,其核心思想是迭代开发。传统大型软件的开发方式是采用一个大周期进行开发,而迭代开发则将开发过程拆分成多个小周期,即一次“大开发”变成多次“小开发”,但是每次小开发都会新增一个用户可以感知的完整功能。迭代开发的好处,一是能够通过早期交付降低成本,二是能够及时了解市场需求,降低产品不适用的风险。

SpaceX公司采用了迭代发展的理念。例如它的终极目标是造一个大推力火箭,将人类送往火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭“猎鹰”1号,然后开发中型火箭“猎鹰”9号,再开发“猎鹰重型”火箭,最后才开发能够真正实现火星移民梦想的“超重-星舰”系统。它的每一次迭代都给予了市场(包括NASA)一定的信心,同时也为自己赢得了至关重要的订单。

国内某些商业航天公司在开发液体火箭型号时,没有从入轨火箭开始,而是直接研究运载火箭一子级的垂直起降回收技术,虽然从技术难度上来说垂直回收技术在某些方面比一次性入轨火箭的研制难度更大,但是仍然不能给客户提供完整的功能,因为完整的功能必须是建立在能够发射有效载荷的能力基础上的。即使掌握了先进的回收技术,也仅证明了具有显著降低发射成本的能力,仍需要继续攻关火箭入轨技术才能盈利,而且这种迭代划分也没有遵循从简单到复杂的研发顺序,因此,这种迭代划分的优势并不明显。

二、重构

在软件开发过程中,随着时间流逝和不断修改代码,代码结构逐渐衰弱,代码质量也慢慢变差。“重构”正好与此相反,在软件开发过程中持续地进行微小且保持软件行为的修改,依靠“从量变到质变”的原理,从根本上改善了代码的质量。由于“重构”过程中始终使代码保持可工作的状态,不需要花费额外调试的时间,因此“重构”的这种“小步前进”能够进展迅速。重构可以改善既有代码的设计,使软件更容易理解,也可以使增加新功能变得容易。

SpaceX公司的管理模式也在不断改进以适应其发展需求,比如它的质量管理部门就是在公司规模扩大后才成立的。建议商业航天公司更加重视产品研制过程中的技术积累和条件建设,对生产运营方式中任何不合理、不顺畅的地方进行持续性改进,重构的对象可以是航天产品的生产环节,如产品设计、关键技术、元器件、材料、工艺等,也可以是公司的运营方式,如审批流程、会议制度、供货方管理制度等。即使这个改变非常微小或者简单,只要能够降低成本,提高产品的可靠性,就可以改进,最终实现高可靠、低成本的目标,扎扎实实打造公司的核心竞争力。

三、自测试

在传统软件开发中,编写产品代码和软件测试是相互独立的工作,软件测试由专门的测试人员负责,只把测试结果反馈给软件开发人员。而在敏捷软件开发中,产品代码和测试代码都由软件开发人员完成,一起放在软件里,并且由软件自动测试,即软件对自己进行测试并检查测试结果。自测试的作用是快速发现错误并确保错误不再复现,是“重构”的重要技术保障。

商业航天如果采用迭代开发模式,那么在频繁的“重构”和“测试”情况下,必须提高测试的自动性和敏捷性。例如,增强元器件的自检测功能,不仅能够显著减少测试准备时间,还能提高排故效率;实现箭上自主监测和在线排故功能,提高飞行的可靠性;在故障排除后增加测试项目,确保故障永远不会复现,提高归零措施的有效性;面向风险开展测试,加强“边界条件”测试,提高系统可靠性;对供应商或第三方服务执行同样的测试理念和标准,防止“木桶的短板效应”。最后,测试体系也可以通过“重构”的方式逐渐完善,测试体系是否完备,可以借鉴敏捷软件开发的一个判断标准,即“是否具有这样的信心‘只要通过了测试,就能成功’”。

四、简化文档

在敏捷软件开发中,软件本身是最好的文档,这个“软件即文档”的敏捷要点使得软件开发不再花费精力维护大量的文档。但是,“软件即文档”敏捷要点的技术要求是软件代码必须像文档一样易读易懂。为了做到这一点,敏捷软件开发技术采取了数十种编程技巧和规则,例如函数命名规则、函数的长度、变量可见域、无重复代码等,来保证代码编写得像文档一样简洁明了,并且还通过“重构”手段来改善软件的可读性。如果仅仅为了节省文档编写和维护的时间,盲目取消文档而不学习和应用这些技巧和规则,那么即使阅读和修改自己编写的代码也很困难,从而使整个软件团队的开发走向困境。

商业航天的软件也可以采用“代码即文档”的技术进行编写,使代码具有易理解和易修改的特点,进而极大减少软件文档的数量和维护成本,提高软件开发的效率。这就要求整个编程团队都要遵守“代码即文档”背后的各种规则和要求。同时,也需采用比较简单的文档或者视频等手段记录主要思路等信息,便于其他人快速理解产品软件。此外,如果商业航天的测发软件也能够按照手机软件的开发标准,满足“无需操作手册也能无失误”的技术要求,那么就可以取消双岗制,提高测发工作的效率。

五、消除重复代码

敏捷软件开发的一个重要原则是“消除重复代码”。重复代码会带来很多麻烦,当代码中有一个错误时,很难找到全部的重复代码进行修改,而忽略了任何一处修改,就会使软件在实现相同功能时采用不同的行为,特别是这些重复的代码段还不完全相同的情形,需要逐一分析和修改,极大增加了代码修改的困难性。代码重复的原因很多,最常见的操作是在添加新功能时,复制一段类似的代码然后稍加修改,而避免重复代码的方法也很简单:坚持一个功能只使用一段代码来实现。

传统火箭研制使用了很多具有类似功能却在细节上略有不同的元器件,例如在一枚火箭上通常使用了多种型号的发动机或者多种型号的电池,虽然从总体设计上是最优的,但是在使用和维护上都需要重点关注各型号元器件之间的差异性,导致了额外的使用和维护成本。而产品的通用化设计,可以避免这些元器件的重复设计,并且能够以批量生产的方式分摊设计费,进而降低生产成本。例如,SpaceX公司的“猎鹰重型”火箭一子级的27台发动机状态完全一致,给装配和测试工作带来了极大便利,而二子级所用的发动机是一子级发动机的高空版,大大缩减了生产成本和生产周期。

六、结束语

通过对若干敏捷要点的分析可知,敏捷开发的背后是更高的技术要求和更多敏捷的测试,商业航天公司要想实现“快速迭代”发展,必须重视“正确的做事方式”,通过持续“重构”和“测试”,扎扎实实打造公司核心竞争力,逐步实现创新发展。商业航天的投资方也应从创新能力、运营管理模式、成本控制等多方面对商业航天公司进行评估,而不是单独从飞行试验的成败“论英雄”,否则商业航天公司很难实践快速试错、迭代发展的模式。

猜你喜欢
代码文档火箭
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
创世代码
创世代码
创世代码
创世代码
基于RI码计算的Word复制文档鉴别
透视奇妙的火箭
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
超酷的火箭