极限编程 - 结对编程

结对编程是一种编程风格,其中两个程序员在一台计算机上并肩工作,共享一个屏幕、键盘和鼠标,持续协作完成相同的设计、算法、代码或测试。

一名程序员,称为驱动程序,控制键盘/鼠标并积极实施代码或编写测试。另一名程序员,称为导航员,持续观察驱动程序的工作以发现缺陷,并战略性地思考工作的方向。

必要时,两名程序员会就任何具有挑战性的问题进行集思广益。两位程序员定期交换角色,平等合作开发软件。

结对编程 - 优势

结对编程的显著优势是 −

  • 许多错误是在输入时发现的,而不是在 QA 测试或现场发现的。

  • 最终缺陷内容在统计上较低。

  • 设计更好,代码长度更短。

  • 团队解决问题的速度更快。

  • 人们更多地了解系统和软件开发。

  • 项目最终会让多个人了解系统的每个部分。

  • 人们学会一起工作,更频繁地交流,从而提供更好的信息流和团队动态。

  • 人们享受他们的工作更多。

结对编程实验

结对编程实践已被证明可以提高软件产品的生产力和质量。

结对编程研究表明 −

  • 结对编程所用的工时并不比单人多。

  • 结对编程产生的缺陷更少。

  • 结对编程产生代码行更少。

  • 结对编程更享受他们的工作。

犹他大学进行了结对编程实验。结果表明 −

  • 结对编程比个人编程多花费 15% 的时间。

  • 结对编程编写的代码始终比个人编程通过更多的测试用例。

  • 结对编程始终用更少的代码行实现个人编程产生的相同功能。

  • 在可以快速获得切实成果的环境中学习如何编程很有趣,而且可以让人学得更快。

适应结对编程

大多数程序员习惯于单独工作,并且经常抵制向结对编程的过渡。但是,通过练习,他们最终可以实现这一转变。

根据 Laurie A. Williams 和 Robert R. Kessler 在他们的书《我真正需要知道的关于结对编程的一切都是我在幼儿园学到的》中的说法,书中很好地解释了如何培养我们在幼儿园学到的技能,以建立团队凝聚力,特别是结对编程。

作为一名结对程序员,转变和持续的成功通常涉及练习日常文明礼貌。

以下部分摘录自本出版物,可帮助您成为有效的结对程序员。

幼儿园课程

在幼儿园,我们学到了以下内容 −

  • 分享一切

  • 公平竞争

  • 不要打人

  • 把东西放回原处

  • 自己收拾烂摊子

  • 不要拿不属于你的东西

  • 伤害别人时要说对不起

  • 吃饭前要洗手

  • 冲水

  • 热饼干和冷牛奶对你有好处

  • 过一种平衡的生活——每天学习、思考、画画、唱歌、跳舞、玩耍和工作

  • 每天下午小睡一下

  • 当你走出家门时,注意交通,牵着手并团结一​​致

  • 意识到奇迹

接下来,我们在上述教导的背景下研究结对编程的原则。

分享一切

在结对编程中,

  • 两个程序员坐在一起,共同生产一个工件(设计、算法、代码等)

  • 一个人打字或写作,另一个人不断审查工作。双方

    • 是流程中的平等参与者

    • 负责工件的每个方面

    • 拥有一切

公平竞争

在结对编程中,

  • 一个人负责,即控制键盘或记录设计想法,而另一个人则不断审查工作。

  • 他们会定期切换这些角色,即使其中一个人比另一个人经验丰富得多,也要确保平等参与。

  • 当负责的人考虑实施时,另一个人则不断审查代码,思考可能的更简单的设计,以及当前的开发如何适应整个系统日期。

不要打你的搭档

在结对编程中,

  • 确保你的搭档保持专注并专注于任务。

  • 你保持专注并专注于任务。

  • 确保你的搭档遵循规定的编码标准,从而保持对团队其他成员的承诺。

在结对编程调查中,发现实现了巨大的生产力提升和质量改进。这是因为 −

  • 每个人都要让搭档专心致志,毫不懈怠。

  • 每个工件在生产过程中都会不断接受检查,以确保质量。

把东西放回原位

在结对编程中,

  • 你需要相信自己的技能,也需要相信搭档的技能。任何这方面的负面想法都应该扔进垃圾桶。

  • 你必须确保自己表达了自己所知道的东西,并且在需要的时候愿意向搭档学习。你可以通过观察你的搭档或立即听取他的反馈来向他学习。

  • 你需要有信心−

    • 只要有可能落后,你都可以立即从你的搭档那里得到帮助。

    • 作为一对,你们可以解决你一个人无法解决的问题。

    • 你们可以帮助提高彼此的技能。

