红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

对 Mob 编程的一些观点

  • 2018-04-07
  • 本文字数:2839 字

    阅读完需:约 9 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Maaret Pyhäjärvi 是 F-Secure 的一名测试人员,她也是《 Mob Programming Guidebook 》的合著者之一。最近,她撰文介绍了自己在 Mob 测试上的经历,以及她的团队是如何使用多功能团队技能集,使团队从持怀疑态度发展为个人及团队具备胜任能力的过程。Woody Zuill 是“#NoEstimates”运动的发起者,也是 Mob 编程实践的共同创造者之一。在 Zuill 看来,Mob 编程不仅为团队成员提供了实时提升,而且通过一系列小规模、可发布的增量方式,提供了一种有效的协作模型。

在 2 月份播出的两集 Agile Uprising 播客中,Zuill 将 Mob 编程实践描述为:

团队中的每位成员开展精诚合作,意在解决“我们在做什么?”,以及“如果要将我们在做的事情变成可交付的成果,我们需要怎样做?”等问题。正是这样的群策群力,使得团队可以同时同地在同一计算机上解决同一问题。

Zuill 在 GOTO 哥本哈根大会上演讲指出,Mob 编程的一个主要特征在于“源源不断的思想融合”。存在于其中的主视角,会使反馈循环自然而然地发生左移。他在播客中给出了进一步的解释,指出为使 Mob 实现工作软件的增量可交付,需要补充一组技能:

不仅是编码人员,而且包括测试人员、数据库专家、产品负责人或产品专家,这些人明白自己希望做什么。此外,还应包括其他任何使软件从概念转变为客户可使用产品所需的人。

Zuill 对此做了进一步解释。为了有效地开展合作,团队应采用小步骤、可发布的工作方式。其中的小步骤将支持快速交付,实现尽快给出反馈:

当我们开始做某工作时,应选取其中的一小部分去完成。我们希望能有始有终地完成这一小部分工作。对此应采取凝聚团队的方式做事,即必须整体对待事情,而非相互分离。正是在开展工作期间,我们才能发现那些必须要做的工作。无论我们认为自己对某事是多么地了解,希望某事在设想上应该是怎样的,我们仍需要逐步去完成一件事情。如果我们善于将事物分解成各个可能可用的部分,那么我们就尽可能直接地、有始有终地处理各个部分,并使每个部分都可被用户使用。这样做,才会为我们是否正在朝着正确的方向迈进给出反馈。

Pyhäjärvi 在讲述她自身的经历时写道,她一直专注于如何掌握测试技能这一过程,她“并不想成为一名编程人员,并非因为自己缺乏天赋,而是因为对此缺乏兴趣和时间“。在她最初接触 Mob 编程时,她确信唯一有价值的是“编程人员与测试人员间的沟通”。但是她“认定现在就应该离开自己所喜爱的事物(主要指测试)”。回顾自己的历程,她写道:

“我当时并没有认识到,在一年后,有人会说服我会去学习编程,并真正地成为一名编程人员。”

Pyhäjärvi 介绍了她的团队所采用的协作方式:

Mobbing(指 Mob 编程或 Mob 测试)从一组人的想法开始。同组成员使用同一台计算机,以此强制实现一种真正的单体流程。组中每位成员轮流操作计算机,并使用定时器每隔几分钟轮换一次,继续进行同一任务,直到任务完成。我们所采用的循环机制并非是让每位成员轮流工作时其他人在围观,而是通过使用一种增强的导航方式让所有人一起工作。

Pyhäjärvi 所采用的 Mob 方式类似于结对编程。她介绍了如何将“驾驶员 - 导航者”模式应用于 Mob:

我们不允许操作键盘者(即驾驶员)决定键盘输入。键盘的操作指令来自于组中其他成员(即导航者)。导航者尽可能在最高抽象层次上做出指引。这个想法并非为了最大限度地使用组中的每位成员,而是为了将最好的想法融入到团队正开展的工作中,使每个人能及时提供自己的想法,以免必须回头重做工作。

Zuill 介绍,他的团队在一开始采用 Mob 编程时,是通过“以重构阅读代码”的方式:

我们通过开始重构,了解需处理的代码。重构使我们以更完整的方式去阅读代码。只要开始重构,并且导航者在导航代码,就会有人加入其中。我们开始去尝试不同的想法,并实时分享这些想法。一个小时后,我们看到了我们一直在做的事情上取得了巨大的进步。我们实现了团队整体分享理解。

据 Pyhäjärvi 介绍,她的团队为有效地对驾驶员进行导航,选取使用了他们所认识到的三种抽象层次进行沟通:

  • 意图:“意图是第一步,用于解释我们所需要的”;
  • 定位:“如果意图本身并不足以使行动按我们的意图进行,这时需要在下一步使用定位。例如,使用键盘快捷搜索,而非菜单”;
  • 细节:“如果我们依然不能在所希望的方向上取得进步,这时应该采取何种低层解释。例如,输入 Ctrl+F 键”。

Pyhäjärvi 介绍了 Mob 场景鼓励去采取行动,并阐述了沟通的必要性:

小组通常以一项明确的任务为开始。对于编程活动,在 Mob 中做简单的代码重构无疑值得鼓励。任何编码套路(Kata)或实战操练也值得鼓励。测试活动可能包括一个自动化脚本,或一部分专用于探索性测试的代码块。无论我们选择何种做法,沟通问题通常是首个挑战。

Pyhäjärvi 详细介绍了在沟通上的挑战,这些挑战会在团队协同高效工作时出现:

一旦 Mobbing 过程开始,就会难以找到要沟通的话。有人可能并不知道应该如何称呼位于 IDE 行号旁边内容(即“gutter”)。我们可以使用文字清楚地说明我们想要做什么。同样,有些人不习惯于耐心地倾听,并试图遵循他人的想法。虽然 Mobbing 支持驾驶者做出回应,并给出更好的建议,但接下来要做什么的决定权在于导航者。

尽管沟通在一开始会遇到挑战,Zuill 给出了有效 Mob 在序列化工作流中的优点,即单个团队成员的沟通开销独立于后期汇集意见的开销:

一旦我们将全部的智力、技能和能力集中于某件事上,有趣的事情就会发生。我们非常直接并且非常迅速地采用了我们可使用的东西。如果我们对工作做了分割,考虑到在沟通、协调和每个人在不同的事情上工作的成本,这时可能需要一两个星期才能完成工作。如果我们可以用一个星期完成工作,甚至是两到三个小时,那么我们就在快速反馈循环中取得了巨大的收益。

Pyhäjärvi 还介绍了在面对分歧时,她所使用的 Mob 过程是如何通过采取倾向于采取行动的方式设法解除阻碍。她给出了在此情况下应用的两条 Mob 规则:

  1. “是的,进一步”- 规则:“小组工作于同一个思想分享中。事情一旦开始,就已经完成,但我们依然可以对其添砖加瓦。”
  2. “两者都做”- 规则:“如果给定两种做事的方式,先列出它们,然后再做两件事。以我们认为不太可能的事情开始,或者是随机选择,目标是表现出对每种方式的认可态度。”

Pyhäjärvi 强调指出,这些规则明确了做事方式的责任,因为“正如团队所做的那样,这项工作是以他们先前从未见过的方式开展的。”

Pyhäjärvi 认识到,作为一名测试人员,Mob 的驱动力使她能够通过提出一些严格围绕测试的问题,进而证明这些问题验证了解决方案的成熟度,支持并确保在解决方案中应用了适当的思维和质量等级。

Zuill 指出,这可以通过提问如下问题决定 Mob 的规模:

如果我们不能从始至终地使用这组团队的知识,这意味着在团队中缺失了某人。

Zuill 将协助今年四月在马萨诸塞州 Burlington 召开的实际动手操作 Mob 编程大会

查看英文原文: Perspectives on Mob Programming

2018-04-07 19:001510
用户头像

发布了 391 篇内容, 共 125.8 次阅读, 收获喜欢 255 次。

关注

评论

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

连夺十冠!百度CVPR 2021再突破,AI实力接受国际“检验”

百度大脑

人工智能

“创客北京2021”百度飞桨AI产业创新应用专项赛报名啦

百度大脑

人工智能 大数据

SpringBoot 拦截器妙用,让你一个人开发整个系统的鉴权模块!

陈皮的JavaLib

Java 面试 springboot

AI技术在银行内部反欺诈中应用的新思路

索信达控股

人工智能 大数据 金融科技 风控 反欺诈 人工智能模型

为什么有些人不喜欢低代码?

优秀

低代码

阿里JDK源码小册(2021版)火了!下载量超60W次!

Java架构师迁哥

百度VidPress Sports团队获SoccerNet-v2足球视频理解竞赛双料冠军

百度大脑

人工智能 欧洲杯 足球

碳达峰碳中和目标下,区块链如何赋能能源管理?

旺链科技

GitHub上最火的7个spring cloud开源项目,对新手太友好了

北游学Java

Java 微服务 Spring Cloud 项目源码

党建百年,矛盾论指导架构设计

三石

架构设计

2021值得考虑的一类新型微服务架构:ServiceMesh

BoCloud博云

微服务

Flink运行架构

五分钟学大数据

flink 7月日更

难得一次技术面,Java程序员开发七年,突破自己终获小米offer

Java 程序员 架构 面试

数据结构——顺序队列

若尘

数据结构 队列

抑制不住的喜悦!耗时2个月整理的Java面试指南在Github上破百万star!

Java架构师迁哥

新一代设计编排运维套件分享

鲸品堂

运维 价值

同程旅行基于 RocketMQ 高可用架构实践

阿里巴巴云原生

超24W字,2021最新一线大厂Java高级架构师面试题总结,共计480页

Java架构师迁哥

【GOTC 预告】王思宇:从 OpenKruise 看云原生应用负载发展趋势

阿里巴巴云原生

收藏吃灰系列!阿里内部“SpringCloudAlibaba学习笔记”这细节讲解,神了

Java 程序员 架构 面试 微服务

字节跳动这份面试题,你能打几分

Java 面试

tms大时代APP开发|tms大时代软件系统开发

Flink 1.13,面向流批一体的运行时与 DataStream API 优化

Apache Flink

flink

HarmonyOS学习路之开发篇——公共事件与通知(二)

爱吃土豆丝的打工人

HarmonyOS 通知事件

Go学习笔记之Hello World

架构精进之路

语言 Go 语言 7月日更

Ubuntu 20.04安装/更新升级后进系统黑屏,屏幕亮度无法调节踩坑记

玏佾

ubuntu Ubuntu20.04 无法进入系统 驱动 屏幕亮度

Qunar DNS体系建设

Qunar技术沙龙

DNS DNS服务器

33岁公司倒闭,被迫走上大龄Java程序员求职之路

Java架构师迁哥

腾讯云,拿什么获得电商行业信赖?

ToB行业头条

#腾讯云

maven私服搭建与插件开发

IT视界

maven nexus

Flink 1.13,State Backend 优化及生产实践分享

Apache Flink

flink

对Mob编程的一些观点_语言 & 开发_Rafiq Gemmail_InfoQ精选文章