立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

一个结对 / 代码检查过程的学习案例

  • 2007-08-08
  • 本文字数:1302 字

    阅读完需:约 4 分钟

维多利亚大学软件工程组的 Peter C. Rigby 和 Daniel M. German 在 Margaret-Anne Storey 的指导下发布了一个 Apache 结对检查的学习案例,同时也将此文提交到了 FSE2007。这篇文章是 Peter 和 Daniel 发布于 2006 年的、对 Linux、GCC、Mozilla 和 Apache 的代码检查过程进行分析的“开源项目代码检查过程的一个初步检测 ”一文的姊妹篇。

新的案例学习对象是 Apache,目的是找出下面这些问题的答案:

  • 过程:都是在执行哪些检查?是由哪些过程指导这些检查的?
  • 频率和活动:检查的频率是多少?检查的频率是否与开发活动相关?
  • 参与:有多少开发人员参与检查?在一次检查中有多少讨论?
  • 尺寸:多大的构件才应该进行检查?
  • 间隔:多长时间执行一次检查?
  • 缺陷:有多少检查发现了缺陷?

在文章的答案里有两个在 Apache 项目使用并在 Apache 术语表中进行了定义的过程:CRT 和 RTC 的检查过程:

提交后检查**CTR,Commit-Then-Review):一个管理代码变化的策略,允许开发者随意更改代码,但允许后期否决。C-T-R 是一种在延迟决策(lazy consensus)中得出决定的方案,此模型在快速原型开发环境中很有效,但由于缺乏强制检查,可能会导致比 R-T-C 更多的问题。
检查后提交
(**RTC,Review-Then-Commit):提交策略,要求所有的改变得到一致性同意后方能被提交。

“一致性同意”表示要对某个做法进行投票,在结果中至少要有来自项目管理委员会(PMC)的三票赞成票,而且不能有反对票。

在分析检查过程时有一个关于两种检查过程各自优弱点的讨论。与 Apache 不同的是,在商业开发环境中倾向于使用 RTC 过程处理代码检查(这常常都是和风险管理的一个基本思想联系在一起的:宁可丢掉变化,也比让坏的变化进入你的代码库好得多)。这种讨论可以为增加 CTR 在商业开发环境中的生存能力提供令人信服的证据。在目前缺少 CTR 过程相关数据的情况下,对该过程进行的讨论分析也非常重要。

关于在多大的范围内进行分析检查,Apache(以及其它项目)使用“尽早检查、频繁检查”来表达,Apache 尤其以强调“尽可能高频率地执行检查,更短的间隔,更小的构件尺寸”与 Porter et al 的发现形成对比。针对较小的构件对不同的检查方式进行权衡,这也是文中一个重要的讨论主题。

另一个关键性的讨论是主要围绕着调解缺陷进行的:

对于常规的检查来说,讨论的主题就是缺陷。一个好的仲裁人是不会允许参与检查的人讨论任何缺陷以外的事情的。开发者必须修复这些缺陷并向仲裁人报告。

相比之下 Apache 的方法则是这样的:

检查者对缺陷本身并不感兴趣,而是对是什么导致缺陷以及如何修复感兴趣。讨论的中心马上由“发现缺陷”转到“如何修改缺陷”上来了。

文章的结论是“理想的时间是:当一个缺陷被发现时再去寻找解决办法,因为所有的参与者都要明白这个问题从何而来”,从中还发现“传统检查是不受时间约束的”与 Edward F. Weller 的“从三年数据检查中得到的启示 ”中示例的具体对比。

虽然文中数据收集的方法有些问题,与Apache 团队成员之间也缺乏互动,文章还是通过一些有趣的讨论来对照比较各种不同的检查方法,以说明无论是开源还是商业环境都需要建立一个检查方法。

查看英文原文: A case study of Apache peer/code review processes

2007-08-08 02:16845
用户头像

发布了 90 篇内容, 共 13.4 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

基于 xbot 实现微信关键词自动回复

Hanson

微信 微信机器人 自动回复

15款Python编辑器,你都使用过哪一款

千锋IT教育

华为云WeLink直播助力高校毕业典礼:这届毕业生,我们云上嗨

科技云未来

深耕隐私计算技术,瓴羊DataTrust团队喜获殊荣

瓴羊企业智能服务

k8s自定义controller三部曲之一:创建CRD(Custom Resource Definition)

程序员欣宸

Kubernetes k8s 9月月更

一文看懂Mysql锁

六月的雨在InfoQ

MySQL MySQL锁 9月月更 Mysql死锁 Mysql锁粒度

Linux面试最高频的5个基本问题

千锋IT教育

maven入门

楠羽

maven 笔记 9月月更

程序员的摸鱼加速器!

Liam

程序员 前端 测试 后端 Postman

高并发场景下,6种方案,保证缓存和数据库的最终一致性!

C++后台开发

数据库 缓存 高并发 后端开发 C++开发

从零到一,教你搭建「CLIP 以文搜图」搜索服务(二):5 分钟实现原型原创

Zilliz

机器学习 深度学习 搜索引擎

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵社区

通信技术 科技史

2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。请你返回 s 里所有 子字符串的 最大波

福大大架构师每日一题

算法 rust语言 福大大

博睿数据携手亚马逊云科技,助您开启全链路可观测之旅

博睿数据

可观测性 智能运维 博睿数据 全链路 亚马逊云科技

直播预告 | PostgreSQL 内核解读系列第六讲:PostgreSQL 索引介绍(下)

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

构筑校园  “云资环”助力精准防控

科技云未来

关于链路追踪所需要了解的知识

穿过生命散发芬芳

链路追踪 9月月更

高级产品经理必备素养

产品海豚湾

产品经理 职业发展 商业化 9月月更 产品价值

Nacos 安装教程(史上最详细保姆级教程)

nacos SpringCloud 9月月更

数据可视化系列教程之组件构成

云智慧AIOps社区

前端 低代码 开源项目 数据可视化 可视化大屏

# 靠谱:开源IM项目OpenIM压测程序介绍-自己动手压测性能和稳定性

Geek_1ef48b

测试需求平台3-登录打通和产品列表功能实现

MegaQi

测试平台开发教程 9月月更

玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生

数据库 数据复制 数据管理 数据备份 玖章算术

南阳蓝天燃气携手WeLink共创数字蓝天

科技云未来

万物皆可集成系列:低代码对接企企云实现数据集成

葡萄城技术团队

leetcode 206. Reverse Linked List 反转链表(简单)

okokabcd

LeetCode 数据结构与算法

实践分享!GitLab CI/CD 快速入门

北京好雨科技有限公司

企业号九月金秋榜 Kuberetes

Web3大行其道,为何说Zebec值得投资人期待?

BlockChain先知

Web3的流支付代表Zebec,熊市布局的价值逻辑

鳄鱼视界

从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威

StarRocks

数据中心网络架构的需求原则及策略

阿泽🧸

数据中心 9月月更

一个结对/代码检查过程的学习案例_架构_Greg Young_InfoQ精选文章