如何评判代码质量

代码质量的评价有很强的主观性。

从哪些维度评判代码质量的好坏

代码质量的评价有很强的主观性,描述代码质量的词汇也有很多,比如可读性可维护性灵活优雅简洁等,这些词汇是从不同的维度去评价代码质量的。它们之间有互相作用,并不是独立的,比如,代码的可读性好、可扩展性好就意味着代码的可维护性好。代码质量高低是一个综合各种因素得到的结论。我们并不能通过单一的维度去评价一段代码的好坏

以下几乎涵盖我们所能听到的描述代码质量的所有常用词汇

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high performance)、安全性(security)、兼容性(compatibility)、易用性(usability)、整洁(clean)、清晰(clarity)、简单(simple)、直接(straightforward)、少即是多(less code is more)、文档详尽(well-documented)、分层清晰(well-layered)、正确性(correctness、bug free)、健壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性(scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)……

有些词语过于笼统、抽象,比较偏向对于整体的描述,比如优雅、好、坏、整洁、清晰等;有些过于细节、偏重方法论,比如模块化、高内聚低耦合、文档详尽、分层清晰等;有些可能并不仅仅局限于编码,跟架构设计等也有关系,比如可伸缩性、可用性、稳定性等。

我们很难通过其中的某个或者某几个词汇来全面地评价代码质量。因为这些词汇都是从不同维度来说的。不同的评价维度也并不是完全独立的,有些是具有包含关系、重叠关系或者可以互相影响的。

正是因为代码质量评价的主观性,使得这种主观评价的准确度,跟工程师自身经验有极大的关系。越是有经验的工程师,给出的评价也就越准确。

最常用的评价标准有哪几个

1. 可维护性(maintainability)

什么是代码的“可维护性”?所谓的“维护代码”又要做些什么,落实到编码开发,
所谓的“维护”无外乎就是修改 bug修改老的代码添加新的代码之类的工作。
所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码
所谓“代码不易维护”就是指,修改或者添加代码需要冒着极大的引入新 bug 的风险,并且需要花费很长的时间才能完成。

如何来判断代码可维护性的好坏。

可维护性是一个很难量化、偏向对代码整体的评价标准。

代码的可维护性是由很多因素协同作用的结果。代码的可读性好、简洁、可扩展性好,就会使得代码易维护;相反,就会使得代码不易维护。

更细化地讲,如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等等,那就可能意味着代码易维护。

代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面、团队成员的开发水平等诸多因素有关。

从正面去分析一个代码是否易维护稍微有点难度。不过,我们可以从侧面上给出一个比较主观但又比较准确的感受。如果 bug 容易修复,修改、添加功能能够轻松完成,那我们就可以主观地认为代码对我们来说易维护。相反,如果修改一个 bug,修改、添加一个功能,需要花费很长的时间,那我们就可以主观地认为代码对我们来说不易维护。是否易维护本来就是针对维护的人来说的。不同水平的人对于同一份代码的维护能力并不是相同的。对于同样一个系统,熟悉它的资深工程师会觉得代码的可维护性还不错,而一些新人因为不熟悉代码,修改 bug、修改添加代码要花费很长的时间,就有可能会觉得代码的可维护性不那么好。

2. 可读性(readability)

任何傻瓜都会编写计算机能理解的代码。好的程序员能够编写人能够理解的代码。

代码的可读性有多重要?因为代码被阅读的次数远远超过被编写和执行的次数。代码的可读性应该是评价代码质量最重要的指标之一。

在编写代码的时候,时刻要考虑到代码是否易读、易理解。代码的可读性在非常大程度上会影响代码的可维护性。毕竟,不管是修改 bug,还是修改添加功能代码,我们首先要做的事情就是读懂代码。代码读不大懂,就很有可能因为考虑不周全,而引入新的 bug。
既然可读性如此重要,那我们又该如何评价一段代码的可读性呢?

我们需要看代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。你应该也能感觉到,从正面上,我们很难给出一个覆盖所有评价指标的列表。这也是我们无法量化可读性的原因。
实际上,code review 是一个很好的测验代码可读性的手段。如果你的同事可以轻松地读懂你写的代码,那说明你的代码可读性很好;如果同事在读你的代码时,有很多疑问,那就说明你的代码可读性有待提高了。

3. 可扩展性(extensibility)

可扩展性也是一个评价代码质量非常重要的标准。它表示我们的代码应对未来需求变化的能力。跟可读性一样,代码是否易扩展也很大程度上决定代码是否易维护。

