从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

设计模式 / 2022-08-16

从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

------ 极客时间 《设计模式之美》 王争

如何评论 代码质量的高低?

答: 描述代码的常用词汇总结:

灵活性(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的风险,并且作业时间长。

因为对于一个项目来说,维护的时间远比开发的时间长,所以工程大部分都是在维护中,这就显得代码的“可维护性”显得特别重要。

“可维护性”,个人觉得评价方式很主观,比如这个项目完全是我开发的,我会对这个项目十分的了解,这样这个项目对于我来说,就是“易维护”的,如果一个新人来接手项目,因为不熟悉代码就会显得这个项目“不易维护”这也说明,代码质量的评价拥有很强的主观性。

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)

代码的“可测试性”就是代码是否容易写单元测试,并且完成某个模块的单元测试。

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

要写出满足这些评价标准的高质量代码,需要掌握更实际的编程方法,包括面试设计思想、设计原则、设计模式、编码规范、重构技巧等。这些编程方法论最终的目的都是为了写出高质量的代码。