代码审查

article/2025/9/15 18:42:05

代码审查:

一种有效帮助提升代码质量的有效途径。

  • 代码审查3W(what why when)
  • 常见的代码审查工具
  • 代码审查流程

1.代码审查3W(what why when):

代码审查:对计算机源代码系统化的审查,常用软件同行评审的方式进行,目的是找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。

1.1 why:

帮助提升代码质量、上下文共享、帮助新人快速融入项目、帮助开发人员成长、帮助在项目中的影响力建设

代价:

  • 专门的时间和精力:选择合适的代码审查方式
  • 可能引起团队成员间的不适:沟通技巧,正向反馈等

1.2 when:

代码变更就可以进行代码审查:

  • 已提交到远程仓库
  • 未提交到远程仓库

代码审查频率和形式:

  • 集中式:团队成员包含审查者和代码作者面对面的进行代码审查。
  • 异步式:借助一些工具随时进行。

2.常见的代码审查工具

代码审查的对象是源代码:不是整个系统的源代码,针对改动的代码进行审查即可。

工具:

  • git
  • svn
  • Gerrit
  • UP(jetbrains)

工具应该可以显示代码变更、使用源码仓库、在线代码讨论、异步审查支持、使用协议(开源协议)等

3.代码审查流程

3.1 范根检查法:

规划(选择需要参加的成员,准备物料,安排会议)-------》概述(针对需要审查的项目和代码做简要的描述,并分配参与人员的角色)------》准备(准备参与者需要审查浏览的项目,记录下发现的问题和疑问,为自己的角色做好准备)--------》审查会议(参与者一起探讨需要重新检查的项目,以便真正发现错误)-------》调整和修复-----》重新规划和代码审查---->不重要的修复则修复后直接进入“跟进”,在跟进环节里验证修复是有效的。

3.2 轻量级的审查流程:

  • 结对编程:直接和代码审查者进行结对编程,编码过程中,审查者就会对代码进行审查并提出相关的建议。
  • 同步代码审查:编码完成后立即或在有效的时间段内,找到审查者和代码进行审查。
  • 异步代码审查:借助工具发起代码请求,可以等待审查结果。

如何进行代码审查:

  • 编码风格
  • 命名规范
  • 功能性
  • 测试覆盖
  • 复杂度
  • 注释
  • 设计
  • 安全

让代码审查更高效。

 1.编码风格

  • 命名风格:

不以下划线或美元符号开头或结束;类名UpperCamelCase;方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,

常量命名使用全大写,单词间用下划线分隔;包名统一使用小写;禁止拼音命名;

  • 常量定义:禁止未定义的常量;长整型赋值需要使用大写L后缀;变量值可穷举,考虑使用枚举;
  • 代码格式: 采用4个空格的缩进,禁止使用tab字符;单行字符限制不超过120个;换行符使用unix格式;运算符左右2边都需要加上1个空格;保留字和括号之间都必须需要空格;多个参数逗号后都需要加空格;左大括号前不换行,左大括号后换行;右大括号前换行,终止的右大括号后换行;
  • OOP规约:面向对象规约;静态方法/变量使用类名访问;复写方法需要@Override;禁止过时的方法/类的使用@Deprecated;包装类型的比较使用equals();
  • 分支控制: switch中,每个case必须使用continue/break/return终止或注释说明到哪个case终止;switch需要对字符串判空;分支逻辑使用大括号;
  • 注释:类/方法注释使用javadoc规范;方法内部单行注释,使用//在需要被注释的语句上方单起一行;无用代码删除,而不是注释;

工具:通过一些plugins。例如Alibaba Java Coding Guidelines、Gradle插件checkStyle、

 2.命名规范

  • 足够长以揭示意图,又不太长难以阅读
  • 使用有意义的名字
  • 范围越大,命名越长;范围越小,命名越短;
  • 避免使用非约性缩写
  • 使用自然语言命名:如英语
  • 使用对应领域的专业名称:如算法名称
  • 不好命名,考虑类、方法职责过多,是否需要拆分重构
  • 一致性

3.功能性

  • 代码是否符合用户意图:真实用户、开发者

功能性验证维度:

  • 输入输出、流程是否正确
  • 边界是否考虑并处理得当
  • 是否高并发的安全问题

4.测试覆盖

软件测试:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

自动化测试的必要性:测试时间会占用总开发时间的20%~40%,一些可靠性要求非常高的软件,测试时间甚至要占用总开发时间的60%。

