在评论中给个人评分与我曾经使用过的大多数成功系统相反,也许是全部。但是20多年来我一直试图达到的目标是减少错误并提高每工程师小时的生产率。如果为个人评分是一个目标,我想可以使用评论。我从未见过需要作为工人或领导者的情况。
一些客观的研究(Fagan等)和许多流行的智慧表明,同级关系促进了旨在减少错误和提高生产率的代码审查。工作中的经理可以以工人的身份参加,但不能以经理的身份参加。注意讨论的要点,为了使审阅者满意,进行更改通常是一件好事,但不是必需的。因此,同伴关系。
无需进一步分析或判断就可以接受的任何自动化工具都很好-C,C ++,Java中的lint。定期编译。编译器确实善于发现编译器错误。记录自动检查中的偏差听起来像是对自动检查的微妙指示。恕我直言,允许偏差的代码指令(如Java一样)非常危险。非常适合调试,可让您快速掌握问题的真相。在记录不好的,50,000条非注释行代码块中找不到您要负责的代码,这并不是一件好事。
有些规则很愚蠢,但易于执行。例如,即使每个switch语句不可达,它们也会默认设置。然后,这只是一个复选框,您不必花费时间和金钱来测试不匹配任何值的值。如果你有规则,你就会愚蠢,它们密不可分。任何规则的好处都应该值得它付出的愚蠢之举,并且应该定期检查这种关系。
另一方面,“它运行”不是审查之前的美德,也不是审查中的辩护。如果开发遵循瀑布模型,则您希望在发现并解决复杂错误之前完成编码的85%时进行复查,因为复查是一种更便宜的查找方法。由于现实生活不是瀑布模型,何时进行回顾在某种程度上是一门艺术,并且构成了一种社会规范。真正会阅读您的代码并在其中发现问题的人是坚决的。持续支持这一点的管理层是一颗高于价格的明珠。评论应该像签到一样,而且要经常进行。
我发现这些东西是有益的:
1)没有风格大战。打开花括号的位置只应在给定文件中进行一致性检查。全部都一样。那很好 同上压痕深度**和tab宽度。大多数组织发现他们需要一个通用的标签标准,该标准被用作较大的空间。
2)`衣衫agged
looking
文字不
line up is hard to read
为内容。
顺便说一句,K&R缩进了五个(五个)空格,因此向权威求助是毫无价值的。保持一致。
3)在审阅之前,应指出要进行审阅的行号不变且可公开获得的文件副本,为期72小时或更长时间。
4)没有即时设计。如果有问题,请记下其位置并继续前进。
5)贯穿开发环境中所有路径的测试是一个非常非常非常好的主意。需要大量外部数据,硬件资源,对客户站点的使用等的测试需要花费巨资,而且不会彻底。
6)如果存在或在开发初期就创建,显示,编辑等工具,则可以接受非ASCII文件格式。这是我的个人偏见,但是在一个当今的主流操作系统中,如果内存不足1 GB,就无法摆脱困境,我不明白为什么文件少于10 MB应该是什么? ASCII或其他一些商业支持的格式以外的格式。有图形,声音,电影,可执行文件以及与之配套的工具的标准。包含某些对象的二进制表示形式的文件没有任何借口。
为了维护,重构或开发已发布的代码,我曾与一群同事坐在一个显示器上,看一看新旧差异,作为同事进入分支机构的门户。我喜欢它,它便宜,快速,相对容易做到。对于未事先阅读代码的人员进行演练对所有人都具有教育意义,但很少改进开发人员的代码。
如果您地理位置分散,与其他人在同一屏幕上交谈时查看屏幕上的差异会相对容易。这涵盖了两个人在研究变化。对于一大群阅读了相关代码的人来说,多个站点并不比一个房间中的所有站点难得多。恕我直言,多个房间通过共享的计算机屏幕和壁橱链接在一起,效果很好。站点越多,会议管理就越需要。经理作为主持人可以在这里赚钱。切记继续轮询您不在的站点。
在同一时间,同一组织具有自动化的单元测试,该测试用作回归测试。真的很好 当然,我们随后改变了平台,自动测试落伍了。正如《敏捷宣言》所指出的那样,审查更好,关系比流程或工具更重要。但是,一旦获得审查,自动化的单元测试/回归测试将是创建优秀软件的下一个最重要的帮助。
如果您可以根据需求进行测试,那么就像女士在《当哈利遇见莎莉》中所说的那样,我将拥有她的一切!
所有评论都需要有一个停车场,以捕获编码以上级别的要求和设计问题。一旦发现某物属于停车场,讨论应在审查中停止。
有时我认为代码审查应该像硬件设计中的原理图审查一样-完全公开,透彻,教程,过程的结束,构建和测试之后的网关。但是原理图审查很重,因为更改物理对象很昂贵。软件的体系结构,界面和文档审查可能应该是重量级的。代码更加流畅。代码审查应减轻重量。
在很多方面,我认为技术与文化和期望一样,与特定工具同样重要。想一想所有“ 瑞士家庭鲁滨逊 ” / 摩登原始人 / 麦吉佛尔的即兴创作,它们会愉悦人心并挑战思想。我们希望我们的东西起作用。唯一的途径是,“智能”可以通过1960年代的AI程序以某种方式抽象和自动化。