如何减少团队的低质量代码?

发表于:2021-4-20 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:戈登    来源:知乎

  工作至今我担任过 BAT 的中某家公司核心用户产品的一线研发,硅谷某公司的架构师,目前是某家 toB/toG 创业公司的技术负责人。随着工作经验的积累,我对代码质量的重要性认识的也越来越深。低质量代码除了引发可见的功能性 bug,更可怕的是使得项目难以长期维护,影响系统迭代效率。任何对技术有追求、对业务有责任心的 coder 都希望避免这种情况。
  如何提升代码质量,结合我自己的经验,有以下几个角度可以尝试:
  主动提升团队代码品味和架构意识
  代码是人写的,因此团队人员在主观上对代码设计的追求也是最主要的一点。最理想的情况是团队的人已经足够优秀,写出的代码质量很高。但是现实要面对的情况要复杂得多,团队的人员是会流动的,不同的人代码习惯也不一样,如何在这种情况下保证项目代码的质量,是每个 team leader 的重要工作。
  这方面有许多工作可以做:建立团队代码规范,利用领域驱动设计进行业务重构,要求单元测试提升单测覆盖率等等。然而,投入精力做这些往往对功能的单纯快速发布没有什么帮助,这些非功能性的工作需要 team leader 做好时间规划,有长期、全局意识。
  理解和思考需求
  在面对需求的时候,开发人员要多问问自己:是否充分理解了当前的需求?PM 提出的需求都是合理的吗?是否符合当前业务的核心逻辑?短期内开发某个功能上线是否能保证质量?如何对需求合理估时?在承接需求的时候都需要考虑这些问题,而不是一味地当实现需求的工具人。
  通过静态分析把控代码质量
  除了上述的从主观上提升代码质量,还可以从防御的角度建立代码质量自动化检测流程。大型公司一般都有比较成熟的 DevOps 体系,其中很关键的一步就是代码质量分析。代码质量分析依托的是静态分析技术,通过对程序的结构的执行逻辑进行推理,找出代码规范、安全漏洞、运行时缺陷等质量问题。业界一般用的是采用 SonarQube ,我贴一段介绍大家感受一下:
  SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。 通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理可以从七个维度检测代码质量:
  (1)复杂度分布(complexity):代码复杂度过高将难以理解。 
  (2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方。
  (3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况。 
  (4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范。
  (5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读。 
  (6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug。
  (7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度。
  搭建 SonarQube 环境并和 DevOps 集成需要一定的工作量,但是相信我,这是绝对物超所值的。不过SonarQube 虽好但是也有局限,那就是误报率高,听说 Coverity 要好很多,不过没有实际用过。
  另一个问题是是我最近遇到的一个小插曲。目前所在公司的项目是国内的行业软件方案,在做某核心 toG 产品时,项目合作单位对我方提出交付软件需要质量认证的要求,并且要使用自主可控的国产静态分析方案。当时团队用的都是 sonar,担心没有合适的方案,最终影响项目交付。说实话之前搞互联网用的一般都是开源软件,对国产软件的实力没有什么信心,尤其是静态分析这个比较硬核的领域。
  找了几个熟悉这块的朋友聊了一下,了解到还是有不少国产方案的,对比了几个之后最终选了北大的 CoBot,主要选择原因是下面几点:
  · 缺陷检测和 sonar 相比效果要好,尤其是误报率大降,还发现了不少 sonar 的漏报 case
  · 能够和我司当前 DevOps 流程集成,部署成本不高
  · 集成了国内的质量标准集,里面包括我们项目要用的
  · 本地团队技术支持响应速度很快
  缺点也是有的,用户界面不太友好,不过无伤大雅了,该有的信息都用。我司最终用了这个方案顺利过关。
  总结
  以上就是我对代码质量问题的一些经验和思考,希望能够帮助大家。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号