团队管理中的代码评审

代码评审在软件项目管理中是经常组织的活动,通过代码评审的工作也确实给我们的团队带来很多的益处,简单谈谈代码评审的感受,你们的团队是否也在进行代码评审(Code Review)的相关工作呢?

1.为什么要组织代码评审

组织代码评审其主要目的是保障我们的代码质量和软件产品质量,其次是团队的学习提高,共同的成长。可以是两个方面的驱动,外在现实中的工作痛点和团队内在战斗力提高的驱动。

(1).实际工作中的痛点:
<1>.团队开发的软件质量越来越差,Bug居高不下,问题层出不穷;
<2>.团队的代码实现对应的业务功能,但却漏洞百出,业务实现的合理性,程序逻辑的严密性,考虑不周;
<3>.团队的代码风格各异,同一逻辑的代码结构,不同的人实现,其写法各异,风格不统一,重复造轮子;
<4>.团队的代码的维护性差、可读性差、可重用性差、灵活性很差,使开发人员开发滞后,运维人员修复Bug很是困扰;
<5>.团队代码中存在潜在的高危Bug(性能问题代码),一般不会出问题,出现问题也不易排查,严重阻塞业务数据的流转;
<6>.开发团队交付的代码质量差,给测试团队带来很多的时间的浪费,低效率操作,使开发团队和测试团队陷入疲惫状态。

(2).团队内在驱动:

<1>.营造团队学习氛围。通过代码评审,团队成员彼此之间学习提高,如何才能写出更高效、更易扩展、更易维护的代码;

<2>.促进团队沟通交流。通过代码评审,团队可以有一个很好的沟通交流机会,提升沟通表达能力,提高团队凝聚力;

<3>.促进团队成长提高。通过代码评审,团队的整体战斗力都得到提高,不断的迭代强化下,团队可以交付高品质的软件产品。

正是基于工作中的痛点和团队内在的驱动,团队才组织代码评审,旨在提高软件质量和团队战斗力。

通过代码评审,由一行行高性能代码,一个个优良方法,一个个高内聚低耦合模块,一个个层次抽离的业务,整个系统质量的提升,由小积大,不断的持续改进,让我们的编码规范成为一种编程习惯。

通过代码评审事项的组织,团队成员的编码水平不断提高,在平时的代码中就可以规避掉一些很基本的错误,减少Bug的产生,同时不断的优化我们的代码,团队中每一个成员都得到提高,可能在其中你是学习者,可能在其中你是辅导者、引导者,都将是对个人和团队能力的提高。

2.代码评审事项评价

(1).好的地方:(正是解决上面提高的痛点和内在驱动)
<1>.代码评审,可以发现潜在的问题,做到风险提前控制;
<2>.代码评审,可以统一编码风格,促使团队形成良好的编码习惯;
<3>.代码评审,促进团队沟通交流、互相学习、改善团队氛围、提高团队凝聚力;

<4>.代码评审,对于提升个人能力和团队能力有很大的帮助,使团队战斗力提高;
<5>.代码评审,可以节省开发和维护成本(易读、可维护、可扩展的代码)、测试成本(代码交付质量高)。

(2).不好的地方:

<1>.代码评审,暂用团队太多时间,过多的讨论问题细节,影响正常工作的进行且发现没有成效;

<2>.代码评审,不是为了提升代码质量、软件质量的目的,而是变成了相关指责、挑剔对方写的代码;

<3>.代码评审,审查会议团队很活跃,审查会议后没有跟踪记录,没有可供数据分析的记录,没有提炼性的产出。

<4>.代码评审,浮于形式,没有任何的奖惩机制做支撑,做好做坏都一样,不能提高团队整体实力和交付软件的质量。

3.代码评审注意事项

针对代码评审中存在不好的地方,为了很好的组织代码评审,让团队的代码评审工作真的见成效,需要注意以下事项:

(1).做好时间把控

代码评审必须做好时间把控,一是为了保证我们的会议高效性,一是为了不影响团队的其他工作的进行,一般控制在30-60分钟。

对于代码评审中的争议问题,短时间内不能给出好方案的,由会议纪要人记录下来,待会议后相关人员讨论,形成方案下次会议宣贯大家。

(2).调整团队心态

宣贯告知团队,组织代码评审的目的和意义,让团队成员摆正心态,具有良好的包容氛围、虚心学习请教的氛围。

