配对编程的原因


13

我曾在几家商店工作过,在这些商店中,管理层已经将结对编程的想法传授给我或另一位经理/开发人员,而我对此一无所知。从开发人员的角度来看,我找不到改用这种编码样式会有所裨益的原因,或者作为一个小型团队的经理,我都看不出任何好处。

我了解它有助于解决基本的语法错误,并且在需要散列某些内容时可能会有所帮助,但是不在编程循环中的经理们似乎一直将其视为阻止设计师进入Facebook或Reddit的一种方式,而不是设计工具。

作为一个接近开发层的人,从高级管理职位看来,我似乎根本无法理解被扔给我的书或有关该主题的Wiki页面,因此,结对编程在处理Scrum或Agile时有什么好处?环境?


2
我认为这在非​​常特殊的情况下很有用。但是作为一般的开发模型,它是没有用的。
Ryan Kinal 2012年

4
这可能取决于软件,它可能会使您的视图变色。如果您有很多小部件,并且每天都在使用不同的小自定义软件,则可能没有用。当您要处理大型企业系统时,开发人员需要考虑其实现的功能在整个系统中的级联,这将变得非常有价值。通常,最好由两个对心理过程有不同理解的人来推理写一类影响在30多个不同地方使用的数据的类。这就像用于发现缺陷的蒙特卡洛方法。
Jimmy Hoffa 2012年

@JimmyHoffa因此,主要的思考过程是,如果我们在bug还未进入验收测试之前就发现它们,那么我们可以大大减少在代码审查/测试中浪费的时间吗?
Jeff Langemeier 2012年

3
@JeffLangemeier实际上不仅如此;如果您在子系统A编写之前就已经看到子系统A的A1部分设计中的缺陷,这是由于在实施子系统A的过程中两个开发人员之间自然而然地讨论的话,那么,您不仅节省了修复部分所花费的时间A1以及依赖于A1的A5和A7部分(或由于修复A1的级联而在那些相关的部分中发现错误),通过完全不编写该不良部分来节省时间。是的,它减少了测试时间,但是以这种方式进一步减少了开发时间。
Jimmy Hoffa 2012年

@MartinWickman这不是重复的。在标题中,他们确实在寻找缺点,即使标题要求优点和缺点。另外,在这个问题上给出了对职业选手更全面的回答。指出这一点,即使它与另一个很接近,对社区也是有益的。
杰夫·兰格迈尔

Answers:


25

部分取决于您如何进行结对编程。在某些情况下,该对驱动程序正在编写代码,而该对驱动程序的第二个成员正在观察并讨论系统的设计和实现细节。结对编程的另一个实例涉及两个人同时编写代码-一个人在编写实现的功能,另一个人在单元和集成级别积极开发和编写测试代码,再次讨论了系统的设计和实现细节。

无论结对编程的类型如何,它都可以有效地用作连续的代码审查。您有两个人在看代码,看着错误,然后再将它们转入以后的系统/验收测试环境或现场。您还有两个人非常了解系统的特定部分,可以作为冗余来最大程度地减少您的总线系数。尽早发现缺陷和在团队中传播系统知识都可以降低构建系统的成本。

知识的传播也不仅限于团队的技术知识。根据这对对象是谁,它可以使信息在公司的更高级成员与新成员之间流动,以涉及超越该项目的其他事项-编码样式,公司文化,期望等。它还可以使对技术或工具更熟悉的人在实际应用环境中分享他们在该技术或工具中的知识。

如您所提到的,它也确实有助于使开发人员保持专注和顺畅。除了流程外,许多人打扰多个人工作的可能性比一个人打扰的可能性小。如果您走在某人的桌子旁并且他们一个人在工作,但是您需要与他们交谈,则可能会敲门并与他们交谈。如果您看到两个或两个以上的人一起工作或进行讨论,则这种可能性较小。您不会打扰他们。中断会浪费时间,而花费更多的时间则意味着更高的成本。最大限度地提高员工的生产力符合企业的最大利益。

但是,要使成对编程可行,必须克服一些挑战。考虑诸如人格冲突之类的事情,或者选择两人以正确地分配知识。还需要考虑何时旋转配对。随意进行的结对编程可能不会按计划中的那样有效。视团队的组成而定,将人配对可能根本无效。


+1是个不错的答案。我仍然非常不喜欢这个想法,但是您很好地表达了它的好处。

