代码走查

2023-11-04

转载:http://forthtiger.spaces.live.com/Blog/cns!95D3AD656DAA820A!175.entry
[b]为什么要执行代码走查?什么时候执行代码走查?如何有效执行代码走查?[/b]
一般的看法,认为代码走查是一种非正式的代码评审技术,它通常在编码完成之后由代码的作者向一组同事来讲解他自己编写的代码,由同事来给出意见。

但从实际执行效果来看,成效并不都那么明显,反而很多组织的这种做法有浪费时间之嫌。主要是因为代码走查活动时间有限,而参加代码走查的人之前没有较多的时间来提前了解被走查的代码,故而在实际执行时能被走查的代码所占的比例并不高,同时也发现不了多少本质问题。

那么在项目的执行过程中,如何来解决面临的这些问题呢?结合在过程改进中的实践和软件外包项目的实际来看,我认为要解决这些问题的一个有效方法还是在于如何有效地执行代码走查活动。
  
首先我们要明确为什么要进行代码走查活动,我以为其[b]目的[/b]主要有:
  1、通过代码走查活动,及时了解程序员编写的代码是否符合设计要求以及编码规范;
  2、通过代码走查活动,及时了解程序员在编码过程中遇到的问题,并给以协助,从而达到有效、透明地掌控项目进度的目的;
  3、通过代码走查活动,及时了解代码中可以重用的代码,并将其提取为公共方法或模块,提高代码的可重用性以弥补当前人员设计能力不足的现状。

  要满足上面的三个目的,显然仅仅依靠工具是不能够满足要求的。那么如何执行代码走查活动才会有效呢?

  首先,在系统设计阶段,我们需要明确系统架构、编码规范等技术要求,来制定出代码走查活动需要的Checklist(对于编码规范,当可以利用工具来进行检查时,准备的Checklist中就不需要将工具可以检查的要点再逐一列出来。)下图就是一个Checklist的示例。 [img]http://byfiles.storage.msn.com/y1p1Jh5Mi_Ga8OyEDjXjm4al09g7A1Unr-LTcMQ6gYCr-ngLPiRipihgi6T1uBkUmwjxEMJpfXemC4[/img]
  第二步是确定代码走查时发现问题的记录方式。可以使用文档的方式来记录(这在很多项目中使用),也可以使用缺陷跟踪系统来记录。

  当准备工作完成,且项目进入Coding阶段后,我们就可以正式开始执行代码走查活动了。为了改变以前那种事后检查的弊端,我们将代码走查活动前移到与程序员的Coding同步进行。这样做就是为了及时发现问题及时解决问题。实施的步骤如下:

  1、负责代码走查的人员从建构库中获取需要走查的代码;
  2、阅读代码,并根据前面准备好的Checklist对代码进行检查,看代码是否符合相关的技术要求,以及是否满足业务需求,发现的问题及时记录下来;
  TIPS: 通常可以在阅读代码之前或者阅读完代码之后,利用工具来进行必要的Check。可以利用的工具有:[b]Checkstyle, CodePro, FindBugs, Metrics, JDepend[/b]等等。
  3、阅读代码的过程中,如果发现有可供提取的可重用方法或模块,及时记录并通报给项目的架构负责人,由其负责可重用方法的编写;
  4、及时向程序员通报代码走查的结果,并由程序员对发现的问题进行修改。必要时对代码走查中发现的问题需及时向程序员进行讲解和指导;
  5、跟踪代码走查中发现的问题的解决进展,直到问题均关闭;
  6、每日重复以上的步骤,直到所有功能的编码全部结束为止。
  通过以上代码走查活动的说明,可看出代码走查人员在项目中承担着比较重要的角色。因此安排合适的人来进行代码走查也显得格外重要,可以说直接关系着代码走查活动的最终成效。

  通常我们可考虑安排[b]功能的设计者来负责该功能的代码走查[/b]。这样有几个好处:

  一是功能的设计者对于功能的业务需求比较清楚,这样在做代码走查时就容易了解程序员编写的代码是否能够满足设计的要求和业务需求。其实从另外一个角度来看也是对设计的一种检查;

  二是通常功能的设计者都是较资深的人员,可以为程序员提供有效地指导和协助,从另外一个角度也是对程序员的On-Job Training。

  在实施代码走查的过程中,我们还需要借助工具来提高我们的效率,但切忌过分依赖工具或者仅仅只靠工具。同时也需要转变为了代码走查而代码走查的倾向,因为那样就不能发挥代码走查的作用,并最终达到代码走查的目的。

  从实践来看,代码走查时记录问题的方式也影响到代码走查的效率。这里向大家介绍一个在Eclipse中进行代码走查的插件——[b]Jupiter[/b]。它提供了一种简单而便捷的方式来记录和跟踪代码走查时发现的问题。

  Jupiter将走查结果以XML文件的形式存入SCM系统中,并且每条代码走查的意见直接关联对应代码,可以做方便的代码跳转。最新的安装包可以在Jupiter的网站上下载到:http://csdl.ics.hawaii.edu/tools/jupiter
  下图是Eclipse中安装Jupiter后的界面。
