- 浏览: 1016363 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
一些敏捷团队在实施敏捷开发中忙于编码、忙于Unit Test、忙于沟通、忙于Build等,虽然也有编码审核阶段,但大都浮于表面,流于形式,效果不佳。本文结合实践,介绍笔者对敏捷开发中CodeReview的理解和相关经验。 文/陈序明 黄彦军 敏捷开 发中Code Review的目的及内容 做任何事情,首先要清晰为什么要做,才能有目标和动力把事情做得更好,Code Review 也是如此。只有清晰明确了敏捷团队进行CodeReview 的动机,才能以此为方向开展后续工作。下面我们推荐的敏捷开发中常见的Code Review的目的: 设计合理性Review 在笔者的另一篇文章中《敏捷开发中的架构设计》谈到,敏捷开发中崇尚Code is design,对开发人员提出了比以往更高的要求,即需要开发人员不断地重构出合理的设计。所以敏捷开发中的Code Review也需要承担一部分“结对设计”和“设计把关”的职责。 这部分的Code Review 包括:设计的合理性(如实现方法,数据结构,设计模式,扩展性考虑等),是否存在大量重复代码和其他组件是否有重复的代码,包结构设计是否合理等。 笔者了解的一些项目中, 进行敏捷开发后, 提高了开发效率, 但是设计的质量却下降了。如Repeat Yourself 的现象(特别是跨组件之间的Repeat Yourself 现象);更有甚者,在笔者看到一个某银行的应用中(不是国内的),数据库连接和操作是直接在JSP中写SQL语句。 像这些Bad Design 的例子还是很多的。这些在重构的时候应该由开发人员解决。但考虑到不同开发人员之间技术功底不一,很有必要在Code Review阶段进行Review和讨论。 互为Backup 这是很容易被忽略,但是又很重要的一个Code Review的目的。 我们知道,敏捷开发中强调高质量的代码胜过详细的文档,所以某种程度上来说Code is Document。敏捷开发中的代码承担了一部分Document的职责,即传递技术的作用。 Code Review 中,Review 的开发人员了解代码的设计和实现,传递了技术,开发人员互为Backup,方便后期的维护,也减少了项目风险。 分享知识、设计、技术 这也是很容易被忽略的一个很重要的目的。敏捷开发是一个中央集中控制到个体发挥积极性的过程,中央集中控制的优点就是有统一的视图和控制,经常开大会,开长会,这样知识和经验也较容易集中。敏捷开发中,分散在两个Scrum Team的开发人员之间,如果没有好的机制,相互沟通也会相对较少,造成知识和好的经验无法在整个团队传播。 笔者参加的项目中就碰到了类似情况, 当时我们整个团队分成三个Scrum Team,其中一个Scrum Team负责一个Eclipse 工具的开发, 其中用到的一些功能和知识在其他ScrumTeam上以前都有涉及过。当时负责开发的同事非常优秀而且能力突出,但由于不知道其他Scrum Team同事有这方面的经验,没有很好地分享以往好的经验和知识,以至于最后导致浪费了一些学习的成本。 Code Review是一个学习和享受的过程,一个开发人员的能力有限,而Code Review正是这样的一种机制,让好的知识、设计在团队中分享,实现整体团队的成长和整体的效益最大化。 代码可读性 如上所说,敏捷开发中强调高质量的代码胜过冗余的文档,所以Code某种程度上是Document。敏捷开发中,代码的要求不止是能运行功能正确的代码,而是有了更高的要求,即Codefor maintenance。 可维护的代码,需要清晰,可读性强,这里可读性代码检查不是指代码格式(代码格式可以通过工具检查出),而是指代码语义。在笔者的文章《软件可消费性设计》中有一些这方面的讨论和建议。 Code中的“地雷区”Review 代码中的逻辑,除了业务逻辑,还应该包括技术逻辑。技术逻辑就是实现逻辑, 比如数据库连接打开是否忘记关闭,是否正确使用线程,Exception 处理,密码是否加密存储等。 我把这些最常出现错误的地方,而且是测试不容易发现的地方,称为Code中的“地雷区”。这些“地雷区”在Code Review 中是值得花费一些时间进行维护和检查的。 建议,在整个团队中维护并共享“地雷区”注意事项列表,以及统一的处理方式和机制。并在编码和Code Review过程中都按照团队的最佳实践进行。 发现代码中的业务逻辑错误 业务逻辑指的是代码开发的功能是否符合业务需求,如一个加法函数,检查其是否真的实现了加法的功能。 笔者了解的一些敏捷团队中,把发现代码的业务逻辑错误当做目标和内容,但往往效果都不是很好,基本都是从形式上泛泛检查一番。原因有两个: 1.业务逻辑的检查是从需求到代码的全方位检查,需要花费大量时间,投入产出比失衡。 2.业务逻辑的检查和业务需求紧密关联,已经超出了检查人员的能力范围(一般Code Review是开发人员,不是业务人员)。 笔者认为,发现逻辑错误,不应该是Code Review 的目的和内容。应该是Unit Test,功能测试,集成测试的目的。从投入产出比考虑,不应该花费太多时间在Code Review 阶段去进行逻辑错误检查。 敏捷开发中不推荐的Code Review的目的及内容 下面还有一些常见的Code Review目的和内容被很多团队广泛使用,但作者认为这些并不是敏捷开发中的主要目的和内容,团队应该把时间花费在重要的目的和内容上,而不应该投入精力在下面的这些Code Review目的和内容上。 发现性能问题 有些团队把性能问题,也作为Code Review的目的和内容之一,然后提出一些如String应该使用StringBuilder,而不能使用+,类似这样的看似有用其实无用建议。 笔者认为,性能问题是需要量化的衡量和精确定位, 很难通过Code Review检查出来。而一些粗浅的性能问题可以通过一些工具方便地扫描出来,而无须花费时间去进行Code Review。 如图1是RAD V7.0 (IBM Rati onal Application Developer) 中的Software Analyzer工具带有的Performance检查: 所以笔者认为,开发人员提交的代码,需要是经过工具检查后的代码。而代码审核人员则无须花费时间在性能相关的Code Review 上。具体的性能问题交给性能测试。 发现开源的授权法律问题 开源软件也可以借助一些检查工具, 统一通过工具扫描, 无需在Code Review 阶段花费时间。 其他问题,如国际化,J2EE Best Practice等 这些问题开发人员可以在提交代码之前通过工具发现和解决, 不是Code Review 阶段的职责和目的,也无须花费时间去处理。 像FindBugs 和RAD 这样的工具就具备类似的代码检查功能,如RADV7.0 中的Software Analyzer 工具带有如下的检查功能: 1.设计原则(5):用于面向对象编程的设计原则的规则。 2.全球化(47):基于全球化编码最佳实践的规则,有助于确保代码在局部环境中正确地运行。 3.J2EE 最佳实践(32):基于最佳的 Java™ 2 Platform Enterprise Edition( J2EE)开发实践的规则,以及支持瞄准 IBM® WebSphere® 服务的Web 项目的规则; 4.J2EE 安全性(17):验证代码符合 J2EE 技术安全性需要的规则; 5.J2SE 最佳实践(71):基于最佳的 Java™2 Platform Standard Edition (J2SE)开发实践的规则; 6.J2SE 安全性(9):验证代码符合 J2SE 技术安全性需要的规则; 7.命名(2):关于 Java 代码中命名约定的规则; 8.性能(26):加强在 Java 应用程序中提高性能和减少存储器足迹的建议的规则; 9.私有 API (3):定位那些不属于 Java 代码的 API 的规则。 敏捷开发中如何开展Code Review 在清晰明确了敏捷团队进行Code Review 的目的和内容后,下面介绍如何有效地开展Code Review。 沟通、协作、互助、学习的团队氛围 Code Review 中,Review 人员和开发人员不是对立的关系,而是互助、沟通、协作和学习的过程。团队形成互助、互学的气氛,既能互相增长团队的知识和经验,还能把产品做得更好。 Code Review协作过程: a)先由代码的开发人员向检查人员进行大体的介绍,包括设计思想、数据结构、程序代码结构介绍等。 b)双方进行讨论、交流。 c)检查人员单独进一步进行Code Review,并记录Review结果和建议。 d)由检查人员和开发人员一起,检查人员反馈Code Review结果,并和开发人员一起讨论改进方法,重构。 e)最后把可重用的Code Review的经验总结编码规范,或者记录到“地雷区”中。便于整个团队复用经验。 开展以上过程可以以开发人员为主,辅助以工具。但无须规定系列的文档、流程、Check List 等,这反而会影响开发人员的积极性。 Code Review是发现问题的过程,同时也是学习和交流过程。需要是灵活、自由、主动的态度,而不是行政上的控制和规章流程。笔者建议:和敏捷开发的核心思想一致,让团队明确Code Review 的思想、作用和目的内容后,充分发挥个体的积极性和学习分享的动力。随时随地地进行Code Review,讨论,重构,改进。 增量式Review 大家都知道,软件开发中存在长鞭效应,即一个问题越在后期发现造成的影响会越大,Code Review 也是 如此,如图4所示: 软件的开发过程中, 应该阶段性地进行Code Review,而不是等到所有代码都开发完毕后再做一次性的Code Review。那时如果发现问题,造成的改动成本比增量式的检查来的大得多。 笔者了解的一些开发团队,他们在软件开发完毕,并测试后,才临时确定Code Review的人员,然后再安排半天左右的时间进行Code Review。结果尽管发现一些结构或设计方面问题,但由于修改成本大,也无法进行改进。 正确的方式是,在早期就参与设计开发过程,抱着互助、沟通、协作、学习的思想,阶段性的参与讨论、学习并贡献自己的意见。具体Review的频率、次数则可以由开发人员抱着主动、积极的态度,按照敏捷的思想自己去把握决定。 利用工具进行Code Inspection 有很多的工具可以辅助Code Review : 1.如代码格式检查Checkstyle 工具,检查如过大的类、太长的方法和未使用的变量等这样违反编程规范的问题。 2.RAD中的Software Analyzer工具,可以基于规则进行国际化、J2EE最佳实践、性能、安全等检查。3.CSAR,用于扫描代码检查开源软件等。 4.JDepend,可以检查包依赖关系。 5.CPD工具,Eclipse 的 PMD 插件提供了一项叫做 CPD(或复制粘贴探测器)的功能,用于寻找重复的代码。 6.Eclipse 的Metrics 插件,提供了很多有效地查出代码复杂度的功能。 辅助以工具和自动化流程,能花很少时间轻松完成很多基本的Code Inspection 工作。让团队有更多的时间和精力去做更重要的Code Review。 持续自动化Code Inspection 工具检查可以由开发人员自行检查并修正, 但一种更可持续的做法是自动化的集成工具进行CodeInspection,可以通过自动化脚本在每日进行Build 前进行扫描,并呈现报告给相应人员。 Code Review协作工具 为了快速有效地进行人工Code Review协作,可以使用诸如Jupiter这样的工具辅助进行。可以帮助开发人员有效管理Code Review任务、问题、建议等。 总结 Code Review 的核心是:互助,沟通,协作,学习的过程,这是一个美妙而享受的过程,是跨越需求分析、架构设计、编码等各阶段的过程。敏捷团队应该统一达成Code Review 对产品、对团队、对个人的巨大好处的共识,发挥出个体的积极性,相信会改变“流于形式”的现状,发挥Code Review巨大的威力。 作者简介: 陈序明,IBM公司顾问软件工程师。他目前在IBM中国北京研发中心工作,从事银行多渠道整合(网上银行、手机银行、柜面等)方面的开发和研究,对软件架构、敏捷开发、产品管理和银行业务很感兴趣。 黄彦军,IBM中国软件研发中心软件工程师,2008年在西安电子科技大学获得计算机系统结构硕士学位。目前主要从事中间件、Eclipse插件开发,深入理解C、C++、Java。感兴趣的技术领域包括:分布式计算,网络应用等。 (本文来自《程序员》杂志0912期)
发表评论
-
使用Maven创建JAR工程和打包依赖(转)
2012-10-12 00:29 818添加PLUGINS <plugins> ... -
Eclipse Code Review(代码审查)工具介绍【转】
2011-04-16 01:15 1498最近组内一直在做代码 ... -
闲谈绩效考核——来自项目管理群的讨论[转]
2011-04-14 21:34 956不胜人生 一场醉 说 ... -
项目管理系列文章——关于软件工程在软件整个生命周期的位置[转]
2011-04-14 21:33 858关于软件 工程在软 ... -
项目管理实例—— 点评[转]
2011-04-14 21:32 842查看( 579 ) / 评论( 0 ... -
从工程师到管理者转变——来自项目管理群的讨论
2011-04-14 21:31 852城市兔子—技术主管—北京 说: Hi,各位,大家好。刚吃晚 ... -
项目管理经验谈——来自项目管理群的讨论[转]
2011-04-14 21:23 987项目管理 经验谈——来自项目管理群的讨论 ... -
PM如何整合资源——来自项目管理群的讨论[转]
2011-04-14 21:22 1047空间管理 您 ... -
组织级项目管理实例分享——来自项目管理群的讨论[转]
2011-04-14 21:19 841老蔡 说: 1、 ... -
知识的分享和管理——来自项目管理群的讨论
2011-04-14 21:16 858谷雨霖pharos-cto-北京说: 今天和大家交流最近看 ... -
假如我是一个项目总监/经理——我手写我心[转]
2011-04-14 21:06 1032就国内中小民营企业 而 言,项目总监/经理的角 ... -
假如我是一个部门经理——我手写我心[转]
2011-04-14 20:58 1004假如我是一个部门经理 ... -
项目经理的思维批判
2010-12-07 21:46 767想做好项目经理,就一定要改变你的思维方式。这对于技术出身 ... -
架构组织管理
2010-12-07 21:42 1020架构组织管理的五大 ... -
克服在企业中应用敏捷方法的技术挑战
2010-12-07 21:41 883在企业中应用敏捷方法是一项具有挑战性的任务。实现敏捷不像 ... -
带领团队发挥最大潜能的10个技巧
2010-12-07 21:36 915只有你团队的成员成功了,你才能算是成功的领导者。本文介绍 ... -
工作日志之项目经理篇
2010-12-07 21:35 872大多数研发项目经理都遇到过这种困惑:“作为项目经理 ... -
项目经理要如何看待技术
2010-12-07 21:35 844当上项目经理后,技 ...
相关推荐
敏捷是当前流行的开发技术,但同样需要进行code review。该如何进行呢?
### 敏捷开发中的自动化测试实践 #### 一、引言 随着信息技术的快速发展,软件产品的更新迭代速度越来越快,为了适应这种变化,敏捷开发模式应运而生。敏捷开发强调快速响应变化、用户参与以及持续交付可用软件,...
敏捷开发实践与思考 敏捷开发是一种软件开发方法,它强调团队协作、快速响应变化、灵活适应需求和业务价值的 deliveries。敏捷开发实践的目的是为了提高项目的成功率,降低项目的风险和成本。以下是敏捷开发实践的...
敏捷开发实践包括日常站会、计划会、结对编程、Code Review、Refactoring等。日常站会用于讨论团队成员的工作进度和问题。计划会用于讨论项目计划和任务分配。结对编程用于两个开发者共同完成一个任务。Code Review...
`pivotical-codereview-gitlab` 的配置文件通常位于 `pivotal-codereview-gitlab-master` 文件夹中,包含必要的设置参数,如 Gitlab API 端点、Pivotal Tracker API Token 和项目ID等。 此外,该工具还支持自定义...
2. **Rails与Java的结合**:阐述了JRuby如何让Java开发者利用Rails的MVC架构和敏捷开发理念构建Web应用。 3. **性能优势**:讨论了JRuby相对于纯Java开发Rails应用的性能提升,以及如何利用JVM的优化工具。 4. **...
代码审查(Code Review)作为敏捷开发的重要组成部分,对于提高软件质量和减少bug至关重要。传统的走查方式虽然有效,但在效率和覆盖面方面存在局限性。因此,寻找合适的代码审查工具成为提升软件质量的关键。本文将...
近来写了不少敏捷开发的系列文章,如《敏捷开发中如何开发高质量产品》,《敏捷开发的架构设计》,《我的敏捷开发实践》,《敏捷开发中的CodeReview》等,这些都是关乎方法的。方法固然很重要,但还有另外一部分笔者...
在互联网团队开发中,敏捷开发流程扮演着至关重要的角色,它可以帮助团队克服传统开发模式中出现的各种问题,如需求频繁变动、沟通不畅、项目延期等。 首先,敏捷开发的核心在于灵活性和响应能力。当需求总是在变动...
再来看看提到的“开放模块权限,设置Owner,做CodeReview”,这说明在敏捷开发中,团队应该给予成员更高的自主性,并建立明确的责任制,以提升团队成员的责任感和主动性。通过指定模块的所有者(Owner)并进行代码...
5. **性能测试与Code Review**:性能测试确保软件在实际运行环境中表现良好,而Code Review则保证代码质量,减少错误和bug,提高代码的可读性和可维护性。 6. **Demo与测试阶段**:通过Demo展示,团队可以获取反馈...
以下是敏捷开发流程中的关键步骤: 1. **需求规划和分期**:将需求拆分为可管理的小块,进行优先级排序,然后按照时间周期(如 sprint)进行分期。 2. **需求评审**:团队共同讨论和确认需求,确保理解一致,减少...
有效的研发管理包括明确的职责分配、良好的沟通机制以及敏捷开发方法的应用。团队应当采用迭代开发,将大问题拆分成小任务,便于管理和追踪。同时,持续集成和自动化测试也是保证项目进展的重要工具。 5. 协作与...