目标和原则

  • 提高代码质量,及早发现潜在缺陷,降低修改/弥补缺陷的成本
  • 促进团队内部知识共享,提高团队整体水平
  • 评审过程对于评审人员来说,也是一种思路重构的过程,帮助更多的人理解系统
  • 是一个传递知识的手段,可以让其它并不熟悉代码的人知道作者的意图和想法,从而可以在以后轻松维护代码
  • 可以被用来确认自己的设计和实现是一个清楚和简单的
  • 鼓励相互学习对方的长处和优点
  • 高效迅速完成Code Review

    Code Review Checklist

    Code Review主要检查代码中是否存在以下方面问题:
    代码的一致性、编码风格、代码的安全问题、代码冗余、是否正确设计以满足需求(功能、性能)等等

    • 完整性检查

      • 代码是否完全实现了设计文档中提出的功能需求
      • 代码是否已按照设计文档进行了集成和Debug
      • 代码是否已创建了需要的数据库,包括正确的初始化数据
      • 代码中是否存在任何没有定义或没有引用到的变量、常数或数据类型
    • 一致性检查
      • 代码的逻辑是否符合设计文档
      • 代码中使用的格式、符号、结构等风格是否保持一致
    • 正确性检查
      • 代码是否符合制定的标准
      • 所有的变量都被正确定义和使用
      • 所有的注释都是准确的
      • 所有的程序调用都使用了正确的参数个数
    • 可修改性检查
      • 代码涉及到的常量是否易于修改(如使用配置、定义为类常量、使用专门的常量类等)
      • 代码中是否包含了交叉说明或数据字典,以描述程序是如何对变量和常量进行访问的
      • 代码是否只有一个出口和一个入口(严重的异常处理除外)
    • 可预测性检查
      • 代码所用的开发语言是否具有定义良好的语法和语义
      • 是否代码避免了依赖于开发语言缺省提供的功能
      • 代码是否无意中陷入了死循环
      • 代码是否是否避免了无穷递归
    • 健壮性检查
      • 异常处理和清理(释放)资源
      • 代码是否采取措施避免运行时错误(如数组边界溢出、被零除、值越界、堆栈溢出等)
    • 结构性检查
      • 程序的每个功能是否都作为一个可辩识的代码块存在
      • 循环是否只有一个入口
    • 可追溯性检查
      • 代码是否对每个程序进行了唯一标识
      • 是否有一个交叉引用的框架可以用来在代码和开发文档之间相互对应
      • 代码是否包括一个修订历史记录,记录中对代码的修改和原因都有记录
      • 是否所有的安全功能都有标识
    • 可理解性检查
      • 注释是否足够清晰的描述每个子程序
      • 是否使用到不明确或不必要的复杂代码,它们是否被清楚的注释
      • 使用一些统一的格式化技巧(如缩进、空白等)用来增强代码的清晰度
      • 是否在定义命名规则时采用了便于记忆,反映类型等方法
      • 每个变量都定义了合法的取值范围
      • 代码中的算法是否符合开发文档中描述的数学模型
    • 可验证性检查
      • 代码中的实现技术是否便于测试
    • 可重用性
      • DRY(Do not Repeat Yourself)原则:同一代码不应该重复两次以上
      • 考虑可重用的服务,功能和组件
      • 考虑通用函数和类
    • 可扩展性
      • 轻松添加功能,对现有代码进行最小的更改。一个组件可以被更好的组件替换
    • 安全性
      • 进行身份验证,授权,输入数据验证,避免诸如SQL注入和跨站脚本(XSS)等安全威胁 ,加密敏感数据(密码,信用卡信息等)
    • 性能
      • 使用合适的数据类型,例如StringBuilder,通用集合类
      • 懒加载,异步和并行处理
      • 缓存和会话/应用程序数据

    代码检查包括不局限于上述清单,提交人应在本地自我完成代码格式、架构设计、面向对象分析与设计等检查。
    备注:

    • Java服务端开发必须遵循阿里巴巴Java开发手册(终极版),IDEA中安装相关插件有告警提示不允许提交合并

    Code Review的步骤

    1. 代码编写者和代码审核者坐在一起,由代码编写者按照UC依次讲解自己负责的代码和相关逻辑,从Web层->DAO层;
    2. 代码审核者在此过程中可以随时提出自己的疑问,同时积极发现隐藏的bug;对这些bug记录在案。
    3. 代码讲解完毕后,代码审核者给自己安排几个小时再对代码审核一遍。代码需要一行一行静下心看。同时代码又要全面的看,以确保代码整体上设计优良。
    4. 代码审核者根据审核的结果编写“代码审核报告”,“审核报告”中记录发现的问题及修改建议,然后把“审核报告”发送给相关人员。
    5. 代码编写者根据“代码审核报告”给出的修改意见,修改好代码,有不清楚的地方可积极向代码审核者提出。
    6. 代码编写者 bug fix完毕之后给出反馈。
    7. 代码审核者把Code Review中发现的有价值的问题更新到"代码审核规范"的文档中,对于特别值得提醒的问题可群发email给所有技术人员。

    备注:
    Code Review必备的文档:
    “Code Review规范”文档:记录代码应该遵循的标准。
    代码审核者根据这些标准来Code Review代码,同时在Code Review过程中不断完善该文档。

    Code Review的执行

    准备阶段

    1. 评审规范和标准
    2. 在CR前设计确定评审规范和标准是必要,通过规范和标准我们在审查过程中可以有据可依,有理可循,而且还可以做到标准统一。
    3. 选择CR活动的参与者
    4. 在CR开始前,必须把本次CR活动的对象、审查内容以及审查的规范和标准通过email通报给所有的参与者。
    5. 选择CR活动的实施方式
    6. CR活动有很多形式可供我们选择,我们可以根据实际情况选择桌面式CR、演示讲解式CR、一对一的座位CR等等。(一般按新增功能桌面式CR、里程碑功能演示讲解式CR、BUG修复一对一的座位CR)

    实施阶段

    充分的事前准备,只是做好CR活动的前提,在CR实施过程中,我们要做好以下工作。

    1. 准确记录
    2. 对于CR过程发现的问题,我们必须清晰准确的记录,可以使用问题点记录单,明确记录的项目和内容。
    3. 讲解与提问
    4. CR过程中,要采用代码作者讲解和审查者提问方式。审查者不能只在发现问题时提问,同时也要根据本次审查的内容要求代码作者对某个特定问题的讲解。
    5. 逐项审查
    6. 对事前确定的审查内容,要逐项审查,不能因为时间不足等因素一扫而过。
    7. 注意气氛
    8. 实施审查时,要营造一个讨论问题、解决问题的氛围,不能把审查会搞成批判会,这样会影响相关人员的积极性。

    事后跟踪

    1. 确认发现的问题 CR结束后,对发现的问题,首先需要确定以下内容。
    2. 问题点的难易程度以及影响的范围;
    3. 解决问题的责任者和问题点修正结果的确认者;
    4. 解决问题点的时限。
    5. 修正问题责任者 对于修正问题责任者,在问题点的修正过程中,要三方面内容的记录。问题点的原因;
    6. 解决问题点的对策;
    7. 修正的内容。

