极限编程 - 成对编程



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

一位程序员,称为驱动者,控制键盘/鼠标并主动实现代码或编写测试。另一位程序员,称为领航员,持续观察驱动者的工作以识别缺陷,并从战略角度思考工作的方向。

如有必要,两位程序员可以一起头脑风暴任何具有挑战性的问题。两位程序员定期轮换角色,平等合作开发软件。

成对编程——优势

成对编程的显著优势在于:

  • 许多错误在键入时就被发现,而不是在质量保证测试或现场发现。

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

  • 设计更好,代码更短。

  • 团队解决问题更快。

  • 人们对系统和软件开发的了解显著增加。

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

  • 人们学会一起工作,更频繁地沟通,从而改善信息流和团队动态。

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

成对编程实验

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

成对编程研究表明:

  • 成对编程的人时不比单人编程多。

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

  • 成对编程编写的代码行数更少。

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

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

  • 成对编程的团队在程序上花费的时间比个人多 15%。

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

  • 成对编程始终以更少的代码行实现了个人所完成的相同功能。

  • 在一个能够快速获得切实结果的环境中学习编程很有趣,并且可以更快地学习。

适应成对编程

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

根据劳里·A·威廉姆斯和罗伯特·R·凯斯勒在其著作《我在幼儿园学到的关于成对编程的所有知识》中所述,它很好地解释了如何培养我们在幼儿园学到的技能,以建立团队凝聚力,尤其是在成对编程中。

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

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

幼儿园的教训

在幼儿园,我们学习了以下内容:

  • 分享一切

  • 公平竞争

  • 不要打人

  • 把东西放回原处

  • 清理你自己的烂摊子

  • 不要拿不属于你的东西

  • 当你伤害别人的时候说对不起

  • 饭前洗手

  • 冲厕所

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

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

  • 每天下午小睡一会儿

  • 当你走向世界的时候,注意交通,牵着手,团结在一起

  • 感受奇迹

接下来,我们根据上述教诲,探讨成对编程的原则。

分享一切

在成对编程中:

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

  • 一人打字或写作,另一人持续审查工作。两人

    • 都是流程中平等的参与者

    • 对工件的各个方面负责

    • 拥有所有权

公平竞争

在成对编程中:

  • 一人担任驱动者,即控制键盘或记录设计思路,另一人持续审查工作。

  • 他们定期轮换角色,即使其中一人比另一人经验丰富得多,以确保平等参与。

  • 当驱动者思考实现时,另一人持续审查代码,思考可能的更简单的设计,当前开发如何融入当前的整体系统。

不要打你的搭档

在成对编程中:

  • 确保你的搭档保持专注并按计划进行。

  • 你也要保持专注并按计划进行。

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

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

  • 每个人都让他们的搭档保持专注并按计划进行,没有懈怠的可能性。

  • 每个工件在制作过程中都会持续审查,以确保质量。

把东西放回原处

在成对编程中:

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

  • 你必须确保表达你的知识,并在需要时向你的搭档学习。你可以通过观察他或立即获得他的反馈来向你的搭档学习。

  • 你需要有信心:

    • 无论何时可能落后,你都可以立即从你的搭档那里获得帮助。

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

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

清理你自己的烂摊子

在成对编程中,使用“肩并肩观察”技术:

  • 你会发现,你的搭档会注意到很多明显的但未被注意到的缺陷,这令人惊奇。

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

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

不要把事情看得太严重

有一个搭档持续客观地审查设计和代码,这是成对编程的一个非常有益的方面。在成对编程中,你需要确保你的工作没有过度的自我或过少的自我。

这是必要的,因为:

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

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

    • 防御性会导致程序员不接受建设性批评或将这种批评视为不信任。

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

  • 另一方面,总是同意搭档以避免产生紧张感的人也会最小化协作工作的益处。为了有利的思想交流,在需要时应该有一些健康的意见分歧/辩论。

因此,需要在表现出过多的自我和过少的自我之间取得微妙的平衡。有效的成对程序员在最初的调整期间培养这种平衡,这可能需要几小时或几天,具体取决于个人、工作性质以及他们过去与成对编程的经验。

当你移动家具时,如果伤害了别人,要说对不起

程序员必须能够并排坐着编程,同时查看电脑屏幕并共享键盘和鼠标。极限程序员有一个“滑动键盘/不动椅子”的规则。

为了确保有效的沟通,在协作对内以及与其他协作对之间,无需付出太多努力,程序员需要互相看到,互相提问,并就集成问题等做出决定。程序员还可以从听到其他对话中获益,因为他们可以对这些对话做出重要的贡献。

在开始之前摒弃怀疑

为了成对编程的成功,双方必须理解编程中协作的价值、益处以及体验的乐趣。这方面的任何怀疑都需要在一开始就消除。

经验表明,有一位程序员非常积极和/或经验丰富,参与成对编程,可以带领该对成为一个团结协作的团队,最终取得胜利。

  • 这样一个团队的产出大于相同的人在不团结的情况下工作。

  • 人们从工作中获得的乐趣大于你根据工作的性质所期望的。

  • 一旦团队开始凝聚,成功的可能性就会大大提高。

冲厕所

成对程序员可以独立完成一些工作。但是,当他们重新加入时,他们必须在合并之前审查独立完成的工作,或者冲洗并重写独立完成的工作,并持续审查工作,这将识别出其他缺陷。

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

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

成对程序员会互相保持持续的专注和按计划进行。这可能是非常紧张和精神上令人疲惫的。因此,定期休息以保持精力,以便进行下一轮富有成效的成对编程。

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

过平衡的生活

定期与他人沟通是过平衡生活的关键。与你的搭档和其他程序员进行非正式讨论,可以有效地交流想法,并高效地传递信息。

每天下午休息一下,不要一起工作

不需要每天下午都单独工作,但接受10%-50%的时间单独工作。这是因为:

  • 许多程序员更喜欢单独进行实验性原型设计、难度大、需要高度集中注意力的问题和逻辑思考。

  • 简单、定义明确和例行的编码工作,由单独的程序员完成然后与搭档一起审查效率更高。

注意交通状况,互相配合,紧密合作。

在成对编程中:

  • 两人之间不应该存在竞争。两人必须协同工作,仿佛产出物是由一个人的大脑完成的。

  • 搭档需要信任彼此的判断力和对团队的忠诚度。

  • 搭档不应该互相指责任何问题或缺陷。

意识到两个大脑的力量。

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

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

  • 独特的技能,使他们能够共同完成任务。

合作时,两人将:

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

  • 更快地缩小到最佳解决方案。

  • 更快地以更高的质量实施。

因此,结对编程是一种强大的技术,因为始终有两个大脑集中在一个问题上。它迫使一个人完全集中精力解决眼前的问题。

广告