我喜欢您的副臂长的剪裁,这种解释实际上使这种感觉可行。
Jeff Langemeier 2012年

9
我更喜欢一种混合模型,在这种模型中,根据当前需求,配对更为临时。同样,有时候单独工作会更有效率,而与伴侣一起工作会更好。对我来说,被强迫成永久对似乎是武断而僵硬的。
jfrankcarr 2012年

很好的答案。我还是敏捷团队的程序员,我们做了很多配对。一开始,我们也持怀疑态度,我们认为独自工作是最好的方式。然后,在团队发展的某个时刻,我们实施了结对编程。如果未成对编程,则不会提交任何生产代码。这是对配对概念的人为实施,但对团队有很大帮助。最后,在我们都习惯了这项技术之后,我们又改变了彼此的阶梯,我们进行了临时的团队合作,主要是在实现更复杂或易于出错时。
Patkos Csaba 2012年

@jfrankcarr,没有人建议永久配对;我不确定您是从哪里想到的。(请注意,此答案特别提到了“何时旋转对”。)我们的团队发现,让两个相同的人彼此配对超过一两天是一个非常糟糕的主意;你开始发疯了。一些团队每半小时轮换一次(PDF链接)。
乔·怀特

3
  1. 最终代码中的错误更少(效率)
    不能完全取代代码审查,但对尽早解决问题非常有效。有研究指出了这一方向。

  2. 完成速度更快(有效性)
    有一些研究指出了这一点。当涉及到复杂的功能时,使用2个头会更有效。为此,必须具有配对经验。

(注意:这是您为经理做的推销建议:从财务上来说,这是明智的决定,因为您可以通过减少错误数量来提高效率,并通过更快的完成率来提高效率)


  1. 初级教学您可以向经验丰富的程序员直接添加初级。如果您有一群绝对的初学者,可以很容易地坚持下来,让他们成对学习基本知识。坚持并提供建议。这个概念显然是非常古老的,并且源于工艺。

3

快速解答:大多数收益和收益都发布在Wikipedia上,但是,让我们从一个不同的角度来看待它。

我想提一下适用于敏捷/ scrum开发环境的结对编程优势的具体案例,该案例摘自博客文章

软件的成败取决于软件的质量,而结对编程可通过多种方式直接提高质量。当两个开发人员一起工作时,随着开发人员开发的代码简短,简单,易于维护且错误较少,设计模式的质量将提高。错误是软件开发中的主要质量问题。用两只眼睛编写代码,可以发现更多错误,从而降低了开发成本。在开发过程的后期发现的错误通常修复成本很高。尽早发现软件缺陷可以防止并帮助阻止困难的问题。编程中经常会出现复杂性,并且两个共同解决问题的头脑比一个能看到更多的选择和更快地得出结论。

综上所述:

  • 促进团队沟通
  • 促进有效的应用知识转移
  • 促进设计方法的责任感
  • 产生更好,易于维护的代码
  • 帮助在早期阶段消除错误代码
  • 提高团队生产力,因为团队成员将在编码过程中全神贯注
  • 提高团队成员的沟通和协作能力
  • 在工作场所建立友情关系
  • 使工作更有趣

When two developers work together design pattern quality improves->这个短语根本没有意义。至少没有比When two bakers work together wheat quality improves或更具意义When two race drivers work together asphalt quality improves
phresnel

那是您可能会关注的博客报价。但是,我的目的是强调更好地关注技术设计和代码质量,并采取某种类型的责任制,因为每个开发人员都对所创建的代码感到自豪。
Yusubov

2

结对编程有一些好处:

  • 两位程序员能够在设计上进行协作,从而有可能产生更好的架构/代码-两双眼睛可以发现错误
  • 机构知识可以更好地保留-如果一个程序员离开或不可用,则另一个程序员应该能够继续工作而不会损失很多生产力
  • 这是快速培训新开发人员的一种方法-将他们与经验丰富的开发团队成员配对,他们将能够从团队资深人员的角度体验代码库
  • 更好的纪律-结对的程序员可能会在更长的时间内保持工作效率,因为一个人或另一个可以接管大量的活动。与单元开发人员相比,诸如单元测试之类的潜在繁琐任务可能不会被频繁跳过。

Wikipedia在Wiki条目中也很好地总结了成本和收益。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.