测试金字塔:

集成度越高的测试,速度越慢。

 测试覆盖率:JACOCO工具

5.复杂度

复杂度高的话:

  • 可读性降低
  • 可维护性降低
  • 缺陷概率高
  • 模块内聚性低

复杂度度量:圈复杂度(V(G)=判定节点数+1)

复杂度优化:

  • 方法抽取
  • 反向表达
  • 单一职责
  • 使用多态

6.注释

  • 帮助理解作者意图
  • 帮助正确使用(README.md文件等)
  • 好的代码即注释,但是代码再可读也不及自然语言。
  • 对外、公共的接口,模块、系统描述,宁缺毋滥等需要写注释

7.设计

  • 提升系统稳健性
  • 提升可读性/可维护性
  • 提升可扩展性

设计维度审查:

  • 是否足够解耦
  • 是否可以使用一些设计模式
  • 是否可以应对一些变化
  • 是否过度设计

8.安全

安全性低带来的问题:

  • 数据容易泄露
  • 程序运行异常
  • 资源消耗异常

安全维度审查:

  • 源码库是否包含凭据
  • 敏感数据是否加密落库
  • 输出是否安全
  • 输入是否安全
  • 权限管控是否正确
  • 返回值谨慎使用null

自动化安全审查工具:

  • sqlmap:sql注入的检测
  • owasp:针对依赖进行安全检测
  • WebCruiser:检测sql注入和web系统的其他漏洞

被审查者:

  • 变更描述要足够清楚
  • 单次改动不要过大
  • 积极接受反馈

审查代码者:

  • 要有度量标准
  • 审查速度
  • 给予良好的反馈

 


http://chatgpt.dhexx.cn/article/cS6edWTQ.shtml

相关文章

java 代码审查_代码审查(Code Review)清单

代码审查可以帮助提高代码质量,避免由于代码习惯而造成的 bug。下面列出的这些要点因该可以作为大部分代码审查的指导,如果是 Java 应用的话,这些建议应该被视作最佳实践。 文档 1. Javadoc 应该在每一个类和方法中添加。 2. 如果是修复某个 bug,应该添加 bug ID。 3. 走捷…

静态代码审查

本篇介绍静态代码审查的意义以及如何在Android studio中集成它们。需要注意的是,这些工具不是万能的,虽然它们能高效且全面地执行代码检查工作,但它们并不具备人类的“逻辑思维”优势。也就是说,静态代码审查工具是无法确保程序逻…

代码审查的必要性和最佳实践

目录 代码审查的流程 代码审查的争议 加班要累死了,完成项目都来不及,还做什么代码审查? 代码审查太费时间,改来改去无非是一些格式、注释、命名之类不痛不痒的问题。 团队的习惯和流程就是不做代码审查,大家都是…

如何审查网页元素

如何审查网页元素 对于一个优秀的爬虫工程师而言,要善于发现网页元素的规律,并且能从中提炼出有效的信息。因此,在动手编写爬虫程序前,必须要对网页元素进行审查。本节将讲解如何使用“浏览器”审查网页元素。 浏览器都自带检查…

代码审查(文档整理)

常用的代码审查工具 git/SUBVERSIONGerritUpsource显示代码变更√√√使用源码仓库√√在线代码讨论√√异步审查支持√√使用协议GPLv2/Apache License 2.0Apache License 2.0付费license 代码审查 范根检查法 轻量级的审查流程 结对编程同步代码审查异步代码审查 代码审查需…

代码审查“查”什么?

让我们来谈谈代码审查(Code Review)。如果花几秒钟去搜索有关内容,你会发现许多论述代码审查好处的文章(例如,Jeff Atwood的这篇文章)。你还会发现许多介绍如何使用代码审查工具的文档,比如我们…

uniapp的uview2.0框架u--textarea组件无法换行,换行无效问题解决方案

问题描述 在使用uniapp的uview2.0框架u–textarea组件时,想要使u–textarea支持换行输入,但是默认不支持换行输入,各种百度,没有找到解决问题的方案,最后只有查看源码如下 但发现源码没有对属性有过多的处理&#xff…

微信小程序textarea问题总结

微信小程序textarea问题总结 1.textarea多行输入框。该组件是原生组件 2.参考文档中的原生组件说明https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html 原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少&am…

JavaFX设置TextArea文本内容

