发布时间:2025-12-09 11:56:13 浏览次数:2
翻译为设计评审,也就是对需求设计进行审核,防止出现异常问题,例如下面的这些
可用性
运维
安全
扩展性
存储
技术选型
服务调用和服务治理
业务监控
复用
根据需求我们需要给出实现方案,如Db 表设计,消息队列设计,代码组织,模块划分,单元测试等等,这是我目前了解到的,我开发的时候还没有做到这么细,也是自己后面努力的方向。
设计好方案以后需要思考是否可以满足我们这次开发的业务需求:
给出设计方案以后,我们可以思考一下,然后隔一天自己Review一下,如果自己觉得没有什么大的问题的时候,请团队内的同事或者产品经理帮忙Review一下自己的设计和分析,在和同事交流和分析的时候,我们往往会get到我们没有注意到的细节和问题,这也就是Design Review 的重要性了,根据我们讨论和分析得到的问题,给出解决方法和方案,然后再Review一下,如果没有问题,我们接下来就可以进入开发阶段了。
在Design Review的过程中帮我们暴露了我们没有考虑到的问题,提前解决总比我们开发到一半才发现自己的设计有问题,需要重新设计要好的多。同时,不要害怕被指出问题,提早暴露问题总比线上出了问题好的多,还有要有开放和空杯的心态,和同事一起分析和解决问题是成长最快的。
翻译为代码审查,大白话就是在代码提交后,由管理员或几个人对提交的差异内容进行审核,一般包括如下
常规项:
安全:
文档:
测试:
Code Review的目的除了提高代码质量,提前发现bug外,还包括统一团队的代码规范,比如经常会碰到有人说你这个变量命名不对,或者这里缩进不应该用tab,甚至这里应当多加一个空白行。而类似架构或者设计模式这样的“大”问题,我个人觉得并不适合在code review的时候去讨论。如果这方面有问题,那说明之前design review没有做好或者有可能根本没有做design review。
像我软内部,我所知道的范围内所有代码都是需要code review的。具体的规则可能每个部门各不相同,比如有的部门给每个组件规定几个owner,改到那块代码必须找至少一个owner做review。有的部门还规定每次code review至少要有一个senior级别以上的码农参与,等等。
从工具上来说,现在的码农还是比较幸福的了。n年以前做code review,就是自己做个bbpack发到邮件上,其实就是一个diff,reviewer就看着windiff,有意见的就拿个小本本记下来:某某行号,某某问题,然后email沟通。
后来车库计划(利用员工闲暇时间随便做点什么的一个计划)里面有人做了一个新的code review工具,叫CodeFlow,极大改善了我们做code review的体验,病毒式地传播到了公司各个部门,可以算是车库计划最成功的项目了。
CodeFlow主要把code review的过程做成了一个聊天式的体验,你对哪段code有意见,直接选取那段code然后加个comment,对方就需要对此做出回应。比如你说这个函数名字起的不够优雅,对方可以采取你的意见修改并把这个comment设置成fixed;当然他也可以认为没必要改而设成won't fix;当然你也可以继续和他撕下去。
当review的作者按照意见修改了一遍代码后,他可以发出一个新的iteration(迭代),然后reviewer们在新的iteration基础上可以再次提出新的意见。
最后每个reviewer可以设置此次review的状态,比如reviewing(正在review),或者waiting(在等作者修改),设成signed off就表示通过了。
总的来说大家对CodeFlow还是挺满意的,它的功能现在基本上都在Visual Studio里面整合了,其他答案也已经有人提到Visual Studio的code review功能了。
code review这事儿,与具体的项目以及人员息息相关。人多真的力量大么?其实不尽然。
就我所知道的范围,比较硬核(强制性)的code review基本上都是发生在一个软件产品的后半段。也就是,软件自身已经成型了,甚至是已经交付了,后续的维护以及版本升级阶段。
如果是从零构建一个全新的软件,以我个人的经验来说,大部分情况下不会也不应该enforce(强制)很hardcore(重量级的)code review,因为那是在浪费时间和精力。为啥?因为在软件还未成型的时候,需求往往也是没有完全理清楚的,每个人理解都不同。一群同床异梦的人聚在一起review,往往最后是一群乌合之众。对于这种情况,我个人是倾向于仰仗个人的(也就是靠大牛)。当然,规模大的话也需要一个团队,适当的review需要,但是不是那种一二三四五死板板的做法,主要是团队leader检查实际的实现是否达到预设要求,我管这种叫单向的review,简单来说,水平好的review差的,大牛的代码大牛自己review即可。
不管是项目前期还是后期,要多构建自动化测试,多构建测试用例。前期因为项目需求不确定,测试难以割裂出来交给专门的团队,这时主要是代码编写者自己写测试代码自测。项目定型之后,就可以也应该组建专门的QA团队负责这个事情了。
其实对于大项目,理想上最牛的码农应该都是QA,并且在项目的初期就介入,进行白盒测试(也就是code review)。但是事实上能做到的应该不多。因为实际的软件开发很多都是需求变来变去,设计和编码是交错在一起的,多大的项目最终落实到个人头上都是一人多角色,即是运动员也是裁判。虽然从软件工程和项目管理角度这样很不好,但是确实是普遍存在。
当然诸如下面许多回答答主所在的软件巨头的成熟产品团队,自然是另外一番景象。我写这个回答的目的只是表达那只是事实的一部分,而且很可能是一小部分。
本文版权归作者所有,欢迎转载,请务必添加原文链接。