[img]http://byfiles.storage.msn.com/y1p1Jh5Mi_Ga8NkqjMBBaO1-NMMFnE9CHpyeqPNsbJX2dUh_59bfv17ph6BdsF_c5T7eXY22RxMy6k[/img]

  在项目中使用Jupiter时,需要先进行配置。所有配置信息都保存在一个.jupiter文件中,并需将之提交到SCM系统。
  配置完成后,可按照以下步骤来使用:
  1、个人走查(Individual Phase) 代码走查者在本地对代码进行走查,然后建立相关的Review Issue。走查结果会自动保存在一个以.review为扩展名的XML文件中。该文件保存在Eclipse项目所在目录的某个子目录下,通常是项目根目录下的Review子目录。走查完毕,走查者需将.review文件提交到SCM系统。
  2、团队走查(Team Phase) 个人更新本地工程以获得其他走查者的.review文件,然后选择“Team Phase”。这样,所有在个人走查阶段建立的Review Issue都将会在本地呈现。此阶段主要完成问题的分析与指派。最后,将修改后的全部.review文件重新提交到SCM系统。
  3、修改阶段(Rework Phase) 被查代码的所有者,根据走查者的意见对代码做出修改,然后修改Review Issue的状态。

  由于使用Jupiter建立Review Issue是可以与代码关联的,并且是在Eclipse的集成环境下,相比较而言,我们记录Issue就会更加方便,而修改代码时也更容易将Issue与代码相对应。

  按照以上介绍的方法来进行代码走查的项目,在代码品质上都有了普遍地提高。那么,你所在的项目呢?行动起来,相信代码走查这个锦囊能够为你的项目走向成功奠定一个很好的基础。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码走查 的相关文章

  • 如何对xml进行排序?

    我有一个 XML 文件 如下所示
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • 如何在Java中有效地读取由大量小项目组成的大型XML文件?

    我有一个很大的 XML 文件 其中包含相对固定大小的项目 即
  • 从不同的插件执行现有插件的命令/处理程序

    我有一个 RCP 应用程序 其中包含现有命令和处理程序 可以通过编程方式切换视角 我还有现有 RCP 应用程序使用的新插件 我希望这个新插件执行我的 RCP 应用程序的命令 处理程序 可能的解决方案是什么 您可能需要为该命令定义一个处理程序
  • 在 CollapsingToolbarLayout 中设置 minHeight 没有任何效果

    我目前使用 CollapsingToolbarLayout 遇到的主要问题是 无论我尝试什么 工具栏的 minHeight 属性都没有任何效果 我想要的结果是这样的 CollapsingToolbarLayout 具有一定的展开高度和一定的
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 带属性的 XML 模式限制

    在XML Schema中 如何创建元素Age具有restriction允许在元素内部写入最大值为 10 最小值为 1 的整数Age还有元素Age有属性
  • Android 键盘清单未显示在设置中

    我正在制作我的第一个 Android 应用程序 我需要它作为键盘服务 据我所知 清单看起来不错 并且我有一个文件 WifiJoy java 在 com zwad3 wifijoy 包中 以及所有其他文件
  • Eclipse:缺少 Java 构建路径

    我正在尝试使用 Eclipse 来使用适用于 Android 的 Google SDK 教程 我能够让前两个项目正常工作 但是当运行第三个 R java 时消失了 所以我放弃了 我根据练习 3 的解决方案集制作了一个全新的包 它充满了错误
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 尝试通过 Java 8 中的 JDBC-ODBC 连接到 .accdb 文件时出现 ClassNotFoundException

    我正在 Eclipse EE IDE 中的 Java 项目中工作 我必须在其中查询 accdb文件 问题是当我尝试加载驱动程序然后连接到数据库时 它给了我一个异常错误 My code try String filePath myfilepa
  • 什么时候应该使用 XML 而不是 SQL? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 维护一组通用的 Eclipse 首选项

    每当我切换工作区 Eclipse 安装时 我都需要复制 重做首选项 编译器设置 字体大小 系列 代码格式化程序 java代码模板 编辑器模板 代码清理 我想以统一的方式维护这些设置 最好是在源代码控制下 我怎样才能做到这一点 我知道创建新工
  • 在 XSD 中哪里放置版权信息?

    将版权信息放入 XML 架构定义 XSD 时 是否有官方 或半官方 普遍接受的 位置 基于在哪里将版本添加到 XSD 架构 https stackoverflow com questions 2138705 where to add a v
  • 模拟器无法加载

    我正在使用 hello android 教程并通过 eclipse 创建 avd 启动模拟器时不使用图像 它只是显示一个黑色的后屏 中间有 ANDROID 字样 并且在 ANDROID 字样的末尾有一个闪烁的光标 我已按照 T 的步骤安装
  • 带有图层列表的自定义背景以显示对角线?

    我只想创建一个自定义背景 但我不知道如何使用 xml 而不是图像来做到这一点 这是 XML
  • 使用批处理解析 XML 文件以从某些特定节点获取值

    对于每个节点列表有Lists作为其父节点 我想获取 保存前三个节点的变量值 即entry output and token 我知道如何使用 vbscript 来做到这一点 但对我来说 批量解决方案更有趣 请问可以做吗
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • 什么是文件目录,文件目录项的主要内容是什么?

    文件目录是记录系统中所有文件的名字及其存放地址的目录表 表中还包括关于文件的说明信息和控制信息 主要内容如下 1 文件名 文件名分为文件的符号名和内部标识符 id号 2 文件的逻辑结构 说明该文件是否是定长 记录长度及记录个数等 3 文件的
  • USB如何布局走线

    1 先上图 USB分为2 0和3 0 2 USB布局走线需要注意的地方 静电防护 阻抗匹配 同组等长
  • cv::Mat遍历赋值的几种方式

    cv Mat赋值的几种方式 1 前言 2 Mat简介 3 遍历Mat赋值方式 方式一 方式二 方式三 4 测试 5 参考文献 1 前言 背景 获取传感器数据后需要保存成图片 有时需要对里面的元素进行操作 因为是自己开发 不能直接得到图片 所
  • CopyOnWriteArrayList部分源码分析

    CopyOnWriteArrayList部分源码分析 我们都知道ArrayList是基于数组实现的可动态扩容的集合 但是他实际上也是线程不安全的 而在JUC java util concurrent 下有个线程安全的数组集合 就是CopyO
  • django开发电子商城(四)django分页进阶和列表长度控制

    1 在list html中增加bootstrap分页代码 2 增加样式 使分页列表居中 3 修改views py文件 将分页数据传到前端 4 修改list html 根据传到前端的分页数据进行渲染分页条
  • 1035 插入与归并

    1035 插入与归并 根据维基百科的定义 插入排序是迭代算法 逐一获得输入数据 逐步产生有序的输出序列 每步迭代中 算法从输入序列中取出一元素 将之插入有序序列中正确的位置 如此迭代直到全部元素有序 归并排序进行如下迭代操作 首先将原始序列
  • python循环语句for 循环十次_python循环10次写法以及实例代码

    python循环10次怎么写 Python for循环可以遍历任何序列的项目 如一个列表或者一个字符串 语法 for循环的语法格式如下 for iterating var in sequence statements s 例子 for i
  • PHP 实现网页爬虫

    方法一 通过fopen和stream get contents获取html内容 从给定的url获取html内容 爬虫程序 原型 从给定的url获取html内容 通过fopen和stream get contents获取html内容 para
  • vue+typescript与UE4像素流通信笔记

    一 文件准备 1 从搭建好的UE4项目下找到scripts文件夹 拷贝该文件夹 重点文件为app js与webRtcPlayer js 到vue项目下的静态资源文件夹 默认public文件夹 下 如下图 在vue项目的index html下
  • Cocos2d-x的SprideMonkey的JavaScript与C++的交互(二) - 单个全局变量操作

    哇塞最近发现转帖的真多呀 这星期五写的东东 现在满大街都是了 哥哥也不问功名利禄 感觉挺好的 JS火起来我也很开心 呵呵 当时快下班了 这篇写的有些仓促 现在加精一些 首先来理解一下sc gt getGlobalObject 这个同学们就问
  • 第六章 一山不容二虎

    第六章 一山不容二虎 收购规则 6 在同一行业里 同一重量级的收购不会取得成功 一座山上不能同时容纳两只老虎 为什么呢 因为老虎是百兽之王 两只老虎都想称王 最后无法协商 只好用牙齿和爪子较量一番 战败者一瘸一拐地离 去 战胜者舔着伤口在山
  • 从零讲解目标检测的评价指标map及实现

    前言 map是 Mean Average Precision 的缩写 翻译过来是平均精度的平均 有点绕啊 在理解map之前 先问个为什么要引入map 在分类任务中 常使用精确率和召回率作为评价指标 也称查准率和查全率 这是一个简单直接的统计
  • C语言:二进制、八进制、十六进制整数的书写及输出

    目录 一 整型数据类型 二 二进制 八进制 十六进制的书写 1 二进制 以 0b 0B 开头 不区分大小写 数字0 而非字母o 下同 2 八进制 以数字 0 开头 3 十六进制 以 0x 0X 开头 三 二进制 八进制和十六进制的输出 八进
  • make update-api 的由来

    谷歌对于所有的类和API 分为开放和非开放两种 当我们修改framework目录中的java文件时 比如添加API 删除API 声明变量 编译器都需要我们决定API是开放还是非开放 对于开放的类和API 可以通过 Javadoc标签 与源码
  • HTML与CSS详细介绍

    HTML 与 CSS 1 主要内容 2 HTML HTML HyperText Markup Language 就是超 本标记语 超 本 就是表示 内可以包含 字元素 如 图 链接 乐等等 它是 种建 件的语 通过标记式的指令 Tag 将影
  • excel修改服务器名称,云服务器 修改Excel

    云服务器 修改Excel 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 本节操作介绍Linux云服务器切换密钥登录为密码
  • Ubuntu默认的dash带来的问题

    Ubuntu默认dash带来的问题 前述 在这篇文章开始之前 如果不知道什么是dash或者dash与bash的区别是什么 我们可以先轻松的浏览一下小编的前一篇文章 小编不敢保证我们看了之后就对bash dash了解透彻 但是小编认为阅后对b
  • Eclipse安装SpringBoot插件

    写在前面 接触SpringBoot已经很久了 习惯使用的开发工具是IDEA 今天突然想使用Eclipse来跑一个SpringBoot项目 但是在导入项目是无法启动 意识到 eclipse默认是没有SpringBoot项目的插件的 所以自己手
  • 抖音泛知识交易系统2.0 pay-button 交易按钮

    说明 以下方法是使用Hbuilder建立的项目 由于pay button是新增组件 框架暂未适配 因此需要使用原生组件混合的方式接入 使用Hbuilder新建项目之后 1 在根目录新建vue config js文件 vue config j
  • 代码走查

    转载 http forthtiger spaces live com Blog cns 95D3AD656DAA820A 175 entry b 为什么要执行代码走查 什么时候执行代码走查 如何有效执行代码走查 b 一般的看法 认为代码走查