[]
        
(Showing Draft Content)

低代码开发支撑软件全生命周期

type=info

本页面中的内容基于Gartner企业级低代码开发平台的标准功能“全生命周期”、“多环境部署”和“自动运维”,可能并不适用于“表单驱动的低代码平台”和部分“模型驱动的低代码平台”。

经过数十年的发展,软件开发领域从“单打独斗”进入工程化阶段。围绕着软件开发和维护的全过程,行业积累了大量的实践经验,并形成了软件开发全生命周期等理论。作为软件开发技术发展的产物,面向企业级应用开发的低代码厂商将这些实践经验融入平台设计中,有效支撑软件全生命周期。具备这种能力的低代码开发平台可以帮助开发者复用来自高校的专业知识和来自开发实践的经验积累,轻松构建规模更大、更易维护的高价值应用,充分展现低代码技术的生产力优势。

一、软件工程的持恒

1960年代,计算机刚投入实际使用时,软件设计往往只是为了一个特定的应用而在指定的计算机硬件上设计和编程,采用了与计算机硬件密切相关的机器语言或特定平台的汇编语言。软件的规模较小,决定了当时的开发人员很少采用系统化的开发方法,开发软件的过程基本上同等于编制程序。一个人同时兼任设计者、开发者和使用者是当时的常态。随着高速计算机、通用操作系统和高级编程语言的出现,让计算机的应用范围迅速扩大。与应用范围同步扩大的,还有软件的规模和复杂度。经历了“计算机应用大爆炸”的兴奋后,人们发现大量软件的开发陷入僵局,和预期相去甚远。出现诸如软件开发进度难以预测、开发成本难以控制、功能要求难以满足、质量无法保证、产品难以维护等问题。1968年,图灵奖得主艾兹赫尔·韦伯·戴克斯特拉在NATO在德国召开的国际学术会议上,首次提出了软件危机(software crisis)的概念,认为现有的软件开发方法已经无法适应新的需求,并在随后的两年时间里连续召开两次会议,明确了改变软件生产方式,建立软件工程的理念。

作为一个新兴的工程学科,软件工程主要研究软件的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件成本、改进软件产品质量、提高软件生产率水平的目标。软件工程学从硬件工程和其他人类工程中吸收了许多成功的经验,明确提出了软件生命周期的模型,发展了许多软件开发与维护阶段适用的技术和方法,并应用于软件工程实践,取得良好的效果。软件生命周期是指软件从产生到成熟的全部过程。软件工程着眼于软件生命周期,将其划分为若干环节,并针对各个环节进行有针对性的管理和控制,通过强化每一个环节的工作和检查,最终确保全生命周期的效率。

不同的软件开发方法模型下,软件生命周期中各环节的划分有着不同的标准。目前主流的软件开发方法有CMM模式和敏捷模式两种,敏捷模式是基于CMM模式改进而来。软件工程是由软件本身的复杂性和维护性等内生要求决定的,与开发技术无关。不论采用什么开发技术,开发团队都需要遵循软件工程的基本原则,不能聚焦于单一环节,而是站在软件全生命周期的角度,全面提升项目管理能力,以确保软件达成各种技术指标要求。

1.1 典型的软件生命周期(CMM模式)

环节

主要工作

产出

需求定义

确定系统范围,澄清需求细节

需求说明书

设计

完成系统架构、数据结构、业务逻辑和界面交互的设计

产品设计说明文档

实现

将设计转化为可执行的代码,通常包含单元测试环节

代码和相关文档

集成与测试

将代码编译成模块,并组装成为系统,针对模块和系统进行人工测试和自动测试

经过测试的文件(包含软件包和文档)

移交与维护

将软件移交给客户,并进入维护阶段

用户可用的软件系统

1.2 典型的软件生命周期(敏捷模式)

环节

主要工作

产出

需求分析

分析用户故事,通过原型等工具,明确需求范围和关键流程

