IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 如何做好Code Review -> 正文阅读

[人工智能]如何做好Code Review

时光匆匆流逝~

今天是工程能力学习的最后一篇笔记了!

首先给坚持努力的自己呱唧呱唧!

然后搬好前排小板凳

学习啦!

本节课为《如何做好Code Review》,内容包括:为什么要做好Code Review、如何做好Code Review、例子:Python代码的Code Review、如何成为一个好的reviewer和公司针对Code Review的措施五个方面。

为什么要做好Code Review

Code Review是提升代码质量的最好方法

强化Code Review是提升代码质量的第一选择。

在代码开发过程中,我们越早发现问题、定位问题,在修复问题时付出的成本越小。

大约有50%以上的bug,都是在做Code Review时发现的。前期做好Code Review,后期将会减少反复修改等不必要的复工。

Code Review能够在团队内传递知识

从知识传递的角度看,Code Review是极为重要的。

做好Code Review,能够帮助团队传递知识、沟通交流、互相学习,能够提升学习能力、提升编写代码能力、提升代码质量、提升工作效率、降低项目风险。

另外,基于codebase可以使我们了解项目全局,培养系统的思考方式。

Code Review是辅导怎么写代码的最好方法

我们要意识到,做Code Review可以学习到别人的经验,同时也可以向别人传递我们的经验。

如果我们想辅导别人,最好的办法就是让对方先写一段代码,我们对他的代码进行Code Review。在辅导他人的过程中,我们可以快速地发现问题,从而帮助改进。

做好Code Review 可以增加公司对最顶级开发者的吸引力

工作中是否有Code Review对于公司或团队来说非常重要。不但对于公司或团队内的人员有所提升,而且能够吸引出色的开发者加入开发团队。

未做好Code Review的公司或团队有如下特点:

①代码质量差。

②团队内人员备份差。

③其人得不到有效的辅导,提高慢。

为什要提高代码质量?

①提高代码质量可以提高代码的可读性。

②提高代码质量可以提高代码的复用性和参考性。

③提高代码质量可以减少bug出现的风险。

④提高代码质量可以减少后期补丁的风险。

⑤提高代码质量可以降低代码失控的风险。

⑥提高代码质量可以降低项目重构和升级的麻烦。

为什么要提高写代码的能力

①代码能力如果停滞不前,对于个人而言,将导致职业危机。

②代码能力如果停滞不前,对于团队而言,将意味着团队没有成长。

Code Review是一个非常重要的提升代码质量和代码能力的手段。无论是从个人发展角度,还是团队发展角度,我们都需要重视Code Review。

如何做好Code Review

在Code Review中可能发现的问题

→ 拼写错误;

→ 未优化的代码;

→ 不必要的复杂代码;

→ 已经实现过的代码,又重复实现;

→ 注释不全;

→ case没有覆盖全等等问题。

在Code Review中要有一个好的态度 要做到以下几点

(1)对所有检查的代码逻辑要做到“完全看懂”,对于审核的代码,熟悉程度要做到“如数家珍”。如果在审核代码后,对代码的逻辑和背后的原因仍然很模糊,则是一个失败的Code Review。

(2)好代码的标准,不仅仅是“可以运行通过”,在正确性、可读性、可重用性、可运维性等方面上,都需要综合考虑。

(3)建立Code Review和写代码一样重要的意识。即:

①Code Review和写代码一样,也有产出,即产出更高质量的代码。

② 审核代码在很多情况下比写代码还要辛苦,需要理解和找出问题等。

(4)以提升代码质量为最终目标。

(5)要投入足够的时间和精力。

①审核代码花费的时间经常和写代码一样多,有时甚至比写代码的时间更多,要有时间意识。

②要有责任意识。如果出现bug,不仅仅是写代码人员的职责,也不仅仅是QA的职责,代码审核者也需要承担相当大的责任。

在Code Review之前,一流代码的特性

在这里插入图片描述

一流代码有以下特性:①高效性;②鲁棒性;③简洁;④简短;⑤可共享;⑥可测试;⑦可移植;⑧可监控;⑨可运维;⑩可扩展。

将以上十条标准进行总结精简,可归纳为:

①代码的正确和性能;

②代码的可读和可维护性;

③代码的可运维和可运行;

④代码的可共享和可重用;

在Code Review时,综合考虑以上一流代码的特性,可以快速提升代码质量、提升编写代码的能力等。

在Code Review时 需要有对bad code 进行简单判断的能力

除了要了解一流代码的特性之外,在Code Review时,需要有对bad code 进行简单判断的能力。通常bad code有以下特点:

①5分钟内不能看懂的代码。

不能快速看懂的代码,一定是有问题的代码,可以先抛回给编写代码人员进行修正。一般一个函数的操作不能超过6个step,如果超过这个数量,则需要重新调整编码逻辑。

