代码质量

本篇文章的内容源自 极客时间 - 设计模式之美 ,为其中一节课程的笔记记录,主要介绍了一些常见的代码质量评判维度,以及简要地说明如何写出高质量的代码。

如果您对文章内容感兴趣,可以扫描文章尾部的二维码,到专栏进行系统学习。

如何评判代码质量

辨别代码好还是烂,是一种能力,也是写出好代码的前提。

常见的描述代码质量的词汇包括灵活性(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)、可用性(reliability)、可伸缩性(scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)等等。

代码质量高低就像小说的精彩程度,有很强的主观性,并且很难量化。主观评价的准确度,跟工程师自身的经验有很大的关系,经验越丰富,给出的评价越准确。

以下为几个最常见、最重要的评价标准。

1. 可维护性(maintainability)

维护即修复 bug、调整老代码和添加新代码。

易维护即在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或添加代码。反之,不易维护就是指,修改或者添加代码需要冒极大的引入新 bug 的风险,并且完成需要花很长时间。

通常维护代码的时间远大于编写代码的时间,所以代码的可维护性非常重要。

可维护性是一个很难量化、偏向对代码整体的评价标准,受很多因素影响。可读性好、简洁、可扩展性好,就会使代码易维护,反之就会使得代码不易维护。

除此之外,可维护性还跟代码量的多少、业务的复杂程度、所用技术的复杂程度、文档是否全面、团队成员的开发水平等诸多因素有关。

正面分析代码的可维护性很难,不过可以从侧面给出主观但又比较准确的感受。如果 bug 容易修复,修改或添加功能可以轻松完成,就可以认为代码易维护。反之,如果修复 bug,修改或添加功能,需要花费很长时间,就可以认为代码不易维护。

可维护性针对的是维护代码的人,不同水平的人对于同一份代码的维护能力不同。

2. 可读性(readability)

Martin Fowler 曾经说过:”Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

代码被阅读的次数远超过被编写的次数,所以可读性是评价代码质量最重要的指标之一,并且在很大程度上影响代码的可维护性。

评价代码的可读性,要看代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。

正面很难给出一个涵盖所有评价指标的列表,所以可读性也很难量化。Code Review 是一个很好的测验代码可读性的手段,如果你的同事可以轻松读懂你的代码,说明你的代码可读性很好。

3. 可扩展性(extensibility)

可扩展性,即代码应对未来需求变化的能力,同样在很大程度上影响代码的可维护性。

可扩展性强,即在不修改或少量修改原有代码的情况下,能够通过扩展的方式添加新的功能。代码预留了一些功能扩展点,可以把新功能代码直接插到扩展点上,而不需要大量改动原有代码。

4. 灵活性(flexibility)

灵活性是一个比较抽象的评价标准,含义非常宽泛。易扩展、易复用或易用,都可以称其比较灵活。

灵活性好,比如要添加一个新功能时,原有代码已经预留好了扩展点,不需要修改原有的代码,只要在扩展点上添加新代码即可;比如要实现一个功能时,原有代码中已经抽象出很多可以复用的模块,可以直接使用;又比如使用某组接口时,接口可以应对各种使用场景,满足各种不同的需求。

5. 简洁性(simplicity)

KISS 原则:Keep It Simple,Stupid。这个原则说的是,尽量保持代码简单。

代码简单、逻辑清晰,就意味着易读、易维护。

思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。

6. 可复用性(reusability)

可复用性,即尽量减少重复代码的编写,复用已有的代码,是很多设计原则、思想、模式等所追求的效果。

7. 可测试性(testability)

可测试性是一个相对较少被提及,但又非常重要的代码质量评价标准。

代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。

代码的可测试性差,比较难写单元测试,基本就能够说明代码设计的有问题。

如何写出高质量代码

要写出满足以上评价标准的高质量代码,需要掌握一些更加细化、且能够落地的编程方法论,包括面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。

所有编程方法论的最终目的,都是为了编写出高质量的代码。比如,面向对象中的继承、多态能够提高代码的可复用性;编码规范能提高代码的可读性;设计原则中的单一职责原则、里氏替换原则等,能提高代码的可复用性、灵活性、可读性、可扩展性、可维护性;设计模式能提高代码的可扩展性;持续重构可以时刻保持代码的可维护性等等。

设计模式之美

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2016-2020 姜越

谢谢老板

支付宝
微信