Yanyg - Software Engineer

代码质量(Code Quality)

目录

1 From Books

1.1 Rules From <The Art Of UNIX>

  • 清晰胜于机巧

1.2 Rules From <Clean Code>

1.3 Rules From <Building Secure and Reliable Systems>

1.4 Rules From <TDD>

2 From Experience

2.1 名副其实

  • 不要在Free里做Malloc事情
  • 用可读的函数, 变量名称, 代替非必要的注释
  • 复杂的算法, 用注释高层描述实现

2.2 析构线程/协程上下文

  • 不要在析构函数里切换线程/协程

2.3 针对接口编程

2.4 断言与Debug断言

  • 断言只做读和验证
  • Debug断言只做读, 调用const类函数, 以及Inject类非Const函数

2.5 Code Review

  • 控制Patch规模, 400L
  • 控制Review速度, 每小时限制在500L以内
  • 一次Review时间不要超过60minutes
  • Submitter先Review自己的提交
    • liufeng做的很好
  • 测试代码也需要仔细看, 理解测试目的
  • CheckList
  • 维护和谐关系, 不同观点会有碰撞

2.6 分层的, 完整的测试

2.6.1 UT

  • 面向UT设计, 好的代码是可测的
    • 清晰, 明确的输入输出
    • 清晰的代码结构, 函数定义
    • 维护类内部状态, 性能, 错误, 事件等数据, 用作UT验证
  • UT最佳实践
    • Fast
      • 尽量简单
      • 尽量减少依赖
      • Mock外部依赖
    • Deterministic(or Repeatable, Stability)
      • 结果是明确的, 稳定的
      • 测试是可重入的
      • 测试稳定, 不会概率性失败
    • Boundary
      • 上下边界
    • Coverage
      • 分支
      • 合适的coverage, 90%+
    • Readable
      • 代码可读性
      • 结果可读性: 复杂case, 前置条件检测成功后, 再检测后续结果

2.6.2 ST

  • 单进程, 多模块/多服务交互

2.6.3 FT(CD)

  • 单物理机, 多服务多进程协作
  • 测试功能正确性, 完整性
  • 测试升级, 回滚, 版本兼容性
  • 组件异常审批测试(DISK, SERVER下线, 扩容等)

2.6.4 E2E

  • 物理环境测试集群
  • 功能测试, 压力测试, 性能测试
  • 故障注入测试
  • 预埋海量数据, 验证雪崩后的行为

2.6.5 预发验证

  • 生产环境, 流量小, 非关键业务
  • 分批发布上线

3 References