PBI(产品开发项目)文档

设计

将需求拆解为数据结构、业务逻辑和UX设计要求

设计文档包(部分项目会产出原型)

开发

将设计转化为可执行的代码,通常包含单元测试环节

代码和少量必要的文档

测试

自动化完成编译,进行人工测试和自动测试

经过测试的文件(包含软件包和文档)

部署

将程序部署到全部或部分生产环境中

用户可用的软件系统

反馈

征集用户对产品的反馈

用户故事

二、低代码触发软件工程的嬗变

生产力决定生产关系。软件开发技术的进步会对软件工程理论的落地方式带来影响,软件开发生命周期也需要随之进行删改。这种删改需要遵从管理学的基本原则,即简化、合并由开发工具自动完成的部分,强化和聚焦人工操作的环节。

2.1 可视化设计体验

软件开发进入低代码时代,大量的手工编码工作被可视化操作所替代,为软件开发模式带来了创新性发展。

  1. 可视化开发:开发者通过托拉拽的形式,在低代码工具中可视化的创建出直观可见的页面、业务逻辑、工作流和数据服务;低代码工具则将这些可视化的内容自动生成源代码。这种可视化的开发方式,一方面成倍提升了软件开发效率,大幅缩短了从开发到可执行应用的交付时间;另一方面,也让更多人可以直接通过可视化的元素而不是代码,看懂程序的运行方式,更早参与讨论和评审。对于绝大多数应用场景来说,低代码开发模式下的设计阶段即涵盖了开发阶段的绝大多数工作,开发阶段可以与设计阶段合并,甚至可以将需求分析中的原型开发部分也纳入到设计中来,以缩减需求分析的占比。

  2. 可视化部署:此外,随着DevOps相关工具和方法论被引入低代码领域,部署工作也从手工编写脚本、修改配置文件变成了低代码工具上的可视化操作。当开发者进行Build / 生成和发布时,参数配置、应用部署脚本生成、数据库差分升级脚本生成、各脚本的执行与结果监控等都交给低代码平台自动完成,真正实现“ClickOnce / 一键发布”。这意味着部署升级工作的在软件生命周期的占比也会显著下降。

2.2 自动化代码生成技术

大量自动化代码和脚本生成技术的引入,让低代码时代的软件全生命周期在传统编码开发的基础上有所改变,从实践经验上看,主要的变化如下:

  • 需求分析阶段,开发方可将需求分析的重点定位于项目范围界定、关键业务流程梳理和项目计划上。不再启动“可丢弃”的原型设计工作。

  • 将设计和开发阶段合并,开发方可直接基于低代码平台上的可视化设计界面,对开发成果进行讨论和检查,不再需要专门的设计阶段,做到设计即开发。因为开发速度得到了成倍提升,开发方需提升迭代速度,争取在第一个冲刺即拿出可以和需求方沟通的可运行应用。与原型不同,此时的应用不会被丢弃,而是作为最终成果得到保留。

  • 低代码平台提供了大量开箱即用的组件,设计和开发过程中的人工操作大幅减少,这通常意味着投入测试的应用质量比传统编码开发更稳定、Bug更少。开发方可酌情缩减测试投入,进一步提升交付速度,缩减成本投入。

  • 部署阶段的大量人工操作被可视化操作替代,开发方一方面可以缩短部署阶段的时间计划,另一方面也可以更方便、更快速完成测试环境、仿真验证环境、线上验证环境的构建,进一步细化发布测试和验证测试的流程,提升项目的可控性。

三、支撑软件全生命周期的低代码

低代码对软件开发全生命周期进行了优化,在保证工程管理和项目质量可控的前提下,最大限度缩短了软件项目的研发周期。正在使用编码开发的团队向低代码转型时,团队可以沿用现有的大部分管理工具和方法论,只需将IDE等工具替换为低代码平台即可。


