工业软件类型众多,开发模式也不尽相同,常用的开发模式有瀑布式开发模式、敏捷式开发模式、螺旋式开发模式、微服务开发模式、云原生开发模式等。各种开发模式不是天然分割的,只是针对不同业务各有侧重,在不同的设计阶段根据市场情况、需求功能、团队能力进行融合应用。
一、瀑布式开发模式
在工业软件发展过程中,瀑布式开发模式是早期被广泛采用的软件开发模型,要求有明确的需求,按照需求一步步做好规划,每一阶段工作的完成是下一阶段工作开始的前提,每一阶段都要进行严格的评审,保证各阶段的工作做得足够好时才允许其进入下一阶段,它适用于需求明确的软件开发,如常见CAD/CAE软件中的求解器、编译器、工具箱等模块。
瀑布式开发模式为软件开发提供了流程化的开发方法,遵照线性顺序工作,如图2-2所示。
图2-2 瀑布式开发模式
二、敏捷式开发模式
敏捷式开发模式是一种应对快速变化的需求的一种软件开发能力。相对于“非敏捷”,它更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比通过书面的文档进行沟通更有效),能够频繁交付新的软件版本。这种紧凑而自我组织型的团队能够很好地适应需求变化进行代码编写和团队组织,也更注重软件开发中人的作用。
敏捷式开发模式采用迭代/增量开发的过程模型。它是一种以人为核心、迭代、循序渐进的开发方法。组织上,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备可集成和可运行的特征。时间上,相对于传统的瀑布式开发,迭代开发把软件生命周期分成很多个小周期(一般不大于2个月,建议2周),每一次迭代都可以生成一个可运行、可验证的版本,并确保软件不断地增加新的价值,敏捷式开发模式如图2-3所示。
图2-3 敏捷式开发模式
三、螺旋式开发模式
螺旋式开发模式将瀑布式开发模式和敏捷式开发模式结合起来,强调了被其他模型忽视的风险分析功能,特别适合于大型复杂的系统。
螺旋式开发模式尤其注重风险分析阶段,适用于庞大且复杂、高风险的项目,“螺旋模型”的核心就在于不需要在刚开始的时候就把所有事情都定义得清清楚楚。软件开发初期只定义最重要的功能并实现它,然后听取客户的意见,之后再进入下一个阶段。这个过程不断循环重复,直到得到满意的最终产品,如图2-4所示。
螺旋式开发模式的软件开发通常由以下4个阶段组成。
(1)制订计划:确定软件目标,选定实施方案,梳理项目开发的限制条件。
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险。
(3)实施工程:实施软件开发和验证。
(4)客户评估:评价开发工作,提出修正建议,制订下一步计划。
图2-4 螺旋式开发模式
四、微服务模式
微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的API(应用程序接口)集相互通信。
为了满足企业动态多变的业务需求、提高开发效率和业务扩展能力,软件工程的从业者在单体架构的基础上提出了面向服务的软件开发方法。这一新方法使用相互独立的服务作为构建应用程序的基本单元,可以在不影响系统运行的情况下对服务进行增删和修改,从而实现软件产品的快速构建和动态调整。此外,每个服务都可以选用最合适的技术体系进行独立开发,有助于提升软件开发和维护的效率。
微服务模式是面向服务软件开发的趋势,通常采用去中心化的服务管理方式,在传统面向服务开发模式的基础上进一步降低了系统的耦合度。微服务还充分借鉴了云计算、容器技术以及DevOps等新的实践方式,提高了每个服务的可伸缩性,能实现服务的快速部署和更改。
微服务平台开发基于微服务架构,微服务平台通过将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。传统系统架构如图2-5所示,基于微服务平台的系统架构如图2-6所示。
图2-5 传统系统架构
图2-6 基于微服务平台的系统架构
基于微服务平台的系统架构提供了基础组件,基础组件最初用于代码重用,功能相对单一且独立,在整个系统中的代码层次上位于最底层,被其他代码所依赖,所以说组件化指纵向分层。企业可根据提供的基础组件及核心业务需求,定制化开发出符合要求的业务组件,并在项目中实现高可复用性。
五、云原生开发模式
云原生开发模式基于云原生架构开发,云原生架构是一种创新的软件开发方法,专为充分利用云计算模型而设计。它使组织能够使用微服务架构将应用程序构建为松散耦合的服务,并在动态编排的平台上运行它们。因此,基于云原生应用程序架构构建的应用程序是可靠的,可构成一定规模和满足性能需求,缩短上市时间。
企业使用云原生架构能够在公有云、私有云或混合云等动态环境中构建和运行可扩展的应用。代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师们能够轻松地对系统作出频繁和可预测的重大变更。
通常,开发软件系统代码包含三部分,即处理业务逻辑的代码、第三方依赖代码、处理非功能特性的代码。这三部分中只有处理业务逻辑的代码真正产生业务价值,另外两个部分都只算附属物。软件规模越大、非功能特性要求越复杂,非业务代码开发量越大,复杂度越高,系统迭代会越来越缓慢,成本业务越来越高。所以,在软件规模较大、功能复杂的情况下又要保证敏捷迭代,就需要将非业务代码尽可能剥离出来,利用可靠的第三方托管服务来提升开发效率和系统质量。而云平台提供了用于处理非功能需求丰富的服务和组件,所以利用云原生架构即可充分利用云平台上的各类资源,可以很好解决这方面的问题。
综上,传统的研发设计类的软件如CAD、CAE软件标杆ABAQUS、ANSYS和传统的生产设计软件标杆SCADA系统都是以瀑布式开发模式对软件主体进行设计,但随着时间的推移和技术的进步,体积庞大的软件也不得不使用螺旋式开发模式或敏捷开发模式来应对模块化及定制化要求。现阶段云原生设计模式的推出,更是满足了云设计、云仿真、云工艺、云制造、云运营、云管理等需求,使得工业设计、生产、经营全面进入云原生时代。