代码检视等于需求评审吗?

简介: 代码检视到底等不等于需求评审?代码检视到底是优点多还是缺点多,我们在工程项目中到底应不应该使用代码检视,如何使用代码检视?本文就大家一起了解一些代码检视的那些事。

代码检视相信大家都非常熟悉,质量管理体系是非常重视代码检视的。然而随着软件工程技术的快速发展,代码检视的作用似乎也不再局限于只是走查一些代码层面的缺陷。



越频繁的代码检视,越有助于质量管理,越有助于需求管理!

从华为出来的QM 武老师,现在就职于腾讯,从事质量管理工作。她曾经在Tid大会上发表过在腾讯推广的“代码检视”,谷歌、facebook常用的“提交前线上检视”。武老师追求的是通过技术骨干检视代码,严格控制交付进入集成环节。同时武老师也在追求快交付,规定每次交付的代码不能超过150行,一方面是方便技术骨干进行检视,另一方面也是引导团队将工作拆解,在合适的交付物上快速进入实现、检视、修改的演进,快速的找准方向。通过这种快,大量缺陷在检视环节被发现,极大提升了产品的质量。

笔者在实践中,也在追求快。每个交付被拆解到100-300行代码,团队成员一写完代码,就被笔者要求召开代码检视(上午写完,下午开始,下午写完,第二天上午开始)。通过这种快速的检视,团队在代码检视阶段发现的缺陷远超过往4倍以上,极大地提升了交付质量。

然而笔者在实践过程中发现代码检视的另一个重要的意义,它实现了面向团队的交付。在检视过程中,团队讨论的焦点,其实是需求(低级错误基本被coverity干掉了)。

通过讨论,笔者发现过自己漏掉的不少需求;
通过讨论,笔者发现团队对需求的理解越来越清晰;
通过讨论,笔者发现团员的思维越来越活跃,需求方向越来越准确。

笔者期望通过需求评审、特性澄清让团队理解需求,但效果很差,结果在这种频繁的代码检视中,越辩越明,水到渠成。

另一方面,集体检视的做法,让团队在潜移默化中向“全功能”转变,这个作用无可限量。

集体检视越频繁,团队思考效率越高,交付效率大幅提升!

集体检视经常被人诟病的一点:团队集体参加,浪费时间。这也是武老师和我发生分歧的地方。武老师认为开会需要召集人员,需要耗费时间,不够“快”,另一方面,则是一个人能完成的检视,让多个人来完成,效率低。我得承认的确还不够“快”(只能尽量快),但是我反对“效率低”这个论断。

在生产流水线上,工人重复拧螺丝增加熟练度,高级工人过来检视一下做的是否到位,非常高效。但是程序员做的工作很少是重复性,程序员从事的更多是创造性的工作,这类型的工作需要思维的活跃,闭门造车,闭关修行绝对不是推荐做法,相反,开放交流才能引古论今,创造未来。

先不说笔者的案例,我们看看团队中常见的情况。菜鸟问老员工某个问题,老员工不耐烦的说看一下代码就行了,这还不会。另一个场景,热心的老员工耐心的教菜鸟怎么解决。两种情况,哪种情况老员工的工作更高效?热心的老员工效率绝不会差。

我们常听到一个词“慢即是快”,停下来总结一下,会让未来更高效。交付压力越大,老员工越没时间去总结,菜鸟的询问是让老员工适时慢下来总结一下。说概念有点虚,我们看案例吧,某咨询公司有一个团队,每个人发20粒咖啡豆,如果别人帮助了你,你就送给他咖啡豆作为鼓励,结果有一个很nice的老员工,很多人都找他,他经常被打断,但他不仅拿的咖啡豆最多,他的开发效率也是最高的。笔者举这个案例,其实想说明一个论点:交流是高效的捷径。


回到笔者的案例,笔者是很想团队交流,但我没钱买咖啡豆^_^。

因此笔者想在集体检视的环节促进交流。问题来了,怎么让大家活跃交流?常见的集体检视,有人在打瞌睡,有人三心二意,唯有代码作者热情洋溢,滔滔不绝。其实我很希望有人能打断作者,即使问再弱智的问题。为什么没人愿意打断作者呢?因为没有利益,作者讲的代码对我没用,我都懒得思考。改进的措施来了!

