一名好的CR应该具备的研发素质|青训营笔记

136 阅读3分钟

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

本节课的主要内容:一名好的CR应该具备的研发素质

1,代码质量

代码质量问题有可能导致损失非常严重

1.1 优秀代码的特征

产品需求: 完全满足
功能变更: 只需进行较小的改动
发生异常: 优雅的报错,或者能自我修复
新的场景: 优雅的处理,即便没有提前预见
安全攻击: 系统能够处于安全状态下

1.2 代码可维护的规则

统一的编码规范: 命名规范、代码格式、注释规范...
稳定的工程结构: 目录清晰、模块化、组件化、依赖可控、访问权限...
优秀的方案实现: 文档、用例、可测性、高内聚低耦合...

1.3 圈复杂度的概念

Cyclomatic Complexity,也称条件复杂度,是一种软件度量手段。
圈复杂度=num(edges)-num(nodes)+2

2,代码评审

CR的目的: 通过阅读源代码来检查代码是否符合编码规范,前置发现代码质量问题

2.1 CR关注的点

代码规范:
命名:是否定义的清晰准确的变量名、函数名、类名
描述:CR的描述是否准确对应到功能
风格:是否遵循统一的规范
文档:是否同时改动了文档
功能设计:
设计:是否良好的设计并适用于当前系统
功能:实现是否正确
简洁:实现是否简洁,如果过于复杂是否有更简单的方式
测试:是否包含自动化测试

2.2 小CR的好处

审查更快,更彻底,更容易合入代码,如果被拒绝,可以快速返工

2.3 如何处理不同意见

正视批评: 对事不对人,不要因为批评而沮丧
修复代码: 第一反应是澄清代码,补充注释或者修复问题
自我反思: 花点时间,考虑以下评论是否有效

3,重构实践

重构的概念: 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本
代码的坏味道,预示着即将变坏。重构就是不断对抗Code Smell
技术债的产生和应对:
公开技术债:一开始就与利益相关方权衡技术债的利弊,明确影响和解决方案,可以将所有的技术债量化公示,短期和长期技术债可以区分对待,大家遵循相同的编码规范
消费技术债:
每次迭代确定一定数量的技术债作为消费目标,无需偿还技术债的产品是即将消亡、一次性的原型或者短命的产品,避免使用过时的技术,旧资产和老方法充斥着安全漏洞,难以集成。
重构方法的运用:\

  • 重复代码->类型一般化,公共代码抽离
  • 函数参数过多->将参数封装,通过函数调用获取函数
  • 超长函数,逻辑晦涩->提取方法,新建小的子函数
  • Switch-Case爆炸->策略模式,类型抽样
  • 逻辑嵌套->提取方法,降低圈复杂度
  • 长调用链:Obj.a().b().c().d()->隐藏中间人调用

4,代码上线

持续集成,将代码频繁的集成到代码仓库中,持续集成并不能消除bug,而是让它变得容易发现和修正。
灰度发布: 逐步扩大使用的用户群体,1%->10%->30%->60%->100%

5,总结

一名优秀的CR应具备识别优秀代码的眼光,要维护代码,修复代码的错误,坦诚面对不同的评审意见,理解各种相关代码质量的问题,发现代码问题,改造代码的技术。