好书推荐
代码质量衡量指标可以分为两部分:设计规约和代码规范。设计规约是思想,代码规范是思想的具体实现。
《设计规约》有以下部分:
- 扩展性
- 可读性
- 维护性
- 容错性
- 健壮性
- 鲁棒性
- 高内聚/低耦合
《代码规范》有以下部分:
- 编码规范:是否遵守了编码规范,遵循了最佳实践。
- 潜在的BUG:可能在最坏情况下出现问题的代码,以及存在安全漏洞的代码。
- 文档和注释:过少(缺少必要信息)、过多(没有信息量)、过时的文档或注释。
- 重复代码:违反了Don’tRepeat Yourself原则。
- 复杂度:代码结构太复杂(如圈复杂度高),难以理解、测试和维护。
- 测试覆盖率:编写单元测试,特别是针对复杂代码的测试覆盖是否足够。
- 设计与架构:是否高内聚、低耦合,依赖最少。
扩展性
扩展性指的是代码在不改动或者改动代码极少的情况下,可以支持新增业务或者新增功能。
可读性
可读性指的是代码可以很容易读懂或者花费很少的时间读懂。
维护性
维护性是基于可读性,代码可读性强了,那么维护起来就更容易。
容错性
容错性指的是在你处理业务逻辑的时候,要抓取异常,在异常里面处理错误信息,代码流程是继续还是停止。
健壮性
健壮性是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。
鲁棒性
鲁棒是Robust的音译,也就是健壮和强壮的意思。所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持某些性能的特性。根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性。以闭环系统的鲁棒性作为目标设计得到的固定控制器称为鲁棒控制器。
鲁棒性(robustness)就是系统的健壮性。它是指一个程序中对可能导致程序崩溃的各种情况都充分考虑到,并且作相应的处理,在程序遇到异常情况时还能正常工作,而不至于死机。
失败设计思维
失败设计思维是鲁棒性中很好的思维,该思维要贯穿代码生命周期始终,把失败当作代码设计中合理存在,提前准备好从运行失败的场景中恢复。倡导防御式编程思想,拒绝契约式编程。入参判空、有效性检验。系统设计时识别弱依赖,并针对性地设计降级、限流等应急预案,保证核心逻辑正常可用。在考虑主干功能的同时,要充分考虑评估异常流程与业务边界。
高内聚/低耦合
软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
耦合性
耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
内聚性
内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
参考文章
https://www.zhihu.com/question/304499849/answer/1926930568
https://www.zhihu.com/question/30948927/answer/1968677650