本篇主要内容为设置TextArea的内容,涉及的知识面包括如何添加视图和控制层的关联,调用TextArea的方法设置文本内容,不仅实用于TextArea,还可以设置其它如Button,Label,TextField等组件的文本域或者其它属性…

原生div实现textarea

文章导航 为什么要用div实现textarea关键词实现效果源码示例 为什么要用div实现textarea div 实现 textarea 可以实现高度自适应 关键词 contenteditable: true|false 可以将元素内容区域调整为可编辑 实现效果 源码示例 &#x1f383; index.html <!DOCTYPE html>…

html textarea设置只读属性吗,HTML

HTML中的只读属性用于指定textarea元素为只读。如果文本区域为只读&#xff0c;则其内容无法更改&#xff0c;但可以复制并突出显示。这是一个布尔属性。 用法: Contents... 范例1&#xff1a;本示例使用只读属性在仅可读的输入textarea上写入内容。 HTML Textarea readonly A…

让textarea 只读

网上找到几种方案 都试了下 editable"false" readonly"readonly" disabled"disabled" 不知道是不是语法我写错了 但这么写效果是 &#xff08;顺寻代码和图片一致&#xff09; 第二个和第三个都是不能点 不能修改 第一个可以点可以修改

html页面只读,textarea只读 readonly =true;

Java TextArea 只读问题 TextArea ta new TextArea("",10,15,TextArea.SCROLLBARS_VEICAL_ON报啥错啊。 textarea怎么设置为只读 readonly true; C#语言&#xff1a;Listview控件中加了一个textarea&#xff0c;怎么在前台页面将textarea转化服务器控件&#xff0c;…

如何让textarea不可编辑只可读(博客常用)

如何让textarea不可编辑只可读&#xff08;博客常用&#xff09;。 Textarea的相关属性解释&#xff1a; rows&#xff1a;行高&#xff0c;就是你这个文本框能显示多少行文字 cols&#xff1a;宽度&#xff0c;代表你这个文本框有多宽 readonly&#xff1a;有个值readonly&am…

[评价体系] 1、数据规范化/无量纲化方法

目录 1 数据格式 2 不同属性类型的指标规范化方法 2.1 效益型指标&#xff1a;即该指标越大越好 2.2 成本型指标&#xff1a;即该指标越小越好 2.3 固定型/中间型指标&#xff1a;在某个固定值处最好 2.4 区间型指标&#xff1a;有最佳区间 2.5 偏离区间型&#xff1a;偏…

机器学习学习笔记(3)——量纲与无量纲,标准化、归一化、正则化

量纲、无量纲&#xff0c;标准化、归一化、正则化是我百度了很多次都不进脑子的知识&#xff0c;所以我决定还是放在博客上面。 不过鉴于我查阅了很多资料&#xff0c;说是有许多的坑&#xff0c;所以我也不清楚我的理解和解释是否是坑&#xff0c;具体的就留给各位来帮忙评判了…

数据的无量纲化处理和标准化处理的区别是什么

数据的无量纲化处理和标准化处理的区别是什么 请教:两者除了方法上有所不同外,在其他方面还有什么区别? 解答: 标准化处理方法是无量纲化处理的一种方法。除此之外,还有相对化处理方法(包括初值比处理)、函数化(功效系数)方法,等等。由于标准化处理方法可以与分布…

数据归归一化方法(标准化)

数据归一化方法 数据标准化&#xff08;normalization&#xff09;数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。 数据同趋化处理主要解决不同性质数据问题&#xff0c;对不同性质指标直接加总不能正确反映不同作用力的综合结果&#xff0c;须先考虑改变逆指标…

特征锦囊:特征无量纲化的常见操作方法

今日锦囊 特征无量纲化的常见操作方法 第一招&#xff0c;从简单的特征量纲处理开始&#xff0c;这里介绍了3种无量纲化操作的方法&#xff0c;同时也附上相关的包以及调用方法&#xff0c;欢迎补充&#xff01; 无量纲化&#xff1a;即nondimensionalize 或者dimensionless&am…

数据挖掘——无量纲化

在进行特征选择之前&#xff0c;一般会先进行数据无量纲化处理&#xff0c;这样&#xff0c;表征不同属性&#xff08;单位不同&#xff09;的各特征之间才有可比性&#xff0c;如1cm 与 0.1kg 你怎么比&#xff1f;无量纲处理方法很多&#xff0c;使用不同的方法&#xff0c;对…