团队帮你改进代码,帮你优化你的程序和代码写法,使你提高应该感激;作为问题提出者,能很好的正确引导同事也是个人能力的提高;作为活动的参与者,在审查他人代码的同时,既是一个自我检视的过程也是一个学习提高的过程。

(3).做好会议纪要

为了让我们的活动更好的执行下去,需要做好相关事项的纪要。由代码评审会议的纪要人,将审查会议上被审查人的发现的不符合团队代码规范的地方进行记录,以及在审查会议中有争议的问题进行记录,供以后进行下次代码评审会议的跟踪和以后数据分析的评级。

对于代码评审出的问题,具有团队同性的问题和解决方案,可以整理出来添加到团队的代码规范中,一点点积累规避基础性的问题。

(4).良好奖惩措施

为了更好调动团队积极性和代码评审的成效性,这个可选的原则是,建立良好的奖惩措施。

对于在评审会议评审出的有问题的代码,在下次评审会议时,检视其未做修改或在新的评审中原来的问题还是出现,给予记过,进行小小的惩罚;对于在评审会议积极发现问题代码和提供建议比较多的团队成员,给予奖励,累计一迭代周期后,根据每个人的记佳最多的,进行小小的奖励。

4.代码评审方案执行

代码评审主要是提高交付软件的软件质量和提升团队战斗力,其具体的方案也不拘一格,可根据团队的具体情况制定一个适合本团队的代码评审方案。

不要让代码评审变成团队工作的负担,不要变成阻碍团队做事的屏障,不要让代码评审达不到预期的成效,反而低效率运作,这些都是团队所不需要,如果真的是这种状态团队就需要好好检视一下,是我们没有采用正确的方式来组织代码评审,还是确实代码评审不适合对团队的成长,估计是我们的代码评审的方式方法不对占很大成份,那就要思考如何让代码评审工作达到甚至超过预期的效果。

(1).代码评审规范文档
要进行代码评审的工作,必须要有一个审核的指标和标准,代码规范算是其中之一。代码规范,是团队接受的、认可的、持续改进优化的,是团队都遵守的执行的标准。代码规范可以使团队代码的风格更加统一,可以规避掉一些常见的问题。

如果在评审会议中对某些问题有争议,可参照标准来做衡量,减少不必要的争论,浪费时间;

如果代码规范的标准不合理,听取建议,确实认定不合理,及时改进,知会团队相关人员;

如果代码规范中并未提及的相关标准未,及时追加到代码规范,让代码规范标准更丰富。

如果现在有一份还算不错的代码规范,那就应用与团队,在不断的代码评审会议中,发现共性的问题,添枝加叶,不断的丰富起来;

如果现在还没有一份合格的代码规范,可以让团队成员,每个人提供4-5个代码规范的标准写到报事贴上,填录完毕将建议信息收集整理进行汇总分类,团队根据分类后的数据,讨论某一点是否可以加入我们的代码规范(或是借鉴他人的代码规范,把适合本企业的代码规范相关点整理到代码规范中)。

代码规范标准,不断的迭代丰富起来,我们的代码规范越来越能规避各种潜行的小问题,一些常规Bug和难以理解、难以维护的代码将在每个人的改进中,逐步减少,代码质量,产品质量也得到提高,团队整体水平也能到提高,团队的战斗力得到提高。

(2).代码评审组织形式
<1>.确定审查周期

为保证团队的高效和代码评审确实可以为我们的产品质量提高带来的意义,建议代码评审执行周期为一周,具体在一周的某一天某个时间段,团队可自行协商,可以逐步调整时间,确实保证代码评审的高效性,不要有太多的阻碍的因素和多任务处理并行,不要总是调整就好。

<2>.确定参与人员

老大参与:为确保初次审查活动的带动性,老大参与还是必须的,显示对于这项工作的重视。

项目组成员参与:建议没有紧急任务处理的团队成员都可以参与,这是一个大家沟通交流学习提高的过程。

指定审查会议主持人:主要是根据被审查人提交的相关代码和脚本进行整理,控制审查会议的时间和效率。

指定审查会议纪要人:主要是针对审查会议中的被审查人需要改进的代码问题、团队疑问质疑点、可提炼的共性规则进行纪要。

如果是团队多项目小组任务并行的话,可以分别小组内部组织也可以团队成员一起,参与成员也不要太多,效果不是很明显,小组多的话,小组间可以相互学习和参照对比。

