结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序猿在一个计算机上共同工作。
一个人输入代码,而还有一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。
两个程序猿常常互换角色。
在结对编程中,观察员同一时候考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。
这样使得驾驶者能够集中所有注意力在完毕当前任务的“战术”方面。
观察员当作安全网和指南。
结对编程对开发程序有非常多优点。
比方添加纪律性。写出更好的代码等。
结对编程是极端编程的组成部分。
一些研究发现程序猿结对工作与单独工作相比。会写出更短的程序,更好的设计。以及更少的缺陷。研究发现缺陷率降低15%到50%,会由于程序猿的经验以及任务的复杂度而不同。
结对编程比单独编程相比。一般会考虑很多其它的设计选项,达成更简单,更易维护的设计;程序猿们也会更早地捕捉到设计的缺陷。
结对编程与一个程序猿承担同一个任务相比工作会完毕的更快。结对的程序猿常常发现当他们一同工作时表面上“不可能”的问题变得easy。或更加高速,或至少有可能解决。
然而。一个2007年的元分析得出结论“结对编程并不是一致地有利或有效的”,这是由于是否结对编程选择以外的很多因素在编程任务的产出上起着非常大的最用。
元研究发现结对编程往往一定程度地缩短了开发时间。并且对代码质量产生了正的边际效益。可是结对编程大大添加了开发者的工时;也就是说与单独编程相比花费大大添加了。作者指出有关结对编程的研究遭遇了发表偏倚,有些不利于结对编程的研究要么没有开展研究,要么没有投稿,要么没有被授受发表。他们得出结论“你不可能期待又快又好又廉价。”
尽管编码通常比一个程序猿单独工作更快地完毕。可是总的程序时间(程序猿数目× 花费的时间)添加了。管理者须要在工作更快的完毕以及缩减測试和调试时间和更高的编码成本之间平衡。这些因素的相对权重在不同的项目、不同的任务之间也不同。对于那些程序猿没有全然理解的任务上。程序猿期待很多其它的创造性,挑战,以及高复杂度,此时使用结对编程最有帮助。在简单的。程序猿都全然了解的任务上,结对编程导致生产力的净下降。
在两个程序猿工作时,两个程序猿之间传递着知识。他们分享关于系统细节的知识,并且互相学习编程技巧。
新的员工非常快地获得团队的习惯,并学习到系统的细节。“混杂结对编程”,即每一个程序猿轮流与团队中的所有其它程序猿结对编程。而不是仅与某个程序猿编程,使得系统的知识在整个团队中传播。降低了程序猿离开团队带来的风险。
结对编程一般会带来纪律和时间管理的提升。程序猿在与结对的伙伴一同工作时,较少地可能忽略编写单元測试,花时间上网或处理个人电子邮件,或偷工减料。结对的伙伴“让他们保持诚信”。人们更不愿意打断两个结对编程的人。而单独工作的人却easy被打断。