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

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

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



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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

总结笔者的措施:

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

分享者简介

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


                                                        中生代技术群微信公众号

                                                da9312524921e637b684eed7bf3249db58f7badc

目录
相关文章
|
4月前
|
数据采集 编解码 自动驾驶
世界模型 LingBot-World,正式开源!
蚂蚁灵波团队开源世界模型LingBot-World,专为交互式仿真设计。其核心LingBot-World-Base具备高保真、强动态、长时序一致性(支持近10分钟稳定生成)和实时交互能力(≈16FPS,延迟<1秒),依托可扩展数据引擎,从游戏环境学习物理与因果规律,打造具身智能、自动驾驶等领域的“数字演练场”。
1454 1
|
10月前
|
缓存 固态存储 Windows
如何让内存发挥到最大效能?全面优化指南,提升电脑运行体验
电脑内存使用不合理会导致卡顿,本文教你如何优化内存性能。检查内存容量与主板支持上限,考虑升级或调整配置;关闭后台程序、管理浏览器标签、结束异常进程以释放内存;设置虚拟内存、调整视觉效果、定期重启提升效率;必要时增加内存条、选择高频内存、更换固态硬盘。避免盲目清理内存和依赖大内存忽视其他硬件瓶颈。只需合理设置,无需额外花钱,就能显著提升电脑速度。
|
开发框架 .NET 中间件
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
572 8
|
物联网
LLM破局泛化诊断难题,MSSP刊登北航PHM实验室健康管理大模型交叉研究
北航PHM实验室提出了一种基于大型语言模型(LLM)的轴承故障诊断框架,结合传统诊断技术,解决了跨条件适应性、小样本学习和跨数据集泛化等问题。该框架通过信号特征量化方法提取振动数据的语义信息,并采用LoRA和QLoRA微调预训练模型,显著提升了诊断模型的泛化能力。实验结果显示,在跨数据集训练中,模型准确性提升了约10%,相关成果发表于《Mechanical Systems and Signal Processing》期刊。尽管存在计算资源需求高等挑战,该研究为旋转机械的高效维护提供了新思路。
538 2
|
存储 人工智能 安全
实时拦截攻击并响应威胁,聊聊服务器DDoS防御软件
实时拦截攻击并响应威胁,聊聊服务器DDoS防御软件
435 16
|
数据可视化 测试技术 Linux
基于Python后端构建多种不同的系统终端界面研究
【10月更文挑战第10天】本研究探讨了利用 Python 后端技术构建多样化系统终端界面的方法,涵盖命令行界面(CLI)、图形用户界面(GUI)及 Web 界面。通过分析各种界面的特点、适用场景及关键技术,展示了如何使用 Python 标准库和第三方库(如 `argparse`、`click`、`Tkinter` 和 `PyQt`)实现高效、灵活的界面设计。旨在提升用户体验并满足不同应用场景的需求。
369 1
Vue3时间轴(Timeline)
这是一个基于 Vue2 的时间轴(Timeline)组件,支持多种自定义属性,包括时间轴内容数组 `timelineData`、总宽度 `width`、线条样式 `lineStyle`、模式 `mode` 和位置 `position`。时间轴内容数组包含描述 `desc` 和圆圈颜色 `color`。组件提供了丰富的样式选项,如虚线、居中显示等,并支持内容交替展现。适用于多种场景下的时间轴展示需求。
1790 1
Vue3时间轴(Timeline)
|
机器学习/深度学习 传感器 TensorFlow
使用 Python 实现深度学习模型:智能食品质量控制
使用 Python 实现深度学习模型:智能食品质量控制
411 0
|
Java Windows
用Java手搓一个转义工具
本文介绍了转义符的概念及其在编程中的作用,如`\n`、`\t`等,用于表示特殊字符。在Java中,通过`Scanner`接收用户输入,利用`escapeString`方法转义字符串中的特殊字符。示例代码展示了如何实现这一功能,读取用户输入,转义后打印结果。
488 2

热门文章

最新文章