老板:你来弄个团队代码提交规范
大家好,我是陈哥,今天聊聊禅道的代码提交规范~
背景
在《还不知道这个原则的程序员,要小心了》 的文章中,我提到了禅道的代码提交规范。简单来说,我们将工具融入到禅道团队的日常代码提交过程中,利用工具对流程、行为进行规范和约束。
接下来,我将从编码规范、测试规范等方面,和大家简单分享一下禅道团队的代码提交规范。为了方便大家了解和学习,大家可以扫码发送【代码提交规范】,免费领取禅道团队的代码提交规范。
一、编码规范
禅道团队规定: 开发人员每次本地提交(commit)时,变更行数不能超过20行。因此,大家一般采取小批量、多频次的方式提交。我们希望通过这种渐进式的代码改动,逐渐提高团队对代码提交规范的意识。
然而,在实际过程中,仅依赖团队成员的自觉性是远远不够的。因此,引入工具变得尤为重要,我们使用的是在自主研发的DevOps平台。我们在DevOps平台上增加了门禁。每当团队成员在本地进行commit操作时,就会触发hook,会对当前的代码进行diff检查。
如果变更的代码超过20行,团队成员的代码将无法commit。但如果某个开发人员变更了30行,然后又删掉了10行,那这次修改就算作20行。通过DevOps平台这类工具的硬性限制,禅道团队才能做好监督和约束。
此外, 团队成员在push代码时,禅道团队要求一次推送不超过60行, 结合前面提到的commit约束,也就是说每次推送不能超过3次提交。代码推送后,并不会存入代码库,而是发起代码评审(类似Gerrit)。人工评审通过后,代码才能保存到代码仓库中,与其他人的代码进行合并。这种方式适合主干开发,或者对代码质量有严格要求的团队。
其实,禅道团队的做法与 GitHub、 GitLab的流程有一定出入。GitHub是以PR(Pull Request)的方式来确保代码质量,但这种方式并不符合企业的实际流程要求,涉及过多的库 过多会花费较大精力。而GitLab是通多分支合并的方式实现代码评审,而我们会强制做事前代码评审,代码评审不通过就不入库。
在后续的研发管理中,我们还会考虑增加代码的覆盖率等要求,来不断完善和覆盖研发管理流程。
二、 测试驱动开发
禅道团队也曾做过TDD(测试驱动开发),在相当长的一段时间内,团队进行了大规模地单元测试补充。尽管最终全部补上了,但在此过程中,大家依旧没有形成一种自发自觉的习惯。
《勤训》写道:“无如人之常情,恶劳而好逸。”从人性的角度来说,人都是有惰性的。这种情况下,我们就必须要通过工具来强制规范大家的行为,达到提升效能的目的。
目前,我们通过工具强制执行单元测试:只有通过单元测试,代码才能提交。这包括小批次提交、强制性人工代码评审、强制性的调用本地测试代码检查等。
以禅道项目管理软件为例:
1. 集成了Git、Subversion、GitFox代码库,团队能够直接浏览和评审代码并针对代码提交任务或Bug,直接从代码层面跟进需求进度;
2. 集成了GitLab服务,GitLab用户关联禅道用户,关联issue到需求、任务、Bug、提交合并请求。
3. 集成了Jenkins服务,创建Jenkins构建任务,通过流水线进行自动构建,实现持续集成;
4. 支持SonarQube项目的维护和管理,在禅道中可以创建构建任务,并查看检查报告,让代码检测和问题管理更加高效便捷。
此外,我们还会强制性设计评审等流程。设计评审通过引导式表单进行,在后续我们也可能会加入流水线。
三、 禅道代码提交规范
在之前的开发环境中,禅道团队一直采用share+vim的方式。但vim对 competitor的支持相对较弱,如它仅支持编写代码,并没有聊天功能。鉴于此,我们的定制开发部门已切换到具有WAM模式的Visual Studio Code。经过一段时间的试行,我们发现效果还不错。
后续,我们会准备将整个公司都切换成Visual Studio Code,使用WAM模式,充分利用大模型的能力。另外,我们也会将这些集成到DevOps的流水线当中,并尝试利用大模型进行初步的代码评审。
总结来说,禅道团队的代码提交流程规范:执行强制性小批量提交,同时进行本地单元测试结果的检查,以及强制性的人工代码评审。实际上,在这之前,我们还存在一个强制性的设计以及设计评审环节。
具体的远程分支规范、Git仓库本地分支规范、标签命名规范等内容,我已经帮大家整理在文档中,大家可以备注【代码提交规范】即可免费领取。
希望我的分享可以帮助到你,也欢迎给我留言与我讨论。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
误删GreatSQL数据?别慌,Binlog来帮忙
误删GreatSQL数据?别慌,Binlog来帮忙 数据丢失是每一个数据库管理员和开发者都不愿面对的噩梦。然而,意外总是难免,当不小心删除了重要的数据,如何才能迅速而有效地进行恢复呢?在数据库中有二进制日志 (Binlog),它不仅记录了所有更改数据的事件,还可以帮助将数据库恢复到任何一个特定的时间点。本篇文章将带您深入了解如何利用 Binlog 来应对数据丢失问题,在面对数据误删时不再慌张。 启用 Binlog Binlog (二进制日志)的介绍在这里就不过多描述了,不了解 Binlog 的同学,可以前往GreatSQL用户手册中 GreatSQL 日志章节查看:(https://greatsql.cn/docs/8.0.32-26/2-about-greatsql/4-3-greatsql-binary-log.html) 为了利用 Binlog (二进制日志) 进行数据恢复,首先需要确保 Binlog 已经在 GreatSQL 数据库中启用并正确配置。以下是详细的配置步骤、状态检查方法及 Binlog 文件的存储位置和命名规则。 配置 Binlog 的步骤 找到并编辑 Great...
- 下一篇
Elasticsearch 8.16 和 JDK 23 中的语言环境变化
作者:来自 ElasticSimon Cooper 随着 JDK 23 即将发布,语言环境信息中有一些重大变化,这将影响 Elasticsearch 以及你提取和格式化日期时间数据的方式。首先,介绍一些背景知识。 什么是语言环境? 每次 Java 程序需要解析或格式化使用文本字符串的日期格式(例如,“Tuesday 16th July”)时,它都需要查阅一组内部表格,其中包含有关应该使用哪些字符串的信息,用于星期几和月份字段等。此信息取决于所使用的语言(英语、法语、阿拉伯语等),在某些情况下还取决于所使用的特定国家或地区。 受影响的不仅仅是日期 — 从数字格式、日历和时间格式到每个时区的名称和每个其他语言环境的所有内容都在这些表中。特别是,这还包括用于计算星期日期的信息 - 从年初开始计算的周数,而不是日历月。所有这些信息都打包到该语言的语言环境中。 Elasticsearch 如何使用语言环境信息? Elasticsearch 在 JDK 上运行。这意味着我们使用 JDK 提供的语言环境信息。每次你有一个解析文本日期或星期日期的日期映射器时,内部 JDK 语言环境表都会用于将这些格式...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作