低代码和编码开发对比图

  • 需求分析阶段,项目售前或产品经理可以直接使用低代码快速完成原型构建,和客户做交互确认,这些原型中的页面部分可以直接沿用到后续的开发中,不像用Axure那样被抛弃。

  • 详细设计阶段可以与开发阶段合并,因为业务逻辑本身就是可视化编排与展示的,可读性好,可以直接用来做评审,真正做到敏捷开发理论替代的“代码即文档”

  • 开发阶段,不论是页面还是业务逻辑,都可以做到所见即所得,这意味着,开发者在开发中关注的是“结果”(如页面长什么样)而不是“过程”(如如何渲染出这个页面),一方面可以减少开发的工作量,更重要的是形成一套技术规范,不同的人在面对同一个需求时的开发方式是非常类似的,这一点和编码开发就有很大的不同,在长期维护或人员交接,都不会像编码开发那样充满风险

  • 调试阶段,低代码平台会自动生成执行日志,让开发者可以清晰的看到程序的实际执行步骤,以及每一步中各参数的变化,相比于编码开发的“单步调试”方式更节省时间

  • 部署阶段,低代码平台提供了可视化的一键部署和供持续集成使用的命令行,发布工作一键完成,配置项目少,出错概率低

  • 运维阶段,对于私有化部署,低代码平台可以适配现有的监控方案,比如用nginx生成访问日志,再使用ELK做日志分析;用zabbix或宝塔面板监控服务器资源占用等;如果选择了公有云的部署模式,这些监控和报警都是低代码平台的内置功能,无需配置,开箱即用

为了支撑上述环节,特别是设计与开发、测试和部署,开发团队需要采用低代码平台内置的版本和分支管理功能,或将低代码平台与码云、Github等成熟的第三方代码库进行集成。在代码访问权限、注释模板、pull/push规则、版本回滚操作、分支建立与合并等具体的工作方式上,低代码开发方式可与编码开发保持一致。

四、软件工程对低代码平台提出的挑战

根据权威行研机构的观点,低代码平台的最低标准为具备低代码能力(如模型驱动、可编程的可视化开发方式等),能用于开发包含有用户界面、业务逻辑、工作流和数据服务的完整应用程序。而软件工程和全生命周期对低代码平台在协同开发、版本和分支管理、部署、升级等领域提出了更高的要求。一款支撑软件开发全生命周期的低代码开发平台,需满足以下技术要求,建议将其纳入技术评估列表:

  • 内置或兼容主流版本管理工具(如git、svn等),提供可视化的签入、签出、回滚等版本管理功能,以及分支管理方案

  • 内置可定时执行或触发执行的CI/CD功能;或提供可以和第三方CI/CD集成的命令行工具(桌面版开发环境)或Webhook机制(Web版开发环境)

  • 内置可配置的多套应用和数据独立的运行环境,至少需提供开发环境、测试环境和生产环境(公有云部署);或提供可视化的应用和数据库部署能力(私有云部署/本地部署)

  • 内置可视化的数据库结构比对功能和差分升级脚本生成功能,提供可视化的数据库升级方案

五、总结

守正方可出奇。从软件的诞生到如今,凝聚了全球软件开发团队心血和经验的软件工程一直保持了旺盛的生命力,已经成为“开发一个软件需要哪些步骤”的标准答案。从传统的CMM模式到当今流行的敏捷模式,软件生命周期的定义在不断演化,覆盖范围越来越大,影响的人群也越来越多。进入21世纪后,可视化、自动化的软件开发技术和工具也让软件生命周期有了更有效的支撑,有效帮助了开发团队在生命周期中做到“不走样”。软件工程的发展与软件开发技术的进步呈现出了相辅相成的状态。低代码技术是软件开发技术发展的必然产物,是可视化和自动化从少部分环节扩展到全生命周期的必然结果。我们相信,随着低代码技术的发展,软件生命周期的覆盖范围会进一步扩大,让软件工程发挥出更大的价值。


扩展阅读