结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工做。一我的输入代码,而另外一我的审查他输入的每一行代码。输入代码的人称做驾驶员,审查代码的人称做观察员(或导航员)。两个程序员常常互换角色。 php
在结对编程中,观察员同时考虑工做的战略性方向,提出改进的意见,或未来可能出现的问题以便处理。这样使得驾驶者能够集中所有注意力在完成当前任务的“战术”方面。观察员看成安全网和指南。结对编程对开发程序有不少好处。好比增长纪律性,写出更好的代码等。 程序员
结对编程是极端编程的组成部分。 编程
一些研究发现程序员结对工做与单独工做相比,会写出更短的程序,更好的设计,以及更少的缺陷。研究发现缺陷率下降15%到50%,会因为程序员的经验以及任务的复杂度而不一样。结对编程比单独编程相比,一般会考虑更多的设计选项,达成更简单,更易维护的设计;程序员们也会更早地捕捉到设计的缺陷。结对编程与一个程序员承担同一个任务相比工做会完成的更快。结对的程序员常常发现当他们一同工做时表面上“不可能”的问题变得容易,或更加快速,或至少有可能解决。 安全
然而,一个2007年的元分析得出结论“结对编程并不是一致地有利或有效的”,这是由于是否结对编程选择之外的许多因素在编程任务的产出上起着很大的最用。元研究发现结对编程每每必定程度地缩短了开发时间,并且对代码质量产生了正的边际效益,可是结对编程大大增长了开发人员的工时;也就是说与单独编程相比花费大大增长了。做者指出有关结对编程的研究遭遇了发表偏倚,有些不利于结对编程的研究要么没有开展研究,要么没有投稿,要么没有被授受发表。他们得出结论“你不可能期待又快又好又便宜。” 编辑器
虽然编码一般比一个程序员单独工做更快地完成,可是总的程序时间(程序员数目 × 花费的时间)增长了。管理者须要在工做更快的完成以及缩减测试和调试时间和更高的编码成本之间平衡。这些因素的相对权重在不一样的项目、不一样的任务之间也不一样。对于那些程序员没有彻底理解的任务上,程序员期待更多的创造性,挑战,以及 高复杂度,此时使用结对编程最有帮助。在简单的,程序员都彻底了解的任务上,结对编程致使生产力的净降低。 分布式
在两个程序员工做时,两个程序员之间传递着知识。他们分享关于系统细节的知识,而且互相学习编程技巧。新的员工很快地得到团队的习惯,并学习到系统的细节。“混杂结对编程”,即每一个程序员轮流与团队中的全部其余程序员结对编程,而不是仅与某个程序员编程,使得系统的知识在整个团队中传播,减小了程序员离开团队带来的风险。 工具
结对编程一般会带来纪律和时间管理的提高。程序员在与结对的伙伴一同工做时,较少地可能忽略编写单元测试,花时间上网或处理我的电子邮件,或偷工减料。结对的伙伴“让他们保持诚信”。人们更不肯意打断两个结对编程的人,而单独工做的人却容易被打断。 单元测试
其余的收益据报告包括提升士气以及在代码正确性上更大的信心。 学习
在学术圈里,结对编程也是争议的。其缘由是过往学术期刊所发表的结对编程实验,基本上其余学者很难让重复实验核对。因此不少结对编程实验只有原做者才真正了解结果。但是,2013年Giri 和Soni 重复了在2006年Kim Man Lui所报告的结对编程实验 而实验结果也是一致。这次重复实验标记着结对编程研究的里程碑 测试
远程结对编程,也称做虚拟结对编程或分布式结对编程,是指两个程序员不在同一地点,经过协同编辑器,共享桌面,或远程结对编程的IDE插件进行的结对编程。 远程结编程引入了一些在面对面的结对编程中不存在的困难,例如协做的额外时延,更多的依赖“重量级”的任务跟踪工具,而不是“轻量级”的索引卡片,以及没有口头交流致使的在相似谁“控制键盘”问题上的混乱和冲突
许多任务具,例如Eclipse有插件支持远程结对。有些团队尝试使用VNC和RealVNC,每一个程序员使用他们本身的计算机。其余人使用基于文本的GNU Screen的多显示模式。苹果公司的Mac OS X包含内建的屏幕共享应用。
在乒乓结对编程中,观察者编写失败的测试用例,驾驶者修改代码以经过该用例,观察者编写新的单元测试用例,等等。这个循环持续到观察者不能写出失败的测试用例。可是这种方法比估计的计划要花更多的时间。