研发素养 | 青训营笔记

68 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

1. 代码质量

什么是优秀的代码:

- 明确的语义 代码即注释qvq

- 阅读代码时 不需要其他联想 没有泛指

- 满足边界条件

- 对于功能变更 只需小的改动

- 可以优雅的报错/自我恢复

- 能够应对安全攻击!BUG少!

代码可维护性原则:

- 统一的编码规范:命名规范/代码格式/注释规范

严禁使用拼音与英文混合的方式比如GetPingLunByName ×

- 稳定的工程结构:目录清晰/模块化/组件化/依赖可控/访问权限

- 优秀的方案实现:高内聚低耦合

圈复杂度概念:

也叫做条件复杂度=num(edges)-num(nodes)+2 或者 判定条件个数+1

正常圈复杂度不要超过15QAQ 1-10的代码通常是清晰的, 维护成本低。

2. 代码评审

- 避免不符合规范的代码入库

- 测试 

CR 关注的点

代码规范

命名:是否定义了清晰准确的变量名/函数名/类名

描述:CR的描述是否准确对应到功能

风格:遵循统一的规范

文档:是否同时改动了文档

功能设计

设计:是否适用当前系统

功能:实现是否正确

简洁:是否简洁,如果复杂能否简单处理

测试:是否包含自动化测试

笑死hhh要用小CR,小改动就提交qvq

CR以后要澄清代码:补充注释或修复问题

一个不好的例子: )

3. 重构实践

技术债:本该用最佳方案,但妥协了,于是未来就惨了(

概念:对软件内部的一种调整,提高可理解性,降低修改成本

重构的方法:封装成员变量,方法提取,把公共代码抽离(类型一般化)

一些小例子

超长函数,逻辑晦涩 -> 提取方法,新建小的子函数

逻辑嵌套 -> 提前返回

switch-case爆炸 -> 类型抽象 将不同条件做成不同的类

长调用链:Obj.a().b().c().d() 容易某个node判空 ->  隐藏中间人调用