②需要思考才能看懂的代码。

好的代码阅读时基本不用动脑子,甚至看注释就能看懂。

③需要来回翻屏才能看懂的代码。

好的代码,经常在一屏内就是一个完整的逻辑。

④没有空行或注释的代码。

在Code Review时,发现不会用段落、不会写注释的代码,肯定不是好的程序员写的代码,可以直接打回给编写代码人员进行修正。

Code Review的注意事项

①在必要时,review的双方做面对面的沟通。

面对面沟通并不是单指当面沟通,还包括云共享、电话、视频沟通等。在沟通时,对于背景、关键点等应进行说明,便于reviewer的理解。在必要时,应提供设计文档。

②对于关键模块,应该建立owner制度。

所有提交的代码,必须由owner做最终确认。由owner掌握全局,并建立明确的责任关系。

③检查中发现的问题,要一追到底。

④要注意细节。对每一行提交的代码,都要进行检查。

⑤Code Review的方式,要小步快跑。每次提交review的代码量不要太多,降低复杂度。在特殊情况时,比如一个新模块的构建,最好逐步完成,通过多次进行提交。

⑥要为Code Review预留出足够的时间。Code Review VS Coding的时间,有时可能达到1:1。在这里需要考虑到有时会做大的修改,科学地规划工作量,尽量避免出现时间倒排。

⑦注意每天 review代码的数量不宜过多。

Code Review的步骤

在这里插入图片描述

Code Review的步骤为以下几点:

Step1:先看系统全貌

不深究细节,浏览系统全貌,理清模块划分的逻辑、模块间的关系、如何构成的整个系统等。

Step2:进入模块级别

同样不深究细节,浏览模块内的全貌,判断模块切分是否合理,理清模块内的逻辑,明确关键数据、关键的类和函数等。

Step3:理清类、函数内部的逻辑。

Step4:进入细节。

比如Layout、命名等。

人为因素

除了代码上的问题,在Code Review过程中还会有一些人为因素,例如:

①QA人员

好的QA人员不仅仅会发现系统中的bug,还会质疑或提出产品需求,挑战或优化系统架构和实现方式。

②Code Reviewer

好的代码审核人员不仅仅指出代码表面的问题,还会检查系统需求分析的质量、接口或函数定义的合理性、模块划分的合理性、系统关键机制的合理性等。

例子:Python代码的 Code Review

以Python为例,从Python的编码规范和Python编程规范的部分说明两个维度来看一下Code Review的细节。这些Code Review细节,在其他语言中基本都是相通的。

Python的编码规范

(1)代码要写的漂亮。

(2)代码要明确直接,不要含蓄表达。

(3)代码要简洁,一个函数可以实现的功能就不要写两个函数。

(4)代码深奥胜过代码复杂。代码可以写的深奥难懂,但是不能写的过于复杂。

(5)代码要平铺直叙,不要层层嵌套。

(6)代码要做到合理间隔。

(7)代码可读性非常重要。

(8)代码要有普适性。尽量规避代码特殊性,用最简洁最通用的代码来实现。

(9)代码要实用。

(10)要重视所有发现的错误。

(11)代码逻辑要清晰。在含糊混乱的面前,我们要拒绝猜测。读写代码时,不要出现“好像”、“可能”、“似乎”等猜测。当一段代码很难懂的时候,代码一定存在问题。

(12)写代码要注重行动。

(13)代码实现方法要简洁。如果一个方法很难解释,就意味着这个方法存在一定的问题。

(14)要重视命名空间的使用。

关于Python编程规范的部分说明

Python编程规范有九个维度。

(1)模块的划分

我们要对模块有概念,这是整个系统的基础。

①一个.py文件是一个模块。

②模块的划分对软件的长期维护非常重要。

③每个模块都应该有特定的功能。

比如:配置文件的读取,网页文件的写入,网页文件的解析,一个内存数据表,一个抓取的线程等等。

④多个本应独立的模块,写到一个.py文件中是常见的错误。从Code Review角度看,首先就是要看模块切分的对不对。

( 2 )数据的封装

在Code Review时,要着重注意数据是否封装这一问题。

( 3 )import

Import在使用过程中,禁止使用from xxx import yyy语法直接导入类或函数。禁止使用from xxx import *这样的方法。这样做的目标是:容易判断代码中使用外部变量或函数的来源。

如果使用禁止中的语法,会大大增加判断来源的难度,以及代码阅读的难度。

在Code Review时,遇到这种情况,及时将代码打回给编程人员进行修正。

( 4 )异常

对于异常的处理有以下几点需要注意:

①异常的使用

使用异常前请需要详细了解异常的行为。不要主动抛出异常,使用返回值。如果一定要抛异常,需要注释进行说明。

