极限编程-结对编程


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

一名程序员(称为驱动程序)控制键盘/鼠标并主动实现代码或编写测试。另一个程序员,称为导航员,不断观察驱动程序的工作以识别缺陷,并从战略上思考工作的方向。

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

结对编程——优点

结对编程的显着优点是 -

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

  • 最终缺陷含量统计上较低。

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

  • 团队更快地解决问题。

  • 人们对系统和软件开发有了更多的了解。

  • 该项目最终导致多人理解系统的每个部分。

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

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

结对编程实验

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

结对编程研究表明 -

  • 双人组使用的工时并不比单人组多。

  • 配对产生的缺陷更少。

  • 成对创建的代码行更少。

  • 两人更喜欢他们的工作。

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

  • 两人在该项目上花费的时间比个人多 15%。

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

  • 结对的人用更少的代码行一致地实现了个人产生的相同功能。

  • 学习如何在能够快速产生实际成果的环境中进行编程是一件很有趣的事情,并且可以让人学得更快。

适应结对编程

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

根据 Laurie A. Williams 和 Robert R. Kessler 在他们的书《我在幼儿园学到的结对编程的所有知识》中,很好地解释了如何培养我们在幼儿园学到的技能一般而言,建立团队凝聚力,特别是结对编程。

作为结对程序员的转变和持续成功通常需要练习日常礼貌。

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

幼儿园课程

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

  • 分享一切

  • 公平竞赛

  • 请勿打人

  • 把东西放回原来的地方

  • 清理自己的烂摊子

  • 不要拿不属于你的东西

  • 当你伤害别人时说你很抱歉

  • 吃饭前要洗手

  • 冲洗

  • 热cookie和冷牛奶对你有好处

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

  • 每天下午小睡一会儿

  • 当你们走出去的时候,注意交通,手牵着手,团结一致

  • 意识到奇迹

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

分享一切

在结对编程中,

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

  • 一个人正在打字或写作,另一个人则不断地审查工作。两个都

    • 过程中是平等的参与者

    • 负责工件的各个方面

    • 拥有一切

公平竞赛

在结对编程中,

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

  • 他们定期转换这些角色,即使其中一个比另一个更有经验,以确保平等参与。

  • 当驾驶者正在考虑实施时,另一个人不断地审查代码,思考可能的更简单的设计,以及当前的开发如何适应整个系统。

不要打你的伴侣

在结对编程中,

  • 确保您的合作伙伴保持专注并专注于任务。

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

  • 确保您的合作伙伴遵循规定的编码标准,从而保持对团队其他成员的承诺。

在结对编程调查中,我们发现生产力和质量得到了巨大的提高。这是因为 -

  • 每个人都让他们的合作伙伴专注于任务,没有懈怠的可能。

  • 每个工件在生产过程中都会受到持续审查,以确保质量。

把东西放回原处

在结对编程中,

  • 您还需要相信自己的技能和合作伙伴的技能。在这方面任何消极的想法都应该被扔进垃圾桶。

  • 您必须确保表达您所知道的内容,并愿意在需要时向您的合作伙伴学习。您可以通过观察您的伴侣或立即获取他的反馈来向他学习。

  • 您需要有信心 -

    • 只要有可能出现滞后,您就可以立即向您的合作伙伴接机。

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

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

清理你的烂摊子

在结对编程中,通过“监视”技术,

  • 您会发现,知道您的伴侣注意到了多少明显但未被注意到的缺陷是令人惊奇的。

  • 您可以消除这些缺陷,而无需在正式检查会议中产生自然的敌意。

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

不要把事情看得太严重

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

这是必要的,因为,

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

    • 持有“我的方式或高速公路”的态度可能会阻止程序员考虑其他人的想法。

    • 采取防御态度可能会导致程序员无法接受建设性的批评或将这种批评视为不信任。

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

  • 另一方面,如果一个人总是与合作伙伴意见一致,以免造成紧张,也会最大限度地减少协作工作的好处。为了进行有利的想法交流,必要时应该有一些健康的分歧/辩论。

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

当您在搬动家具时伤害了某人时,请说声抱歉

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

为了确保在协作对内以及与其他协作对之间进行有效的沟通,程序员需要毫不费力地互相见面,互相询问问题并就集成问题等问题做出决定。程序员还可以从无意中听到其他对话中受益,他们可以对这些对话做出重要贡献。

在开始之前就不要怀疑

为了使结对编程取得成功,合作伙伴双方都必须了解编程中协作的价值、好处和体验的乐趣。在这方面的任何怀疑都需要从一开始就停止。

经验表明,拥有一名在结对编程方面非常积极和/或经验丰富的程序员,可以带领两人成为一个胜利的紧密协作团队。

  • 这样一个团队的产出比以非凝结形式工作的同一个人要高。

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

  • 一旦团队开始凝聚,成功的可能性就会急剧上升。

冲洗

结对程序员可以独立完成一些事情。然而,当他们重新加入时,他们必须在合并之前对独立工作进行审查,或者在不断审查工作的同时刷新并重写独立工作,从而识别出其他缺陷。

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

热cookie和冷牛奶对你有好处

结对程序员让彼此持续专注并专注于任务。它可能会非常激烈并且精神疲惫。因此,定期休息一下,为另一轮富有成效的结对编程保持体力。

在休息期间,最好断开与任务的连接,并在重新开始时以新鲜感来处理它。建议的活动包括检查电子邮件、打电话、浏览网页或吃点零食。

过上平衡的生活

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

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

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

  • 许多程序员更喜欢做实验原型、棘手的、深度集中的问题和单独的逻辑思维。

  • 简单、定义良好的常规编码由单独的程序员更有效地完成,然后与合作伙伴一起进行审查。

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

在结对编程中,

  • 两者之间不应该存在竞争。两者必须协同工作,就好像神器是由一个人的头脑创造出来的一样。

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

  • 合作伙伴决不应该将任何问题或缺陷归咎于对方。

意识到两个大脑的力量

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

  • 一套通用的知识和技能使他们能够有效地沟通。

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

一对在一起将 -

  • 提出的可能解决方案比两人单独工作时多出两倍多。

  • 更快地缩小最佳解决方案的范围。

  • 更快、更高质量地实施它。

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