这是我参与「第四届青训营 」笔记创作活动的第15天
成为一名好 RD,你该具备的研发素养
代码质量
小小的代码错误,可酿成巨大的损失
优秀代码的特质
优秀的代码可信赖、易维护、Bug少
- 具备明确的语义,代码即注释
- 阅读代码时,无需其他联想
- 没有泛指,能明确知道变量名,便于调试
例
function getCartTotal(cartItems) {
var cartTotal;
var itemPosition;
for (itemPostion = 0; item < cartItems.length; itemPosition++) {
cartTotal += cartItems[itemPosition].price;
}
return cartTotal;
}
优秀的代码能
- 完全满足产品需求
- 功能变更时,只需要进行较小的改动
- 发生异常时,能优雅地报错,或者能自我恢复
- 对于新的场景,能够优雅地处理,即便没有提前预见
- 系统能够处于安全状态下,能较好的应对安全攻击
代码可维护性规则
面对庞大的代码需遵循可维护性规则
安卓系统代码多大?
几十G 都太保守了,已经 250G 惹(Android Open Source Project)
良好的开发规范
统一的编码规范:命名规范、代码格式、注释规范
【强制】所有编程相关的命名严禁使用拼音与英文混合的方式
正例:bytedance / toutiao / tiktok / taobao / shenzhen 等国际通用的名称,可视同英文(也比如加入了英语词典那些拼音)
反例:HongBao [红包] / getPingLunByName() [评论] / String sb [烧饼]
稳定的工程结构:目录清晰、模块化、组件化、依赖可控、访问权限...
可轻松在代码库中找到示例,重复使用其他人的代码
可以轻松地将新的依赖项添加到其项目,以及迁移到新的依赖项版本
依赖项稳定,并且很少破坏代码
优秀的方案实现:文档、用例、可测性、高内聚低耦合...
灵活适度应用不同架构设计思想,譬如:Binder IPC通信、IoC/SPI 解耦
可以运用自动化测试手段,保障重构的正确性
使用场景的用例考虑充分,大多数情况下不需要推倒重来
圈复杂度
Cyclomatic Complexity ,也称条件复杂度,是一种度量手段
圈复杂度 = 边数量 - 节点数量 + 2
圈复杂度 = 判定条件数 + 1
这个判定条件数是一个表达式
for(i in list) { // 这是一个
if (1 == 2 && 2 != 3){ // 这有两
}
}
圈复杂度 = 1 + 2 + 1 = 4
代码评审
Code Review 简称 CR,其目标是通过阅读源代码来检查代码是否符合编码规范,前置发现代码质量问题。能够提升代码质量(可读性,正确性,安全性),促进学习交流(经验传授,学习提升,培养开放的沟通氛围)
CR 不是要发现所有 Bug,也不是要缩减测试人员。
CR 关注的点
代码规范
命名:是否定义的清晰准确的变量名、函数名、类名
描述:CR 的描述是否准确对应到功能
风格:是否遵循统一的规范
文档:是否同时改动了文档
功能设计
设计:是否良好的设计并适用于当前系统
功能:实现是否正确
简洁:实现是否简洁,如果过于复杂是否有更简单的方式
测试:是否包含自动化测试
评判要点
设计:这段代码做什么?
功能:实现的逻辑是否与目标一致?是否覆盖了全部的场景?是否存在异常?
简洁:是否有更高性能的方式?
测试:可测试性?测试覆盖?
总结
1.CR能前置地发现代码质量问题
2.将CR做得小点能加快评审效率
3.谦逊坦诚面对不同的评审意见
重构实践
技术债
本应采用最佳方案,但妥协了,从而给未来带来了负担
公开技术债
消费技术债
重构
对软件内部结构的一种调整,目的是在不改变软件的可观察行为的前提下,提高起课理解性,降低其修改成本。
方法
封装成员变量
方法提取
一般化类型 :将封装到父类
将子类的函数移到父类
将父类的函数移到子类
方法更名
代码的坏味道,预示着即将变坏。重构就是不断对抗 Code Smell
方法运用
if -> 用数组加循环
函数参数过多:将参数封装,通过函数调用获取参数
超长函数,逻辑晦涩:提取方法,新建小的子函数
Switch-Case 爆炸:策略模式,类型抽象
逻辑嵌套:提前返回
长调用链:隐藏中间人调用
1.代码中常有技术债,理解它,处理它
2.重构是在有限范围内运用一定的方法
代码上线
分支开发模式
需要找到合适自己研发模式的分支模型
持续集成
持续集成概念
灰度发布
AB实验
干扰因素太多,代码直接上线无法量化收益,指标波动无法归因。
总结
QA
- 提高 Code Review 效率的方法,目前的方式有点费时间
这个投入是必须的。小的 CR 多来几次
Moble 提需求