②异常的获取强制

除非重新抛出异常,否则禁止使用except:捕获所有异常,不建议捕获Exception或StandardError。

在实际编码中建议try中的代码尽可能少,避免catch住未预期的异常,掩藏掉真正的错误。底线是至少要打印异常的日志,而不是捕获后直接pass通过。

在对异常进行处理时尽量针对特定操作的特定异常来捕获。

常犯的错误是:一是对IO等操作不捕获异常。二是捕获异常区域很大。

③函数的返回值

如果函数会抛出异常,需要在函数的注释中明确说明。

在Code Review时,需要注意上述问题,及时返回给编程人员进行修正。

( 5 )构造函数

对于构造函数有以下几点需要注意:

①规范:

类构造函数应该尽量简单,不能包含可能失败或过于复杂的操作。

②解读:

在构造函数中常出现的错误是:无法判断、或捕获异常。

( 6 )函数返回值

对于函数返回值有以下几点需要注意:

①规范:

函数返回值必须小于等于3个。返回值超过3个时必须通过class/namedtuple/dict等具名形式进行包装。

②解读:

a. 多数情况下的错误,是因为很多人不会思考和设计函数的语义。

函数描述涉及的三要素为:功能描述、传入参数描述和返回值描述。

每个函数都应该有足够明确的语义。基于函数的语义,函数的返回值有三种类型:

第一种类型:在“逻辑判断型”函数中,返回布尔类型的值——True或False,表示“真”或“假”。

第二种类型:在“操作型”函数中,作为一个动作,返回成功或失败的结果——OK或ERROR。

第三种类型:在“获取数据型”函数中,返回一个“数据”,或者返回“无数据/获取数据失败”。

b .另外,函数需要有返回值,对于正确或错误的情况,在返回值中要有体现。

c .还有一个问题是:Python的数据格式不需要定义,过于灵活。当程序规模变大、维护周期变长时,会导致后期极难维护。

应对措施是:多写注释,写清楚返回值说明、参数说明。

在Code Review时,注释未写清楚的代码,一定要打回给编程人员,进行修正、补注释。

( 7 )代码长度

关于代码长度有以下几点需要注意:

①每行不得超过120个字符。避免在终端上显示出现折行。

②函数长度不得超过100行。函数过长会增加理解函数逻辑的难度。Python的函数应尽量控制在30~40行之间。

在Code Review时,代码过长,建议全部打回给编程人员进行修正。

( 8 )空行、空格

关于空行、空格有以下几点需要注意:

①空行

文件及定义之间隔两个空行。比如类或全局函数。类方法之间隔一个空行。

②空格

逗号、分号、冒号前不加空格,后边加一个空格。所有二元运算符前后各加一个空格。

在Code Review时,需要着重注意空行和空格。空行和空格不是可有可无的。空行和空格的存在,是为了增加可读性。不好读的代码,一律打回给编程人员进行修正。

( 9 )注释

关于注释有以下几点需要注意:

Python中的注释有一个特殊之处是docstring,docstring要和“#”注意区分开。

相关规范有:

①使用docstring描述module、 function 、class和method接口时,docstring必须用三个双引号括起来。

②对外接口部分必须用docstring描述。内部接口视情况自行决定是否写docstring。

③接口的docstring描述至少包括功能简介、参数、返回值。如果可能抛出异常,必须使用注释进行说明。

④每个文件都必须有文件声明,文件声明必须包括以下信息:版权声明、功能和用途简介、修改人及联系方式。

在Code Review时,不符合上述规范的,及时打回给编程人员进行修正。

如何成为一个好的reviewer

代码审核的质量,和审核者的代码能力直接相关。代码审核的质量差,反映的是审核者的代码水平。如果作为一个代码审核员不会写代码,就要承认真相,并且要不断提高自己的代码能力。

在这里推荐一些学习资料帮助大家进行学习。

①关于代码的书籍:《编写可读代码的艺术》,《代码整洁之道》。

②综合的书籍:《代码大全》,《201 principles of software development》。

③其他:《代码的艺术》课程,Python Good Coder考试指南。

公司针对Code Review的措施

1、建立高校可运营的代码审核机制,提升代码质量,降低代码评审成本。

①基于平台:icode+bugbye

②代码检查规则分级,分为ERROR、WARNING、ADVICE三类,对ERROR级别阻塞提交。

③通过统计数据驱动代码检测规则的优化。

2、通过工程能力地图考察项目的Code Review情况。

3、所有的Code Review行为,都基于icode平台进行。良好的工具可以帮助更好的进行代码审核

至此,

我们的工程能力笔记讲解

就圆满结束啦!
点击进入获得更多技术信息~~

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:27:11  更:2021-10-13 11:27:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:33:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码