代码的可扩展性表示,我们在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。说直白点就是,代码预留了一些功能扩展点,你可以把新功能代码,直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码。

4. 灵活性(flexibility)

灵活性是一个挺抽象的评价标准,要给灵活性下个定义也是挺难的。

什么情况下我们才会说代码写得好灵活呢?

当我们添加一个新的功能代码的时候,原有的代码已经预留好了扩展点,我们不需要修改原有的代码,只要在扩展点上添加新的代码即可。这个时候,我们除了可以说代码易扩展,还可以说代码写得灵活。

当我们要实现一个功能的时候,发现原有代码中,已经抽象出了很多底层可以复用的模块、类等代码,我们可以拿来直接使用。这个时候,我们除了可以说代码易复用之外,还可以说代码写得好灵活。

当我们使用某组接口的时候,如果这组接口可以应对各种使用场景,满足各种不同的需求,我们除了可以说接口易用之外,还可以说这个接口设计得好灵活或者代码写得好灵活。

如果一段代码易扩展、易复用或者易用,我们都可以称这段代码写得比较灵活。所以,灵活这个词的含义非常宽泛,很多场景下都可以使用。

5. 简洁性(simplicity)

有一条非常著名的设计原则,KISS 原则:“Keep It Simple,Stupid”。这个原则说的意思就是,尽量保持代码简单。代码简单、逻辑清晰,也就意味着易读、易维护。我们在编写代码的时候,往往也会把简单、清晰放到首位。

不过,很多编程经验不足的程序员会觉得,简单的代码没有技术含量,喜欢在项目中引入一些复杂的设计模式,觉得这样才能体现自己的技术水平。实际上,思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。这也是一个编程老手跟编程新手的本质区别之一。

6. 可复用性(reusability)

代码的可复用性可以简单地理解为,尽量减少重复代码的编写,复用已有的代码。

面向对象特性,继承、多态存在的目的之一,就是为了提高代码的可复用性;
设计原则中的单一职责原则也跟代码的可复用性相关;
重构技巧中的解耦、高内聚、模块化等都能提高代码的可复用性。
可复用性也是一个非常重要的代码评价标准,是很多设计原则、思想、模式等所要达到的最终效果。

代码可复用性跟 DRY(Don’t Repeat Yourself)这条设计原则的关系挺紧密的,

7. 可测试性(testability)

代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。
代码的可测试性差,比较难写单元测试,那基本上就能说明代码设计得有问题。

如何才能写出高质量的代码?

问如何写出高质量的代码,也就等同于在问,如何写出易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码。

要写出满足这些评价标准的高质量代码,我们需要掌握一些更加细化、更加能落地的编程方法论,包括面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。而所有这些编程方法论的最终目的都是为了编写出高质量的代码。

比如,面向对象中的继承、多态能让我们写出可复用的代码;
编码规范能让我们写出可读性好的代码;
设计原则中的单一职责、DRY、基于接口而非实现、里式替换原则等,可以让我们写出可复用、灵活、可读性好、易扩展、易维护的代码;
设计模式可以让我们写出易扩展的代码;
持续重构可以时刻保持代码的可维护性。

重点回顾

  1. 如何评价代码质量的高低?
    代码质量的评价有很强的主观性,描述代码质量的词汇也有很多,比如可读性、可维护性、灵活、优雅、简洁等,这些词汇是从不同的维度去评价代码质量的。它们之间有互相作用,并不是独立的,比如,代码的可读性好、可扩展性好就意味着代码的可维护性好。代码质量高低是一个综合各种因素得到的结论。我们并不能通过单一的维度去评价一段代码的好坏。
  2. 最常用的评价标准有哪几个?
    最常用到几个评判代码质量的标准是:可维护性、可读性、可扩展性、灵活性、简洁性、可复用性、可测试性。其中,可维护性、可读性、可扩展性又是提到最多的、最重要的三个评价标准。
  3. 如何才能写出高质量的代码?
    要写出高质量代码,我们就需要掌握一些更加细化、更加能落地的编程方法论,这就包含面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等等

来源:https://www.icode9.com/content-4-901901.html

(0)