<3>.确定审查内容
一周一迭代的代码评审的审查内容是:审查周期内提交的相关代码和数据库脚本。

主要审查其代码和数据库脚本,有无违犯代码规范和需改进地方,有无明显的业务漏洞、逻辑漏洞以及是否存在性能问题。

其中本次代码评审要审查的总代码数和总存储过程数,以及审查的总人员数,可根据团队具体的情况和会议的时间来控制。
<4>.确定审查形式

A.审查会议前,通知相关参与人,指定主持人和纪要人,被审查人提交审查相关代码和数据脚本。

其中主持人和纪要人,可以由团队成员轮值(提高团队参与积极性),也可固定安排由某人来处理。

B.由主持人就这次会议做简要概述,然后后被审查展示讲解自己的代码,简要概述这段代码的功能,团队一起审查提交人代码。

主持人概述:团队第几次代码评审,本次被审查人是哪几个,审查的代码数和脚本数,上次遗留疑问解决宣贯,上次审查的执行确认。

被审查人概述:这个段代码的功能,代码的层次关系,对团队成员有疑问的业务和技术写法问题,做阐明讲解。

C.针对被审查人存在的问题做讨论,确定是否有问题,并由会议纪要人做相关内容的纪要。

纪要人主要纪要:代码和脚本的编写跟团队代码规范、有问题的业务漏洞和逻辑漏洞以及存在性能问题、争议无解的问题。

D.主持人引导被审查人的相关审查的推进,最后汇总此次代码评审审查人数,每个人的审查出的问题数,总问题数,做好纪要。

<5>.确定奖惩措施
为提高参与度和代码评审的成效,制定代码评审的奖惩制度,可由团队成员大家协商确定,要执行哪些惩罚和奖励。团队达成一致,团队认可,共同遵守。

越多越好,越好玩越好,越有意思越好,大家积极参与提供建议。可以是物质的,可以是娱乐性的建议。
针对提出需要改进,未做改进的小小惩罚一下,娱乐一下;针对累计代码评审周期,问题较少的,给与奖励;为团队其他成员代码指出代码问题比较多的,提供问题指导的,给予奖励。

(如:一次代码评审每人25分,一个月汇总一次,惩罚在每次审查时进行,奖励在汇总时进行,惩罚给大家卖水果、唱一首歌、表演个节目等等)

5.代码评审成效

代码评审工作不需要我们一次做的很到位,必须要做到A\B\C等等,重在逐步的改善,有所成效的提高。

代码评审工作执行一定周期后,需要我们检视一下代码评审工作是否真的可以促进我们的代码质量和产品质量,团队表决。

需要思考问题以及问题相关数据:

(1).代码评审工作对我们的目的有没有推进作用?

(2).代码评审工作对我们的Bug的减少有没有推动作用?

(3).代码评审工作对我们的代码不规范的地方在审查中越来越少?

(4).代码评审工作对我们的团队整体的战斗力有没有促进作用?

(5).代码评审工作对团队中每个人都有提高?团队中每个人的感受也是不一样的?

时间: 2024-10-08 00:01:17

团队管理中的代码评审的相关文章

团队管理中的每日站立会思考

题外话: 我们为什么要做这件事(Why)?如何才能把这件事做好(How)?坚持高效的执行这件事(What)?是否审视评估这件事的成效(Review)? Why:它能给我们带来什么益处?它有 带来哪些坏处?它要达到的目标效果是什么?How:怎样做才能达到预期的目标?如何规避 存在的风险?Waht:我们具体做的事项,坚持.高效.成效的执行,确保目标的达成.Review:是不是达到预期的目标?哪些没有做到位?哪些需要添加?哪些需要删除?(下一个迭代启动) Why让我们思考这件事的意义和目标以及标准:H

同行代码评审过程中的实践经验

声明:该文经我翻译后首次发表在伯乐在线上,不论什么形式的转载都请标明原处. 数百万年前,猿从树上下来,进化出了对生拇指,终于.变成了人类. 我们以相似的眼光来看下强制性代码评审(Code Review):好像是一种能在软件开发这块广阔的领域里将人类从兽里分离出来的东西. 只是,我有时候会从我们的团队成员里听到以下这种评论: "这个项目的代码评审根本就是浪费时间." "我没有时间做代码评审. " "我的项目公布延期了.都是由于我那懦弱的同事还没有做不论什么评

