`
k1121
  • 浏览: 181107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码Review

 
阅读更多

 在软件开发的项目中, Code Review是保证代码质量非常重要的一个环节,其主要工作是:
1、发现代码中的bug;
2、从代码的易维护性、可扩展性角度考察代码的质量,提出修改建议。

1、代码中的bug必定出现在编码常识和商业逻辑相关的地方:
(1) 编码常识方面的bug: 比如,系统中打开的流/文件/连接等没有及时关闭;或是存在thread safe问题,或是存在性能低下问题等,这类问题对有经验的开发人员是比较容易发现的。在Review之前一定要消灭各种类似拼写、低级的转换等的错误。

(2)、与商业逻辑相关的bug。   这类bug是非常隐蔽的,如果有对产品不熟悉的人参与该产品的项目开发,容易出现这类的bug。为了避免这类bug的出现,除了在Use Case和Test Case中详细描述以正确指导开发人员并在测试时能及时发现它之外,Code Review也是不可缺少的保证环节。在代码review之前需要参与者充分了解被Review内容,并且要对被Review的代码进行阅读,并且对不理解的地方作出笔记。
3 、代码Code Review的步骤 (1)、代码编写者和代码审核者坐在一起,由代码编写者按照Use Case/功能依次讲解自己负责的代码和相关逻辑,从表示层→逻辑层→数据读取层→DB层;
(2)、代码审核者在此过程中可以随时提出自己的疑问,由代码编写者进行解答。
(3)、代码讲解完毕后,参与人员将事先总结的不理解的地方提出,由代码编写者给与解答。

(4)、代码审核者根据审核的结果编写“代码审核报告”,“审核报告”中记录发现的问题及修改建议,然后把“审核报告”发送给相关人员。

(5)、代码编写者根据“代码审核报告”给出的修改意见,修改好代码,有不清楚的地方可积极向代码审核者提出。

(6)、代码编写者 bug fix完毕之后给出反馈。

(7)、代码审核者把Code Review中发现的有价值的问题更新到"代码审核规范"的文档中,对于特别值得提醒的问题可群发email给所有技术人员。

关于Java方面的日本外包应该关注的地方:

1 java编码规范方面检查项

检查项参照java编码规范执行,见《java编码规范(java code conventions)》

2 面向对象设计方面检查项

主要包含以下方面
a)       类设计和抽象是否合适
b)       是否符合面向接口编程的思想
c)       是否采用合适的设计范式

3 性能方面检查项

性能检查在大多数代码中都是需要严重关注的方面,也是最容易出现问题的方面,常常有程序员写出了功能和语法没有丝毫问题的代码后,正式运行时却在性能上表现不佳,从而不得不做大量的返工,甚至是推倒重来。
a)       在海量数据出现时,队列,表,文件,在传输,upload等方面是否会出现问题,有无控制,如分配的内存块大小,队列长度等控制参数
b)       对hashtable,vector等集合类数据结构的选择和设置是否合适,如正确设置capacity,load factor等参数,数据结构的是否是同步的
c)       有无滥用string对象的现象
d)       是否采用通用的线程池、对象池模块等cache技术以提高性能
e)       类的接口是否定义良好,如参数类型等,避免内部转换
f)       是否采用内存或硬盘缓冲机制以提高效率
g)       并发访问时的应对策略
h)       i/o方面是否使用了合适的类或采用良好的方法以提高性能(如减少序列化,使用buffer类封装流等)
i)         同步方法的使用是否得当,是否过度使用
j)         递归方法中的叠代次数是否合适,应该保证在合理的栈空间范围内
k)       如果调用了阻塞方法,是否考虑了保证性能的措施
l)        避免过度优化,对性能要求高的代码是否使用profile工具,如jprobe等

4 资源泄漏处理方面检查项

  对于java来说由于存在垃圾收集机制,所以内存泄漏不是太明显,但使用不当,仍然存在内存泄漏的问题。而对于其它的语言,如c++等在这方面就要严重关注了。当然数据库连接资源不释放的问题也是广大程序员最常见的,相信有很多的pm被这个问题折磨的死去活来。
a)       分配的内存是否释放,尤其在错误处理路径上(对非java类)
b)        错误发生时是否所有的对象被释放,如数据库连接、socket、文件等
c)       是否同一个对象被释放多次(对非java类)
d)       代码是否保存准确的对象reference计数(对非java类)

5 线程安全方面检查项

线程安全问题实际涉及两个方面,一个是性能,另一个是资源的一致性,我们需要在这两方面做个权衡,现在就是到了权衡利弊的时候了。
a)       代码中所有的全局变量是否是线程安全的
b)        需要被多个线程访问的对象是否线程安全,检查有无通过同步方法保护
c)       同步对象上的锁是否按相同的顺序获得和释放以避免死锁,注意错误处理代码
d)       是否存在可能的死锁或是竞争,当用到多个锁时,避免出现类似情况:线程a获得锁1,然后锁2,线程b获得锁2,然后锁1
e)        在保证线程安全的同时,要注意避免过度使用同步,导致性能降低

6 程序流程方面检查项

a)       循环结束条件是否准确
b)        是否避免了死循环的产生
c)       对循环的处理是否合适,如循环变量,局部对象,循环次数等能够考虑到性能方面的影响

7 数据库处理方面

很多code review人员在面对代码中涉及到的数据库可移植性和提高数据库性能方面的冲突时表现的无所适从,凡事很难两全其美的啊。
a)       数据库设计或sql语句是否便于移植(注意和性能方面会存在冲突)
b)       数据库资源是否正常关闭和释放
c)       数据库访问模块是否正确封装,便于管理和提高性能
d)       是否采用合适的事务隔离级别
e)       是否采用存储过程以提高性能
f)        是否采用preparedstatement以提高性能

8 通讯方面检查项

a)       socket通讯是否存在长期阻塞问题
b)       发送接收的数据流是否采用缓冲机制
c)       socket超时处理,异常处理
d)       数据传输的流量控制问题

9 java对象处理方面检查项

这个检查项的基础是对java对象有较深的理解,但现实是很多看过《thinking in java》的程序员,仍然在程序中无法区分传值和传引用,以及对象和reference的区别。这或许就是理论和实践难以结合的问题啊。正所谓知而不行,非真知也。
a)       对象生命周期的处理,是否对象的reference已经失效,能够设置为null,并被回收
b)       在对象的传值和传参方面有无问题,对象的clone方法使用是否过度
c)       是否大量经常的创建临时对象
d)       是否尽量使用局部对象(堆栈对象)
e)        在只需要对象reference的地方是否创建了新的对象实例

10 异常处理方面检查项

java中提供了方便的异常处理机制,但普遍存在的是异常被捕获,但并没有得到处理。我们可以打开一段代码,最常见的现象是进入某个方法后,一个大的try/catch将所有代码行括住,然后在catch中将异常打印到控制台,而且该异常是exception对象。
a)       每次当方法返回时是否正确处理了异常,如最简单的处理,记录日志到日志文件中
b)        是否对数据的值和范围是否合法进行校验,包括采用断言(assertion)
c)       在出错路径上是否所有的资源和内存都已经释放
d)       所有抛出的异常都得到正确的处理,特别是对子方法抛出的异常,在整个调用栈中必须能够被捕捉并处理
e)        当调用导致错误发生时,方法的调用者应该得到一个通知
f)        不要忘了对错误处理部分的代码进行测试,很多代码在正常情况下执行良好,而一旦出错,整个系统就崩溃了

11 方法(函数)方面检查项

a)       方法的参数是否都做了校验
b)        数组类结构是否做了边界校验
c)       变量在使用前是否做了初始化
d)       返回堆对象的reference,不要返回栈对象的reference
e)        方法api是否被良好定义,即是否尽量面向接口编程,便于维护和重构

12 安全方面检查项

a)       对命令行执行的代码,需要详细检查命令行参数
b)        web类程序检查是否对访问参数进行合法性验证
c)       重要信息的保存是否选用合适的加密算法
d)       通讯时考虑是否选用安全的通讯方式

13 其他

a)      日志是否正常输出和控制
b)        配置信息如何获得,是否有硬编码

分享到:
评论

相关推荐

    Gitlab 代码 review 插件

    Gitlab 代码 review 插件是开发者们在进行代码审核时的一个强大工具,它专为内网环境下的 Gitlab 平台设计。该插件旨在优化源码浏览体验,提高团队协作效率,确保代码质量。在本文中,我们将深入探讨 Gitlab 代码 ...

    代码review.ppt

    了解代码review做的ppt,可以帮助人理解代码review的概念

    代码review指南

    代码审查(Code Review)是软件开发过程中的重要环节,它涉及到多个角色和一系列的步骤,目的是在开发初期就发现代码中的错误,提高代码质量,促进团队成员之间的知识共享和技能提升。在这份代码审查指南中,将详细...

    代码Review 文档

    代码审查(Code Review)是软件开发过程中的一个重要环节,它旨在提高代码质量,发现潜在的错误,提升团队协作效率,以及传播最佳实践。以下是一些关键的代码审查知识点,基于提供的文档内容: 1. **定期进行Code ...

    Andriod 代码Review工具 插件

    提供一个很好的代码Review工具。可以设置4个级别,可以对优秀代码进行学习,还可以对有问题的代码进行复查。

    代码review准则

    开发编写代码需要知道的基本准则,仅供参考,非原创,如有雷同侵权请联系作者删除 纯属分享

    jupiter代码review工具

    **Jupiter代码审查工具详解** Jupiter是一款专用于代码审查的工具,旨在帮助软件开发团队提高代码质量和确保代码规范性。代码审查是软件开发过程中的重要环节,它可以帮助发现潜在的错误、提升代码可读性,并促进...

    Coding Review Checklist(代码审查清单).pdf

    本文将根据“Coding Review Checklist(代码审查清单)”的内容,详细解析其涉及的关键知识点。 #### 二、常规项 1. **代码运行性**:确认代码能够正常运行,这是最基本的要求。如果代码无法运行,那么后续的所有...

    PHP-Code-review.rar_PHP codereview_php code review_php代码review

    代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应 用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必 要的风险。

    Java项目开发代码Review常见问题实例.doc

    在Java项目开发中,代码审查(Code Review)是确保代码质量、遵循最佳实践以及提高团队协作效率的关键步骤。本文档将深入探讨在Code Review过程中常见的问题,并提供实例分析,以帮助开发者避免这些问题。 **第一章...

    基于Gitlab的代码审查流程(Code-Review)方案

    代码审查是软件开发中一个至关重要的环节,它涉及对源代码的详细检查,以确保代码符合项目的编码标准和质量要求。代码审查可以借助不同的工具和平台进行,包括GitHub的Pull-Request机制和GitLab的Merge-Request机制...

    Source Insight CodeReview宏,增加使用说明

    **Source Insight CodeReview宏**是专门针对Source Insight这款强大的源代码查看和编辑工具设计的一套扩展功能,主要用于代码评审和统计。Source Insight以其强大的代码导航、语法高亮和实时分析能力,深受程序员...

    java代码评审检查表.xls

    java代码评审检查表:包含java常用代码审查内容

    C++代码评审检查表.xls

    C++代码评审检查表:包含常用C++代码审查内容,以excel表格形式列出,详细清晰

    code review 理解,作用

    代码审查(Code Review)是软件开发过程中的一个重要环节,它是一种同行评审技术,旨在通过其他开发者检查代码来发现并修复错误、改进质量和提高代码可读性。本文将深入探讨代码审查的理解、作用,并结合华为的代码...

    代码评审检查表.xls

    Code Review是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码、测试过程和注释进行检查。 Code Review主要用来在软件工程过程中改进代码质。代码评审检查文档,统一规范文档、适合规范...

    (3)phabricator客户端工具Arcanist之代码提交工具diff(3)

    Phabricator是一款强大的开源代码协作和审核平台,其核心组件之一是Arcanist,一个用于交互式地与Phabricator进行交互的命令行工具。在Phabricator的工作流程中,`arc diff` 是一个关键的命令,它允许开发者将本地的...

    ReviewBoard + Tao-ReviewBoard + SVN 搭建代码审阅平台

    首先,ReviewBoard是一款开源的代码审查工具,它允许开发者提交代码供其他团队成员审核,提供了一个方便的界面来讨论代码变更。Tao-ReviewBoard是Eclipse的一个插件,用于与ReviewBoard集成,使得在Eclipse中可以...

    review board自动提交代码

    是reviewboard为实现自动化提交代码的脚本

Global site tag (gtag.js) - Google Analytics