相关推荐

  • "设计模式我学过呀,就是没用过"

    回复"000"获取大量电子书 写在前面 在开发中,不使用设计模式也不是不可以,但是用好设计模式能帮忙我们更好的去解决实际问题. 其实,我们天天都在和设计模式打交道,很多人却完全不知 ...

  • 要提高软件可维护性,需在各个阶段下功夫

    提到软件的可维护性,首先让人想到软件代码的可读性.代码的可读性越好,软件的可维护性越好. 可是,软件的可维护性不仅仅与代码的可读性有关.如果需求定义不清晰,没有详细的设计文档,测试也不充分,软件的可维 ...

  • 不懂这 9 大产品原则,还做什么 SaaS

    文章来自公号:SaaS 产品说 文 / 李东林 编辑 / 小方 全文 5252 字 文章原标题"原则系列-2020 年终章之 SaaS 能够走多远" 2020 年终于快要结束了,对 ...

  • 淘宝重磅开源代码质量检测工具!

    来源:github.com/ice-lab/iceworks/tree/master/ 好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位.好的代码可以加快应用的开发迭代速度,不必花过多的时间来 ...

  • 什么代码会遭人耻笑,什么妹子会受人喜欢?从妹子角度戏说代码优劣。

    在日常生活中,丑姑娘和好姑娘一眼就能识别:在代码中,好代码与坏代码却不容易觉察,这里面有标准,但每个程序员都觉得自己创造的代码好.了解这些标准,可以有效避免写出坏代码. 目录 好的标准是什么 - 可读 ...

  • 如何提高代码质量

    说起代码质量,脑子里会冒出很多词,命名规范.格式规范.日志规范.单元测试覆盖率... 但我觉得,代码质量总结起来就两个:好看和好用. 好看是指代码可读性好,容易理解.容易维护,别人接手了不骂你:好用则 ...

  • 《程序员修炼之道》| 王木头解读

    关于作者 这本书的两位作者分别是大卫·托马斯和安德鲁·亨特,他们不只是非常资深的程序员,还是<敏捷软件开发宣言>17位创始人中的2位.他们为敏捷软件开发建立起了价值观和基本原则. 关于本书 ...

  • 干货贴 | 改善代码可读性的5种方法

    本文最初发布于 byrayray.dev 网站,经原作者授权由 InfoQ 中文站翻译并分享. 在本文中,我会列举五条提高代码可读性的原则.这些原则是我在各种项目.团队和组织的实践中总结出来的经验.我 ...

  • 设计模式-七大软件设计原则

    设计模式 参考资料 图解设计模式 大话设计模式 设计模式之禅 github我见过最好的设计模式 http://c.biancheng.net/view/1326.html 基本原则 开闭原则 在设计的 ...

  • JetBrains发布代码质量检测工具Qodana早期预览版

    JetBrains正在开发一种被称为Qodana的代码质量检测工具.它将JetBrains IDE具有的智能代码检查带入了项目CI/CD管道中.它可以识别代码中的错误,安全漏洞,重复项和缺陷并提出修复 ...

  • 【软件工程】代码质量综合指南:最佳实践和工具

    当您的软件团队快速增长时,确保代码质量是一个巨大的挑战.但是,即使有固定数量的软件开发人员,维护代码质量也会引起麻烦. 如果没有工具和一致的系统,整个项目可能积累巨大的技术债务,长期造成的问题比短期解 ...

  • 阿里开源代码质量检测工具!

    好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位.好的代码可以加快应用的开发迭代速度,不必花过多的时间来修复 bug 和完善代码.好的代码不但能够使得新的项目成员更容易加入项目,同时方便项目组 ...

  • 复杂系统如何保障代码质量?让测试先行

    一  业务背景 高德在线导航服务作为有很强业务特性和多年历史积累的存量系统,不可避免的存在大量的不合理代码,而业务演进对系统性能.算法.底层架构等不断提出更高要求,存量的各种业务代码和算法.架构快速演 ...

  • 为滴滴、头条量化研发效能和代码质量,他们有哪些秘籍?| 专访思码逸 Merico

    对研发人员进行量化的绩效考核,是业界难题. 一种思路是通过提交次数(NOC,Number of Commits)或代码行数(LOC,Line of Commits),比如 GitHub 就是通过提交次 ...

  • flake8-python代码质量检测工具

    flake8是python代码质量检测工具. 描述 flake8是一个命令行实用程序,用于在整个Python项目中加强样式的一致性. 默认情况下,它包括PyFlakes项目提供的lint检查,PyCo ...

  • C#程序编写高质量代码改善的157个建议【16-19】[动态数组、循环遍历、对象集合初始化] 前言

    前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...