在传统软件开发领域里,要完成具备一定复杂程度的软件,通常都会由一个研发团队协作开发。软件复杂度越大,研发团队的规模也就越大。
为了让研发团队能够高效的进行协同开发,业务引入了优秀的代码版本管理工具,比如传统软件开发主流使用的代码版本管理工具是Git和SVN。
与此同时,新兴的零代码、低代码开发方式也正在快速崛起。
无论是国内阿里的宜搭和腾讯的微搭,还是软件巨头微软Power Apps和曾估值接近百亿美元的OutSytems,都已经在软件开发领域里占据了越来越重要的位置。
在国内市场,相比于定位在服务钉钉、微信生态的宜搭和微搭,网易数帆CodeWave智能开发平台直接定位在支撑企业自身数字化转型的软件生产全链路创新,一方面能够支持复杂的个性化软件应用高效搭建,另一方面还能够支持SaaS、本地部署和源码导出,贴合各类客户的部署需求。
针对大型软件开发,CodeWave设计了一整套完善的多人协作能力。通过这些设计,使用过Git/SVN的用户,可以直接把已有的能力和经验复用过来;而没有传统开发多人协作开发经验的新用户,基于低代码本身低门槛的特点,也可以快速直接上手进行协作。
产品生命周期不同阶段的多人协作模式
阶段1:产品从0-1开发
一个软件在刚开始开发时,并不存在线上稳定版本的代码运行问题。我们往往只需要考虑一个代码主分支,多位开发者在一个主分支上进行代码推拉合并,进行协作开发。
阶段2:产品已上线
当软件的1.0版本开发完成后,通常我们会在代码主分支上打一个版本标记(tag),然后将1.0版本的代码发布上线。
后续有了新的项目需求,我们就需要针对这个项目拉取一个专门的开发分支,开发者在这个开发分支上继续进行协作开发,和在主分支上的协作模式类似。
那么为什么需要拉取开发分支呢?主要有几点考虑:
确保主分支的代码质量。新项目开发的过程代码肯定是无法持续保证质量了,必须要在开发分支上完成开发和测试验证,才可以合并回主分支。
确保线上产品的运维和新功能开发可以并行。由于软件1.0版本已经在线上运行,难免不会出现bug需要紧急修复。这样我们可以直接在主分支上快速的修复bug,而不受到开发分支代码的影响。
如果有多个项目需要并行开发,还可以再从主分支上拉取不同的项目开发分支,以确保多项目的并行开发,且代码相互隔离,互不影响。
这也是目前大型互联网公司主流的协作开发模式。
阶段3:产品多版本并行
传统软件行业以本地部署交付为主,随着市场发展到一定阶段,产品需要面向不同大客户交付不能兼容的功能。这些情况在前期不可预知,架构设计上难以覆盖。最终,产品会被分化成多个不同的客户定制分支版本。
这种情况比较复杂,也往往会存在很长时间。笔者曾经在诺基亚早期支撑2G/3G的软件平台上维护过类似产品。
在这种情况下,产品往往要专门引入一类角色——SCM(软件配置管理工程师),来专门对代码版本进行维护,基于每个定制版本的生命周期建立一套复杂的代码合并规则。
比如,在A分支里发现的bug,需要在B和C分支单独再修复一遍,D分支已经宣布停止维护,就不需要再修复了。
CodeWave多人协作的特色设计
为更好地支撑以上三种情况下的软件协作开发,网易数帆在CodeWave智能开发平台实践中,在代码管理和代码合并两个方面分别采用了如下特色设计。
代码管理
副本隔离
和传统开发不同,CodeWave是基于B/S结构的web端IDE,软件代码并未以一个个文件的形式存放本地电脑里,而是以NASL(NetEase Application Specific Language)格式保存在服务器上。
每位开发者可以在同一个应用下创建属于自己的副本,就相当于给自己创建了一个云端的工作空间。副本隔离则支持将每位开发者的开发环境隔离开来,确保了各自代码的安全性。
副本可以拉取分支代码库上的代码,进行代码合并,并将合并后的代码推送到代码库里,这样就完成了多人协作。
多分支合并
除了主分支外,CodeWave支持创建自定义的开发分支。
副本可以切换到开发分支上进行代码合并和推送,以完成多代码分支下的协同开发。
应用模版支持代码复用
CodeWave还支持了给将开发好的应用导出成模版,并且给予模版创建新的应用。通过模版,一个应用就可以复制成多个隔离的应用,这样就可以满足不同客户定制版本的软件长期升级与维护。
代码合并
有协作经验的开发者都清楚,代码合并是一项非常重要,同时又很耗费精力的工作。
CodeWave结合低代码本来的开发特性,设计了业界领先的代码合并能力支撑。
组件粒度的代码合并
在开发公共页面时,不可避免会存在多个开发者协作修改同一个页面的情况。
为此,CodeWave设计了页面组件级的细粒度的合并能力,使得多位开发者可以精细化的进行代码合并拉取,最大化满足各类灵活的协作开发场景。
所见即所得的冲突解决
低门槛一直是低代码开发相对于传统代码开发的一大优势,这一优势很大程度上来自于“所见即所得”的方式。而对于代码合并过程中可能出现的代码冲突,CodeWave也采用了这种方式来解决。
简而言之,在CodeWave上,通过本地和远端代码的点选,开发者可直接在页面上实时看到选择的效果,并通过直观的对比,更加高效地完成冲突解决。
在功能之外
汝果欲学诗,功夫在诗外。多人协作开发从来都不只是一个软件功能的问题,更多的是一个软件开发项目管理能力。因此,项目管理也是低代码开发必须狠下功夫的领域。
项目管理的方法,已从最初的瀑布式开发进化到当今主流的敏捷开发。
而即便是敏捷开发框架也已经从满足10人团队的Scrum,演化到支撑更大规模研发团队的LeSS (Large Scale Scrum)和SAFe (Scaled Agile Framework)。
本文不去介绍项目管理方法,而是就多人协作开发里最关键的事项做一些提炼:
先做好架构设计
无论是传统软件开发还是低代码软件开发,架构设计都是必不可少的。没有良好的架构设计就进入开发,结果就只是无休止的bug和返工。
通过低代码进行软件开发之前,最主要关注几点:
做好数据建模。在开发之前一定要先做好数据建模,把底层的数据结构,表结构都确认好。后续所有的技术设计方案都应该建立在良好的数据机结构基础上,一方面在能够做出良好的技术设计,另一方面也避免了开发过程中过于频繁的进行表结构变更,带来更大的影响。
高内聚和低耦合的功能模块划分。功能模块的功能内聚,边界清晰,不仅仅开发起来效率更高,还能够为上线后的升级带来长久的收益。毕竟我们做的每一个应用,都希望能够有更长的生命力。
人员分工职责清晰,和功能模块关联。虽然CodeWave提供了所见即所得的代码冲突解决能力,解决代码冲突依然是个有可能会犯错的事情,所以最好的冲突解决方案就是预防冲突。在有了良好的数据建模和功能模块划分后,我们就可以将功能模块清晰的指派到人,降低多人同时开发一个功能/页面的概率,也就是降低冲突产生的概率。
开发过程中的重要事项
在软件开发过程中,我们需要注意以下几个重要事项:
做好代码备份。在开发过程中,定期进行代码备份是非常重要的。这样可以在意外情况下恢复代码,并保证代码的安全性。
高频提交代码。频繁地提交代码是保证团队协作顺利进行的关键。通过高频提交代码,可以及时发现问题并解决小冲突,避免大冲突的发生。同时,提交的代码也可以配合自动化测试,及早发现潜在的问题。
在副本上进行开发,在主应用上拉取代码和发布。多副本应该在同一个代码分支上协作开发,而主应用只专注于更新代码和发布制品应用。这样可以确保代码的统一性和发布的稳定性。
仔细处理冲突。当出现代码冲突时,我们需要仔细查看代码差异,认真处理。如果有疑问,一定要和相对应的开发者沟通确认。避免图省事的代码合并,给后续带来更大隐患。
One More Thing
网易数帆CodeWave智能开发平台定位于企业级智能开发平台,基于网易玉言NL2NASL领域大模型,现已支持自然语言编写代码、自然语言写SQL、代码解读等智能能力,并且更多AI加持的辅助多人协作的能力也已经在路上了。
网易数帆CodeWave智能开发平台将持续把AI能力全面集成到软件开发的全流程里,进一步加强企业数智化的产品支撑能力。
敬请点击“阅读原文”了解详情!
作者简介:何少甫,网易数帆CodeWave资深产品经理,多年B端经验,现主要负责CodeWave AI智能编程、NASL语言编程实践相关的产品规划与设计。