CodeReview规范的更多相关文章

  1. 项目编码规范(Ali)

    一.研发流程规范 二.SQL编码规范 数据库命名规范:数据库名一律小写,必须以字母开头.库名包含多个单词的,以下划线“_”分隔.如果采用分库方案,分库编号从“0”开始,用“0”左补齐为四位. 表名规范 ...

  2. Code Review 规范

    CodeReview规范 CodeReivew 标准 通用原则 提交 PR 的代码必须保证自测通过 只 review 代码规范.业务逻辑,不 review 架构设计(那是写代码前应该做的事情) 干掉重 ...

  3. CodeReview杂谈

    豆皮粉儿们,大家好,又见面啦,今天由字节跳动的"躬冯"带来一个 code review 的故事. 作者:躬冯 2020年元旦假期到来的时候,孙总攒了个局,又把当年一起创造过屎山的咱 ...

  4. 如何成为优秀的技术Leader

    技术主管,又叫技术经理,英文一般是 Tech Leader ,简称 TL.随着工作经验的不断积累,能力的不断提升,每个人都有机会成为 Team Leader. 然而在机会到来前,我们必须提前做好准备, ...

  5. <阿里工程师的自我素养>读后感-技术人应该具备的一些基本素质

    一.技术人具备"结构化思维"意味着什么? 1.什么是结构化思维? 结构化思维:逻辑+套路. 表达要有逻辑,所谓逻辑是指我们的结构之间必须是有逻辑关系的. 四种组织思想的逻辑关系 : ...

  6. 【腾讯Bugly干货分享】让 CodeReview 这股清流再飞一会儿

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/ToYeT4Y4pzx0ii9Z92fo-Q 作者:刘 ...

  7. 作业三 代码规范 代码复审 PSP

    1.是否需要有代码规范(5分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反对.我并不认为代码规范都 ...

  8. 分享总结:更好地CodeReview

            代码质量分享    2016_06_24_舒琴_代码质量.key    For 代码提交人     基本原则 Review时机: 对于普通bugfix或优化,CodeReview最迟要 ...

  9. CodeReview实践与总结

    CodeReview 是大型软件工程中公认的必不可少的保证工程质量的重要手段之一.但凡正规软件作战军团都是非常重视 CodeReview 的作用和意义的.那么,如何做好 CodeReview 呢?这里 ...

随机推荐

  1. HTTPS的基本使用

    1.https简单说明 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的 ...

  2. linux下打包所有文件,包括隐藏文件到压缩包

    命令如下: cd /root/test/ tar czvf test.tar.gz .[!.]* * 解释: tar czvf test.tar.gz * 压缩当前文件夹下非[隐藏文件]的文件 tar ...

  3. shell编程之免交互 (不要再让你的双手过度劳累了)

    shell编程之免交互 1.Here Document免交互 2.Expect免交互 3.免交互磁盘创建 1.Here Document免交互 概述: Here Document使用I/O重定向的方式 ...

  4. 20161206日更新CocoaPods版本

    从网上下载的工程第三方库需要更新,但当我执行pod update时提示以下错误: [!] The `master` repo requires CocoaPods 1.0.0 -  (currentl ...

  5. 8、Linux基础--rpm、yum、yum私有仓库、系统优化

    笔记 1.晨考 1.文件的三种时间属性,每一种时间属性在什么情况下改变 atime : 访问时间 mtime :修改时间 ctime :修改属性时间 2.权限的类型 可读(r, 4) 可写(w, 2) ...

  6. Solution -「多校联训」最大面积

    \(\mathcal{Description}\)   Link.   平面上有 \(n\) 个点 \(A_{1..n}\),\(q\) 次询问,每次给出点 \(P\),求 \[\max_{1\le ...

  7. [入门到吐槽系列] Webix 10分钟入门 二 表单Form的使用

    前言 继续接着上一篇的webix入门:https://www.cnblogs.com/zc22/p/15912342.html.今天完成剩下两个最重要的控件,表单和表格的使用.掌握了这两个,整个Web ...

  8. Welcom to my studyspace! 欢迎来到我的学习空间!

    由于新手,博客才刚开始起步,用于记录我的学习,博客的建设后续需要将其完善 对我的博客进行diy 用于分享我的学习经历,一些笔记,还有一些小小的心得

  9. java 人机猜拳 游戏

    人机猜拳-游戏 掌握类和对象的使用,掌握方法的定义和返回值,掌握封装的运用 定义一个电脑类:Computer.java 点击查看[Computer.java]代码 /** * @Title: 电脑类 ...

  10. 传输层隧道技术之lcx内网端口转发

    传输层技术包括TCP隧道.UDP隧道和常规端口转发等.在渗透测试中,如果内网防火墙阻止了指定端口的访问,在获得目标机器的权限后,可以使用IPTABLES打开指定端口.如果内网中存在一系列防御系统,TC ...