清理你的烂摊子

在结对编程中,使用"肩上监视"技术,

  • 你会发现,你的搭档注意到了多少明显但未被注意到的缺陷,这真是令人惊讶。

  • 你可以消除这些缺陷,而不会产生正式检查中可能产生的自然敌意会议。

  • 表征缺陷预防和缺陷消除效率。

不要把事情看得太严肃

让合作伙伴持续客观地审查设计和编码是结对编程的一个非常有益的方面。在结对编程中,你需要确保在工作中既没有过多的自我,也没有过少的自我。

这是必要的,因为,

  • 过度的自我可以通过两种方式表现出来:

    • "要么听我的,要么滚蛋"的态度会阻止程序员考虑别人的想法。

    • 防御性很强可能会导致程序员不接受建设性的批评,或者将这种批评视为不信任。

这两种自我表现方式都会损害合作关系。

  • 另一方面,一个总是同意合作伙伴的意见以避免制造紧张局面的人也会最大限度地减少合作的好处。为了实现良好的思想交流,在必要时应该有一些健康的分歧/辩论。

因此,在表现过多和过少的自我之间保持微妙的平衡是必要的。有效的结对程序员会在最初的调整期内培养这种平衡,这段调整期可能需要数小时或数天,具体取决于个人、工作性质和他们过去的结对编程经验。

在搬动家具时伤到别人时要说声抱歉

程序员必须能够并肩坐在一起编程,同时查看计算机屏幕并共享键盘和鼠标。极限程序员有一条"滑动键盘/不要移动椅子"的规则。

为了确保有效的沟通,无论是在协作组内还是与其他协作组之间,程序员都需要毫不费力地看到对方,互相提问并就集成问题等问题做出决定。程序员还可以从偷听其他对话中受益,他们可以在其中做出重要贡献。

开始之前放弃怀疑

为了成功进行结对编程,合作伙伴双方都必须了解协作在编程中的价值、好处和体验的乐趣。任何对此的怀疑都应该从一开始就被阻止。

经验表明,如果有一个非常积极和/或有结对编程经验的程序员,那么他们就可以成功带领这对程序员成为一个团结协作的团队。

  • 这样的团队的生产力要高于以非团结形式工作的相同人员。

  • 考虑到工作本身的性质,人们从工作中获得的乐趣比你想象的要大。

  • 一旦团队开始团结起来,成功的可能性就会大大增加。

Flush

结对程序员可以独立完成某项工作。但是,当他们重新加入时,他们必须在合并之前审查独立工作,或者刷新并重写独立工作,同时不断审查工作,以识别其他缺陷。

未经合作伙伴审查,切勿合并任何独立工作。这是因为研究表明,与配对完成的工作相比,独立工作存在缺陷。

热饼干和冷牛奶对你有好处

结对程序员让彼此持续专注并专注于任务。这可能非常紧张和精神疲惫。因此,定期休息一下以保持体力,以进行另一轮富有成效的结对编程。

在休息期间,最好断开与任务的连接,并在重新开始时以新鲜的心态对待它。建议的活动包括查看电子邮件、打电话、浏览网页或休息一会儿吃点零食。

过上平衡的生活

定期与他人交流是过上平衡生活的关键。与您的合作伙伴和其他程序员进行非正式讨论可以交换有效的想法并高效地传递信息。

每天下午一起工作时休息一下

不必每天下午单独工作,但 10-50% 的时间单独工作是可以接受的。这是因为−

  • 许多程序员喜欢独自进行实验性原型设计、艰难、高度集中的问题和逻辑思考。

  • 简单、定义明确和常规的编码更适合由一个程序员单独完成,然后与合作伙伴一起审查。

注意交通,手拉手,团结一致

在结对编程中,

  • 两者之间不应该有竞争。双方必须齐心协力,就像一件艺术品是由一个人的头脑制作的一样。

  • 合作伙伴需要信任彼此的判断力和对团队的忠诚度。

  • 合作伙伴永远不应该因为任何问题或缺陷而责怪对方。

意识到两个大脑的力量

当两个人一起工作时,每个人都有自己的一套知识和技能,包括 −

  • 这些知识和技能的共同集合使他们能够有效地沟通。

  • 独特的技能使他们能够为完成任务做出贡献。

两人一起合作将−

  • 想出的解决方案比两人单独工作时多出两倍以上。

  • 更快地缩小范围以找到最佳解决方案。

  • 更快地实施,质量更高。

因此,结对编程是一种强大的技术,因为有两个大脑始终专注于同一个问题。它迫使一个人全神贯注于手头的问题。