团队中的代码审查

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

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).代码审查工作对团队中每个人都有提高?团队中每个人的感受也是不一样的?

团队中的代码审查,码迷,mamicode.com

时间: 2024-10-25 12:39:10

团队中的代码审查的相关文章

如何提高团队代码质量——代码审查的实践

为什么需要代码审查 最近看了一些文章,发现敏捷开发的一些理念越来越多的团队在实践,也觉得敏捷不再像最早提出的时候那么虚,有很多体现这个理念的工具涌现.其中,"如何提高代码质量"的讨论一直很多,敏捷开发中也有好多种提案,最广为人知.但也最不靠谱的应该就是结对编程了,只要没被敏捷洗脑的人都清楚知道这个基本没有实际可操作性,然而这个做法体现的观点是多个人互相监督可以把事情做的更好,这反而是完全没有问题的.所以还有一种方式就是代码审查了,把两人同时写代码改成在不同的时间上一个人写.另外一个人看

git入门(4)团队中git保管代码常用操作

在团队中协作代码时候,一定要熟练使用以下git命令,不至于把代码库弄乱, PS:一定要提交自己代码(git push)时候,先进行更新本地代码库(git pull),不然提交异常 git常用命令 1·.clone相应项目 git clone ... 举个栗子(只是个栗子) git clone https://github.com/saucxs/watermark.git 2.新建分支并且切换到这个分支 git checkout -b 分支名(英文名) git chenckout -b dialy

在团队中如何带领新手——阅读有感

目标 通过引导.任务分配和沟通反馈等方式,让他逐步适应团队正常工作面临的压力.节奏和不确定性.对于一些心理预期过高的领导者,在此阶段应该明白,对于一个新手,还暂时谈不上能力判断和机会给予. 方式 创造良好的工作气氛:信任是第一位的.只有相互信任,才能把工作放手交给新手去做:另一方面,在他们失败的时候依然要给予信任,否则,所有的事情结束点就是“失败”.一个人所取得经验,最大的来源就是失败.良好的工作气氛,也包括各种非正式的交流与沟通,比如聚餐.聚会等等. 定期反馈:可以在每日.每周对新手的工作进行

敏捷团队中测试人员的角色

Karen Greaves和Sam Laing将会在Agile Testing Days 2015上发表主旨演讲,演讲题目为"测试人员正在消亡",Agile Testing Days 2015将于11月9日至12日德国Potsdam举行.小编将会覆盖本次会议报道. 小编对二人进行了采访,关于敏捷是如何影响测试人员角色的,为了缩短测试交付周期,测试人员可以采取哪些措施,敏捷团队中测试人员与其他团队成员之间的协作,敏捷团队中测试人员可以贡献的价值. 小编:我的经验是,敏捷更广泛的普及率正在

ReThought (二): 如何照顾团队中的新人

当我们在说照顾的时候,我们实际上是在给新人减压.当我们在说容忍犯错的时候,我们实际上说你可以犯一两个错误.减压更像是在塑造一种更好的学习体验,或者说更愉快地学习方式. 学习与构建系统 学校的时候,学习倾向于理论性的学习. 工作的时候,学习倾向于应用性的学习. 两种不同方式有着不同的区别,即一个广度,一个深度. 在构建系统的时候,通常我们需要一个基本能工作的系统,其次在系统不断开发的过程中.我们对于深度了解的需求已经变得比广度更为重要. 故而,在一个以产品为主的开发团队中,在早期他们更需要那些有广

测试人员在敏捷团队中扮演的角色

对于开发模式,现在大部分互联网公司都完成了从传统瀑布开发模式到敏捷开发模式的转型,这种转型相对传统的测试人员来说,不论是在角色定位还是在技能栈方面都提出了更大的挑战,那么测试人员应该如何应对呢?下面根据我平时工作的一些总结体会来说说测试人员应该发力的方向,供大家参考: 角色 1: 培训人员 在转型初期,测试人员应该针对开发人员的薄弱环节(即业务技能)进行培训和指导.由于工作任务的差别,开发人员对负责的模块业务和具体实现细节非常了解,但是对周边模块或者业务并不是非常清楚,主要体现在配置和使用方面.

研发团队中引入变化的思路和模式

过程改进是研发管理的本质性工作,如果过程要改进通常意味着我们要引入变化,尤其对当前研发管理工作和流程尚不规范和完善的团队而言,引入变化是必须走的一步.但个人在实践过程中体会到引入变化有时候是一项非常有挑战的事情,如果把握不好可能反而会起到反作用.本文从研发团队如何有效的引入变化的角度出发,对思路和模式进行探讨. 关于团队引入变化,业界也有一些主流方法论,其中受Mary Lynn Manns和Linda Rising两位博士的著作<Fearless Change: Patterns for Int

项目团队中4种组员类型的相应管理方式

在我们的实际软件项目中,管理团队其实比写代码或者实现一个客户的需求更为的有挑战性.因为编程实际上是和机器打交道,而和机器打交道,只要你符合机器预定的逻辑, 一步步迈向解决问题的道路上一点都不难,但是人确实动态变化的,因为人时时刻刻受到各种外部因素的影响.总之,我们可以把组内的人分成四种类型: 1.有意愿有能力 2.有意愿无能力 3.无意愿有能力 4.无意愿无能力 那么对这四种类型的团队成员如何进行管理呢? 1.对于第1种人,授权,充分的授权.比如让其协助管理团队里面的一些事情. 2.对于第2种人

互联网产品团队中Web前端工程师的重要性

国内外各大互联网公司,都有UEx/d|UCD|CDC(Customer Research & User Experience Design Center)团队. 在很多公司会认为,合格的产品经理应该具备技术能力.从另一些角度思考,是否技术人员也需要拥有产品策划能力或设计能力?技术思维与产品思维是相辅相成.缺一不可的.高超娴熟的编码技巧支撑项目快速落地.但拥有了产品的角色之后,能让我们站在更高的角度去解读产品,避免走弯路. 打住,我思考的还不是这些高大上的主题,只是实实在在的前端编码解决方案. 好