这篇文章又是关于代码质量的,有些同学可能觉得我比较啰嗦。不过我就是想用这种方式让大家重视起来。其实说来说去就那么几种方法,但是实际执行起来真是难于登天。

低质量的代码真的是一种灾难。当你的代码变得越来越混乱,维护起来就会花费大量的时间。在最坏的情况下,代码将变得不可维护,并且项目会慢慢终止。

为了避免这种情况,你需要注意你的代码质量。尝试在代码质量上花费一些时间,长久来看,这将对你有很大的好处。

无论你是管理者,测试人员或者是开发者都应该去自觉维护代码质量,因为在整个开发流程中,大家的目标都是交付可用的、高质量的代码。

要想提高代码质量,需要做到以下六件事,其中一些是一个人可以完成的,而有些则必须要团队配合。

1. 四眼原则

四眼原则是易于理解和执行的。它的意思是必须要有至少两个人(包括作者)检查过代码,目前最流行的方法是Pull request。

Pull request是让你告诉别人你已经在GitHub上向分支push了一些代码改动。在开启Pull request之后,你就可以和协作者讨论潜在的问题,并且可以在你的代码被merge之前继续对它进行修改。

——Github.com

在代码审查期间,有几件事需要考虑。其中之一是检查代码是否违反了约定的代码规则。这一过程可以通过在管道中使用linter来实现自动化,但有时也需要手动执行。

另外一个需要检查的是代码的可维护性和错误处理。这件事还没办法自动化。最后,需要检查的是代码的完整性。这一修改是否完成了需要完成的全部功能?

2. 持续集成

“开发环境是好的。”这是某些开发人员常说的,还有就是:“在我电脑上没问题”。

如果希望避免这种问题的争论。持续集成可以给你提供很大的帮助。

持续集成是一种软件开发实践,团队的开发人员经常集成他们的工作,通常每人至少每天集成一次——这使得每天需要集成很多次。每次集成都应该由自动构建(包括测试)尽快确认是否存在集成错误。

—— Martin Fowler

持续集成的意义在于,它可以快速的向开发者提供结果反馈。

持续集成的两个基本作用是:

  1. 保持快速构建,没什么比一次耗时一小时的构建更让人沮丧的了。
  2. 快速修复损坏的构建。持续集成会让你始终在一个稳定的版本的基础上进行开发。

持续集成通过快速向开发者提供反馈来帮助提高代码质量。如果测试不通过,那么构建就会失败,此时开发者就会注意到。此外,最好在构建脚本中添加linter来检查是否符合编码规范。毫无疑问,这也是用于提高代码质量的。

3. 编码规范

拥有一系列的代码规约是非常重要的。但是在你开始制定代码规约之前,团队的每个人都应该参与。因为这期间可能存在大量的关于最优约定的讨论。

编码规范中应该包括怎样声明和命名一个变量等等。规则的数量是没有限制的,并且以后可以继续调整,前提是这些规则对你和你的团队有帮助。

当编码规范制定好以后,请务必遵守。就像我前面提到的,最好的检查办法是在管道中增加linter,这样就不需要人工干预了。如果不这样做,也可以选择在本地安装linter。但要保证在每次提交之前规范使用linter。这样你的团队的代码风格将非常统一,有利于提升代码的可读性和可维护性。

高质量的代码可以加快软件开发的速度,因为它可以被复用,并且开发人员不必花费大量时间修改bug和完善代码。同时新人加入项目也会更快适应。

4. 测试,测试,测试

代码质量越高,bug就越少。我们通常通过测试过滤出严重的bug,确保代码按照预期执行。

制定清晰的测试策略对于提高代码质量至关重要。至少要保证你的代码可以通过单元测试。如果你以其他方式进行测试就更好了,例如集成测试或回归测试。

根据测试金字塔,项目中数量最多的测试应该是单元测试,因为它们既简单又快速。有很多工具可以帮助你创建单元测试并生成代码覆盖率报告。

跑单元测试和生成代码覆盖率报告可以通过持续集成自动进行。当代码覆盖率达不到要求时,持续集成也会构建失败。

5. 分析bug

代码中有bug是必然的事情,如何处理这些bug才是关键。如果你想要提升自己,学会从错误中学习至关重要。这也是为什么你要分析bug。

发现bug后,先分析bug的影响。是一个低优先级的还是高优先级的?如果是高优先级的,就需要尽快解决。

分析bug时,你需要问自己一些问题。是什么导致了错误?为什么没有测出来?其他地方也有可能发生吗?以及我们应该怎样避免类似的bug产生?

当然,我们也要学会使用工具追踪bug。目前市面上有许多可用的bug追踪工具,你可以根据需要选择适合自己的工具。

6. 开始量化

在开始量化时,可以用几个指标来衡量代码的质量。

缺陷指标

缺陷的数量和缺陷的严重程度是衡量代码质量的重要指标。如果你想追踪bug,可以使用bug燃尽图。bug燃尽图和软件敏捷开发中的正常燃尽图一样。唯一不同的是bug燃尽图包含未修复的bug,而不是事故点。

复杂度指标

复杂度通常由圈复杂度衡量,它是程序的源代码线性独立路径数量的一个衡量。

圈复杂度数和缺陷频率之间存在一定的相关性:

许多研究调查了函数或方法中圈复杂度数和缺陷频率数之间的相关性。有些研究发现了圈复杂度和缺陷数的正相关性:函数和方法越复杂,缺陷也就会越多。然而,圈复杂度和程序大小之间的相关性已被多次证明。

从理论上来讲,降低代码的复杂度会使缺陷更少。

原文地址

https://medium.com/better-programming/things-that-you-can-do-to-improve-code-quality-c746c30e7521

【译】做好这几件事,代码质量可以提升一个档次相关推荐

  1. “牌面”养成记10:打好牌,从做好这60件事开始[下]

    [所谓"牌面",其实就是Product Manager的简称+谐音.也取胡"牌面"的寓意] <产品心经:产品经理应该知道的60件事(第2版)_闫荣> ...

  2. 教育学考研跨考计算机,用心教育学考研 | 22届教育学考研跨考,做好这三件事跨考无压力...

    原标题:用心教育学考研 | 22届教育学考研跨考,做好这三件事跨考无压力 hello小伙伴们,你们好呀,这几年考研热潮一直没有退散,再加上今年扩招,考研人数势必会越来越多,教育学的报考人数也一直在攀升 ...

  3. TYLER ADAMS BRADBERRY :不想让自己失望,就应该做好这三件事

    曾经有人问小编这样的问题,在成年人的世界里,如何才能不对人生失望?一时间,小编也没有找到答案.近日,星盟投资理事会主席在泰勒先生在接受采访时很好的解答了这个问题.他说,如果不想让自己失望,就应该做好这 ...

  4. 对抗35岁职业危机,你要做好这三件事

    对抗35岁职业危机,你要做好这三件事 前言 一.别从事不具备核心能力的工作. 二.选择成长型的工作 建立起你核心的可迁移能力. 即便是大厂,也要看是哪个车间. 同行的人,比要去的远方更重要. 在工作中 ...

  5. 国瀚实业|轻松理财只需做好这五件事

    低工资的人怎么理财?对于低工资的人来说,其实如果合理做好定位,分配好资金,选择适当的理财方式,也能积累不少的财富.当然,理财不是一朝一夕就能做好的,需要一定的时间沉淀,因为理财并不等于发财,如果想要马 ...

  6. 转:做好这11件事,稻盛和夫如是带领企业穿越萧条

    个人理解: 把萧条当作成长机会,原则,把逆境作为动力 以积极开朗的态度去突破困境 慎重经营的态度:必须低头恳求,这是商业活动的基础:从认为不可能时重新开始 使大家具备相同的思维方式,经济好的时候这些问 ...

  7. 男人一生必须做好的10件事

     男人一生必须做好的10件事,拥有这些,你会拥有一个完整的人生. 1.用心去爱父母. 父母是我们生命的起源,给了我们最无私.最真诚.最温暖和从不期待我们报答的爱.他们一生的奔波,都是为了我们和我们 ...

  8. 牌面”养成记9:打好牌,从做好这60件事开始[中]

    <产品心经:产品经理应该知道的60件事(第2版)_闫荣>[微信阅读]转化笔记(续) 前文提要: <产品心经:产品经理应该知道的60件事(第2版)_闫荣>第1篇内容讲述了PM心法 ...

  9. 无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。不忘初心 方得始终!

    无论从事什么行业,只要做好两件事就够了,一个是你的专业.一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任.不忘初心 方得始终!

最新文章

  1. Xamarin开发Anroid应用介绍
  2. cmd 找不到java power 可以_高三总是找不到学习状态?这几个方法一定可以帮到你!...
  3. CSS属性之attr()
  4. python 替换字符串
  5. axure中出现小手_你所不知道的15个Axure使用技巧
  6. c如何调用java_JNI学习------C语言调用Java (转)
  7. 389. Find the Difference
  8. MQ 消息队列时如何确保消息不丢失
  9. 计算机的性能及评估标准
  10. 计算机英语固定词组搭配,英语短语搭配,英语中穿的五种用法及搭配
  11. IE打开网页默认为英文
  12. 用Axure撰写产品需求文档
  13. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  14. 使用docker创建属于你的ChatGPT
  15. 《深度学习推荐系统》
  16. Chromium网页Render Layer Tree创建过程分析
  17. Go入门案列1:实现一个家庭收支记账系统
  18. 详解input value属性
  19. 抖音自媒体账号被限流?这3种方法教你如何鉴别
  20. 循环,100遍“好好学习,天天向上”两种方法。

热门文章

  1. bWKztRpC滞誓麓旁矣驹沤航评旨访司对拥有雷火的宇天,少年也得认真对待:“那好。我
  2. 从长远看以后会工作方向以及学习内容
  3. DataGridView绑定DataTable出现大红叉
  4. staruml php,教你使用StarUML一步一步画顺序图
  5. NLP自然语言处理之基于BiLstm的短文本情感分析
  6. opengl之高级GLSL(2)-接口块,Uniform缓冲对象,Uniform块布局等
  7. 自考本科计算机网络怎么过,经验分享:自考计算机网络本科课程通关攻略
  8. MYO肌电臂环中文入门指南(Windows版)
  9. 桌面图标异常的修复办法
  10. php7安装xhprof,xhprof php7的安装与使用