为什么代码走查没有效果

老外的代码走查

有一篇关于代码走查的漫画,一屋子程序员在一起做代码走查,在屋子外面的人数一数 WTF 出现的频率,大概就知道走查代码的质量水平了。WTF 可能有点夸张了,但是这至少说明一件事情——这一屋子程序员至少是真的在审查代码并对代码的水平给出了自己的意见。

(ps. 搜了半天没搜到,不过搜到这一幅,也挺有意思)
image

我们的代码走查

很难想象我们的代码走查会充斥着 WTF ,因为我们的代码走查都很 和谐

我经历过的大多数代码走查都是这么过来的:开发人员把代码写完并已经调试通过了,然后不管是为了满足团队的验收准则,还是因为项目有强制要求,反正找几个同事一起看看,大致流程就是接上投影仪,然后从第一行开始往下念,这里是在干什么,那里是在干什么,正常情况下参加走查的同事大概能坚持个十来分钟不走神,然后眼神就开始迷茫了,等所有代码念完,象征性的提几个大小写或者格式对齐的问题,然后记录到excel里面,大功告成。

代码走查为什么没有效果

为什么我们的代码走查这么和谐呢?看起来并没有起到应有的效果?真是让人百思不得其解的问题。
而在后来和其他的 team leader 沟通时才发现原来所有人都有同样的疑问

为什么代码走查的效果一点都不好?

带着这个问题参加了一场又一场的代码走查会议之后,我找到了下面两个可以说服我自己的答案:

  1. 避免冲突:长期中庸文化熏陶让我们下意识的避免冲突,在会议中指出他人的代码问题会让所有人都不舒服,多一事不如少一事
  2. 代码可读性不高:即使我们能够说服所有人相信走查代码并不是针对个人,并消除掉所有的顾忌,但仍会因为代码本身的问题导致走查的效果不理想

代码可读性的问题相对于中庸之道更加隐蔽。代码走查本质上就是在读代码,如果代码的逻辑层次不清晰,命名混乱,依赖复杂,就会让人难以理解,更谈不上去发现隐藏在其中的bug了。不妨将待走查的代码设想为一个小 baby 的玩具房间,第一个房间刚刚经历了熊孩子的大闹天宫,第二个房间刚刚被勤劳的妈妈整理收拾干净,如果我们的目的是从两个房间里找到一件特定物品,我想大多数人都会认为第二个房间更加容易。

image

image

而且两个问题产生的影响还会叠加——首先,演示代码的同事看起来并不希望有人质疑他的设计,其次,这些狗屁不通的代码我完全不知道是在干啥,所以,我还是抽空刷一刷朋友圈吧……

应对之道

一,让我们不要那么中庸

中庸——这种传统的东方智慧可以帮助我们在处理很多事情时得心应手,不像西方人那么死板,但是软件开发行为以及衍生出来的技术和管理实践都是根植于西方哲学(如信息论、控制论),这种价值观的冲突让东方的程序员在实施代码走查之类的实践时出现各种不适应。

这种不适应是无法在短时间内扭转过来的。我们从出生起就一直在东方哲学的指导下生活,虽然很少有人意识到它的存在,但是几十年的耳濡目染早已深入骨髓。认识的一位管理教练曾经说过一句话让我印象深刻,“改变一个人是很危险的,但是我们可以改变他所处的环境”,我想为了让东方程序员适应这些实践,大概也只能通过下面这些改变环境的办法慢慢来了:

  • 营造安全的技术环境
    明确地声明代码集体所有权会是一个好的开始。确保任何人可以修改任何一段代码,并且鼓励将代码重构的更好的行为,鼓励面对面的方案讨论,避免每个人负责小一块代码,避免局部范围的技术垄断。当尴尬或者负面情绪出现时及时发现和化解(比如可以重申代码集体所有权的原则)。
  • 种子选手的示范作用
    在代码走查会议中,经验丰富且具备强烈责任性的开发人员是优秀的种子选手,邀请或鼓励他们对代码提出自己的看法,发起讨论,其他人会自然参与进来。
  • 让所有人看到这真的管用
    当讨论发生后,要确保讨论形成可以落地的结论,如果有更优的设计就坚决抛弃掉现有的代码并按新设计进行重构,即使仅仅是提出更准确的变量命名也应该在代码走查会议上当场重命名。

二,让代码具备走查的基础

心仪的女神到家里做客,邀请女神参观房间之前我们肯定会先收拾一下,同样的道理,在代码拿到会议上进行走查之前,我们也要先确保代码进行了初步的收拾,比如没有违反团队的编码规范,检查了内存申请和释放是否匹配,异常也正确的进行了捕获,这些动作可以通过约定 Check list 来进行自检,避免走查会议的时间都浪费在这些细枝末节的争论之中。

代码走查应该聚焦于功能实现的完整性和代码架构的合理性,关于第一点本文暂不涉及,代码架构的合理性又由很多因素决定,比如语言、架构、设计模式等等,在《重构》一书中 Martin Fowler 整理了很全面的技巧,在本文中我想重点介绍的是如何控制代码的逻辑层次来提升代码的可读性。

TBD...

三,工具和其他

  1. 一个顺手而强大的 IDE 可以大大降低重构的成本(如 Eclipse),让开发人员重构代码时行云流水,满满的成就感油然而生
  2. 经验丰富的会议主持人,保证代码走查会议是在互相尊重的氛围下进行,确保合理的会议时间安排(时间不宜太长,根据走查的代码灵活安排走查的重点)

我们搞敏捷实践,不管是 scrum xp KANBAN 精益 ,每一种方法都有一套具体的实践,这些单个的实践之间其实是有关联关系的,很少能独立存在,拿代码走查来说,如果团队缺少集体认同的代码规范,或者对CleanCode的理解或价值存在不一样的认知,没有集体代码所有权的意识,没有拥抱变化、互相尊重的心态,缺少实现高扩展性代码的能力、重构的能力,那么做集体代码走查就很难做好。而一旦做不好,团队反过来就会质疑做这个事情的意义,一旦我们对敏捷实践开始质疑,那我们在实施的时候就会更加随意,按《第五项修炼》里的心智模型,这就是一个典型的正反馈系统,这个正反馈系统一旦形成,我们的敏捷转型失败就只是时间问题……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容

  • 代码走查和代码审查是白盒测试方法中的2种。 代码走查: 从参加人员来说,应该是项目的整体参与者,如果项目太大,整体...
    许小小晴阅读 10,202评论 1 3
  • 昨天公司进行了团队评比,其中有一项就是代码走查。目前有两种方式,一种是通过会议进行抽查,一次性多人参加;另一种是通...
    大女人zz阅读 1,026评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,248评论 25 707
  • 图文/巴山雨(简书作者)转载请联系作者授权。 半路出家,非专业选手,画技一般,都是一些习作和临摹作品,权做记录。同...
    巴山雨阅读 302评论 8 2
  • 我想养只猫,在你不在的时候可以做个伴。 习惯了你在身边,只要你不在便疯狂的想念,我知道这样不好。所以总让自己忙起来...
    努力才幸运阅读 345评论 0 0