试想一个球队,如果每个人都坚守自己的位置,各自为战,结果惨不忍睹。但是如果观察队友的动作,去协防,去跑位,结果将大不一样。这是为什么?利益相关,目标一致。笔者的措施是将故事拆解,一个团队扑在一个故事上。“分工明确”滚一边去,我们要集合力量一个个的攻下山头。当每个团员做的事情都非常接近时,阅读别人的代码,实际上也是在梳理自己的逻辑思路,在帮助自己交付。笔者在实践过程中,通过利益让团队喜欢集体检视,让团队喜欢上这种高效思考的感觉,让团队自发的组织集体检视。

效果:团队超过1/8的时间在集体检视,团队的开发效率提升2倍!(还不计算代码覆盖率的大幅提升)

总结笔者的措施:

1、故事拆解,一个团队扑在一个故事上
2、面向团队的交付,必须经过团队集体检视,才能认可交付
3、快交付,刚写完代码,下个时间段就组织评审。

分享者简介

符章文:2005年毕业于中国科技大学,2010年加入鼎桥通信,目前担任研发团队Team Leader兼负责敏捷推广。个人长期从事软件研发工作,致力于研究提高工作效率的方法。对于敏捷十分推崇,经常思考如何将敏捷实践和项目工作结合,提高团队效率,并将实践总结分享


                                                        中生代技术群微信公众号

                                                da9312524921e637b684eed7bf3249db58f7badc

目录
相关文章
|
算法 Python
LightGBM高级教程:自动调参与超参数优化
LightGBM高级教程:自动调参与超参数优化【2月更文挑战第5天】
2035 2
|
12月前
|
人工智能 数据可视化 API
Deepseek 本地部署“网页版”与“软件版”超级详细教学(deepseek+Ollama+OpenWebUI+Chatbox AI+Cherry Studio)
近期,人工智能领域迎来了一股新的热潮,DeepSeek作为一款备受瞩目的开源语言模型,凭借其卓越的性能和广泛的应用场景,迅速在全球范围内引起了广泛关注。从技术社区到商业领域,DeepSeek的热度不断攀升,甚至有“挤爆”的趋势。这不仅反映了其强大的技术实力,也体现了市场和用户对其的高度期待。 在这样的背景下,本地部署DeepSeek模型的需求也日益增加。本地部署不仅可以避免网络延迟和数据隐私问题,还能根据用户需求进行定制化优化。结合deepseek+Ollama+OpenWebUI+Chatbox AI+Cherry Studio AI等工具,用户可以轻松实现模型的本地化部署,并通过可视化面板
1759 8
Deepseek 本地部署“网页版”与“软件版”超级详细教学(deepseek+Ollama+OpenWebUI+Chatbox AI+Cherry Studio)
|
11月前
|
存储 监控 虚拟化
Hyper V上网优化:提升虚拟机网络速度
要优化Hyper-V虚拟机的网络速度,可从以下几方面入手:1. 优化虚拟交换机配置,如选择合适的交换机类型、启用SR-IOV、配置VLAN和QoS策略;2. 调整网络适配器设置,选择适当的适配器类型并启用VRQ等;3. 优化宿主机网络配置,更新网卡固件和驱动,启用硬件加速;4. 使用性能监视工具监控网络流量;5. 其他措施如启用硬件虚拟化、使用外部存储、配置NLB等。通过合理配置,可显著提升网络性能。
1279 17
|
算法 安全 Go
Go切片删除元素错过这篇你就out了
Go切片删除元素错过这篇你就out了
3966 0
|
小程序 前端开发 Java
社区生鲜团购小程序
社区生鲜团购小程序
1128 0
|
存储 编解码 算法
4K 蓝光与流媒体比较:哪个更好?
4K 蓝光提供无与伦比的图像和声音质量,使其成为重视沉浸式电影体验的爱好者的首选。另一方面,流媒体服务提供了触手可及的庞大内容库,可随时随地访问。在这篇文章中,我们将深入探讨每个选项的好处并提供全面的比较,以帮助你决定哪个更适合您的观看习惯和偏好。
1146 3
|
JavaScript
elementUI/Plus 输入框按回车刷新页面分析与解决
elementUI/Plus 输入框按回车刷新页面分析与解决
elementUI/Plus 输入框按回车刷新页面分析与解决
|
数据可视化
使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
|
消息中间件 网络协议 Java
RabbitMQ消息队列基础详解与安装实例
RabbitMQ消息队列基础详解与安装实例
477 0
|
自然语言处理 算法 搜索推荐
TF-IDF、TextRank关键字抽取排序算法
TF-IDF称为词频逆文本,结果严重依赖文本分词之后的效果。其公式又可以分成词频(Term Frequency,TF)的计算和逆文档概率(IDF)的计算。
481 0