|
|
|
|
移动端

44 做代码复查

《高效程序员的45个习惯:敏捷开发修炼之道》本书总结并生动地阐述了成为高效的开发人员所需具备的 45个习惯、思想观念和方法,涵盖了软件开发进程、编程和调试工作、开发者态度、项目和团队管理以及持续学习等几个方面。本节为大家介绍做代码复查。

作者:钱安川/郑柯 译来源:人民邮电出版社|2010-03-04 08:57

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


44 做代码复查

"用户是最好的测试人员。别担心--如果哪里出错了,他们会告诉我们的。"

代码刚刚完成时,是寻找问题的最佳时机。如果放任不管,它也不会变得更好。

代码复查和缺陷移除

要寻找深藏不露的程序bug,正式地进行代码检查,其效果是任何已知形式测试的两倍,而且是移除80%缺陷的唯一已知方法。

--Capers Jones的《估算软件成本》[Jon98]

正如Capers Jones指出的,代码复查或许是找到并解决问题的最佳方式。然而,有时很难说服管理层和开发人员使用它来完成开发工作。

管理层担心进行代码复查所耗费的时间。他们不希望团队停止编码,而去参加长时间的代码复查会议。开发人员对代码复查感到担心,允许别人看他们的代码,会让他们有受威胁的感觉。这影响了他们的自尊心。他们担心在情感上受到打击。

作者参与过的项目中,只要实施了代码复查,其成果都是非常显著的。

Venkat最近参与了一个日程安排非常紧凑的项目,团队不少成员都是没有多少经验的开发者。通过严格的代码复查过程,他们可以提交质量极高而且稳定的代码。当开发人员完成某项任务的编码和测试后,在签入源代码控制系统之前,会有另一名开发人员对代码做彻底的复查。

这个过程修复了很多问题。噢,代码复查不只针对初级开发者编写的代码--团队中每个开发人员的代码都应该进行复查,无论其经验丰富与否。

那该如何进行代码复查呢?可以从下面这些不同的基本方式中进行选择。

通宵复查。可以将整个团队召集在一起,预定好美食,每个月进行一次"恐怖的代码复查之夜"。但这可能不是进行代码复查最有效的方式(而且听起来也不太敏捷)。大规模团队的复查会议很容易陷入无休止的讨论之中。大范围的复查不仅没有必要,而且有可能对整个流程造成损害。我们不建议这种方式。

捡拾游戏。当某些代码编写完成、通过编译、完成测试,并已经准备签入时,其他开发人员就可以"捡拾"起这些代码开始复查。类似的"提交复查"是一种快速而非正式的方式,保证代码在提交之前是可以被接受的。为了消除行为上的惯性,要在开发人员之间进行轮换。比如,如果Joey的代码上次是由Jane复查的,这次不妨让Mark来复查。这是一种很有效的技术。

结对编程。在极限编程中,不存在一个人独立进行编码的情况。编程总是成对进行的:一个人在键盘旁边(担任司机的角色),另一个人坐在后面担任导航员。他们会不时变换角色。有第二双眼睛在旁边盯着,就像是在进行持续的代码复查活动,也就不必安排单独的特定复查时间了。

在代码复查中要看什么呢?你可能会制订出要检查的一些特定问题列表(所有的异常处理程序不允许空,所有的数据库调用都要在包的事务中进行,等等),不过这里是一个可供启动的最基本的检查列表。

代码能否被读懂和理解?

是否有任何明显的错误?

代码是否会对应用的其他部分产生不良影响?

是否存在重复的代码(在复查的这部分代码中,或是在系统的其他部分代码)?

是否存在可以改进或重构的部分?

此外,还可以考虑使用诸如Similarity Analyzer或Jester这样的代码分析工具。如果这些工具产生的静态分析结果对项目有帮助,就把它们集成到持续构建中去吧。

复查所有的代码。对于提升代码质量和降低错误率来说,代码复查是无价之宝。如果以正确的方式进行,复查可以产生非常实用而高效的成果。要让不同的开发人员在每个任务完成后复查代码。

切身感受

代码复查随着开发活动持续进行,而且每次针对的代码量相对较少。感觉复查活动就像是项目正在进行的一部分,而不是一种令人畏惧的事情。

平衡的艺术

不进行思考、类似于橡皮图章一样的代码复查没有任何价值。

代码复查需要积极评估代码的设计和清晰程度,而不只是考量变量名和代码格式是否符合组织的标准。

同样的功能,不同开发人员的代码实现可能不同。差异并不意味着不好。除非你可以让某段代码明确变得更好,否则不要随意批评别人的代码。

如果不及时跟进讨论中给出的建议,代码复查是没有实际价值的。可以安排跟进会议,或者使用代码标记系统,来标识需要完成的工作,跟踪已经处理完的部分。

要确保代码复查参与人员得到每次复查活动的反馈。作为结果,要让每个人知道复查完成后所采取的行动。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Fedora Core 5 Linux架站与网管

Linux出色的网络功能堪称当今操作系统中的佼佼者,无论在功能还是在支持能力上都有令人满意的表现。Linux内置的多个服务器,几乎包含了目前...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