对代码评审的感想(回忆篇)

对代码评审的感想(回忆篇) 回想之前钱老板开代码评审流程的讨论会,有事没去,有些遗憾,所以谈下这个当前最fashion的话题,分享下之前对代码等评审的体验. 之前在CFT的研发氛围还是比较重视代码评审的,完成度也比较好,原因有以下几个: 业务特性.我们是的业务跟钱打交道的,所以一发生问题,损失的都是钱,所以追责很严,惩罚很重,而且罚钱一般都罚老大,所以质量上的规范容易从上往下推动,事半功倍.当然线上出现问题,往往会让QA(质量管理)追着问原因以及要求拿出改进措施,作为小兵也很烦很害怕有木有~ 严

转:几个软件研发团队管理的小问题

几个软件研发团队管理的小问题 最近在与一位总经理交流的时候,他谈到他们公司的软件研发管理,说:"我们公司最大的问题是项目不能按时完成,总要一拖再拖."他问我有什么办法能改变这个境况.从这样一个问题开始,在随后的交谈中,又引出他一连串在软件研发管理中的遇到的问题,包括: . 现有代码质量不高,新来的开发人员接手时宁愿重写,也不愿意看别人留下的"烂"代码,怎么办? . 重构会造成回退,怎样避免? . 有些开发人员水平相对不高,如何保证他们的代码质量? . 软件研发到底需

几个软件研发团队管理的小问题

最近在与一位总经理交流的时候,他谈到他们公司的软件研发管理,说:"我们公司最大的问题是项目不能按时完成,总要一拖再拖."他问我有什么办法能改变这个境况.从这样一个问题开始,在随后的交谈中,又引出他一连串在软件研发管理中的遇到的问题,包括: . 现有代码质量不高,新来的开发人员接手时宁愿重写,也不愿意看别人留下的"烂"代码,怎么办? . 重构会造成回退,怎样避免? . 有些开发人员水平相对不高,如何保证他们的代码质量? . 软件研发到底需不需要文档? . 要求提交代码

使用 Git 来管理 Xcode 中的代码片段

使用 Git 来管理 Xcode 中的代码片段 代码片段介绍 xcode4 引入了一个新 feature: code snippets,在整个界面的右下角,可以通过快捷键:cmd + ctrl + opt + 2 调出来.code snippets 是一些代码的模版,对于一些常见的编程模式,xcode 都将这些代码抽象成模版放到 code snippet 中,使用的时候,只需要键入快捷键,就可以把模版的内容填到代码中. 例如,在引入 GCD(Grand Central Dispatch) 后,当

git 一般的开发流程中的代码管理

一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://[email protected]192.168.1.3:29418/mustang-web 2. 针对某个feature(比如instance-lanuch)开新分支 cd mustang-webgit checkout -b instance-lanuch插一句:每次从master同步代码以后,最好执行pip install -r requirments.txt,保证被人新加的库被安装好可以查看目前拥有的分

团队管理:新业务团队如何结合绩效来度量开发目标

之前有人给我blog留言问过绩效的事情,本篇主要与大家分享一下如何在新业务项目组中结合绩效来度量目标的一些思考,我们先从对绩效.产品开发的认识开始,最后会列出绩效细则.本篇更多从量化角度去看,不考虑绩效分数的激励制度. 敏捷个人和敏捷团队 就像我在使用Scrum来敏捷自己所说的,在我们要求团队以人为本进行管理时,我们不能单方面要求团队把员工当人看,更重要的是员工要把自己当敏捷个人来看,做到在最基本的主动.自律的完成工作基础之上再去发挥你的卓越.我也一直都是这么要求自己的,并且也在把这些想法积极地

使用ReviewBoard进行代码评审经验总结

代码评审 代码评审(CodeReview),顾名思义是对代码进行评审,是软件工程的活动之一. 通过代码评审可以保证代码质量,促进团队知识共享--好处多多. 版本控制与代码评审 软件工程的各个活动总是离不开工具的支持. 代码评审工具首先必须和版本控制工具相结合的. 现在主流的两种版本控制工具:SVN和GIT. GIT有个Google开发的代码评审工具Gerrit,可以在提交前进行代码评审,评审通过之后才允许提交到版本库. 其次,代码托管平台GitLab(号称是GitHub的开源实现)也可以用来进行