结对编程

✍ dations ◷ 2025-08-25 15:42:41 #结对编程

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。

在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。

结对编程是极限编程的组成部分。

一些研究发现程序员结对工作与单独工作相比,会写出更短的程序,更好的设计,以及更少的缺陷。 研究发现缺陷率降低15%到50%,会由于程序员的经验以及任务的复杂度而不同。 结对编程比单独编程相比,通常会考虑更多的设计选项,达成更简单,更易维护的设计;程序员们也会更早地捕捉到设计的缺陷。 结对编程与一个程序员承担同一个任务相比工作会完成的更快。结对的程序员经常发现当他们一同工作时表面上“不可能”的问题变得容易,或更加快速,或至少有可能解决。

然而,一个2007年的元分析得出结论“结对编程并非一致地有利或有效的”,这是因为是否结对编程选择以外的许多因素在编程任务的产出上起着很大的作用。 元研究发现结对编程往往一定程度地缩短了开发时间,而且对代码质量产生了正的边际效益,但是结对编程大大增加了开发人员的工时;也就是说与单独编程相比花费大大增加了。作者指出有关结对编程的研究遭遇了发表偏倚,有些不利于结对编程的研究要么没有开展研究,要么没有投稿,要么没有被授受发表。他们得出结论“你不可能期待又快又好又便宜。”

虽然编码通常比一个程序员单独工作更快地完成,但是整体程序编写时间(程序员数目 × 花费的时间)增加了。管理者需要在工作更快的完成以及缩减测试和调试时间和更高的编码成本之间平衡。这些因素的相对权重在不同的项目、不同的任务之间也不同。对于那些程序员没有完全理解的任务上,程序员期待更多的创造性,挑战,以及 高复杂度,此时使用结对编程最有帮助。 在简单的,程序员都完全了解的任务上,结对编程导致生产力的净下降。

在两个程序员工作时,两个程序员之间传递着知识。他们分享关于系统细节的知识,并且互相学习编程技巧。 新的员工很快地获得团队的习惯,并学习到系统的细节。 “混杂结对编程”,即每个程序员轮流与团队中的所有其他程序员结对编程,而不是仅与某个程序员编程,使得系统的知识在整个团队中传播,减少了程序员离开团队带来的风险。

结对编程通常会带来纪律和时间管理的提升。程序员在与结对的伙伴一同工作时,不太会忘记编写单元测试,花时间上网或处理个人电子邮件, 或偷工减料。结对的伙伴“让他们保持诚信”。 人们更不愿意打断两个结对编程的人,而单独工作的人却容易被打断。

其他的收益据报告包括提高士气以及在代码正确性上更大的信心。

在学术圈里,结对编程也是争议的。其原因是过往学术期刊所发表的结对编程实验,基本上其他学者很难让重复实验核对。所以很多结对编程实验只有原作者才真正了解结果。可是,2013年Giri 和Soni 重复了在2006年Kim Man Lui所报告的结对编程实验 而实验结果也是一致。此次重复实验标记着结对编程研究的里程碑

远程结对编程,也称作虚拟结对编程或分布式结对编程,是指两个程序员不在同一地点,通过协同编辑器,共享桌面,或远程结对编程的IDE插件进行的结对编程,。远程结编程引入了一些在面对面的结对编程中不存在的困难,例如协作的额外时延,更多的依赖“重量级”的任务跟踪工具,而不是“轻量级”的索引卡片,以及没有口头交流导致的在类似谁“控制键盘”问题上的混乱和冲突

许多任务具,例如Eclipse有插件支持远程结对。有些团队尝试使用VNC和RealVNC,每个程序员使用他们自己的计算机。 其他人使用基于文本的GNU Screen的多显示模式。苹果公司的Mac OS X包含内建的屏幕共享应用。

在乒乓结对编程中,观察者编写失败的测试用例,驾驶者修改代码以通过该用例,观察者编写新的单元测试用例,等等。这个循环持续到观察者能不写出失败的测试用例为止。但是这种方法比估计的计划要花更多的时间。

相关

  • 卢·贾里格亨利·路易斯·贾里格(英语:Henry Louis Gehrig,1903年6月19日-1941年6月2日)是美国职棒大联盟史上最伟大的一垒手,职棒生涯都效力于纽约洋基。贾里格生涯以稳定性高、不易受伤著
  • 葡萄糖淀粉酶葡萄糖淀粉酶是一种酸性的单链外切型糖苷水解酶,不仅能催化淀粉水解为葡萄糖,还能从淀粉糖链的非还原末端 (即不可以形成半缩醛的羟基) 切下葡萄糖分子。葡萄糖淀粉酶目前已在
  • 石龙子科石龙子泛指石龙子科(Scincidae)的蜥蜴。石龙子共有1300多种,是仅次壁虎的蜥蜴。 石龙子和蜥蜴科大致相似,但大多数物种没有明显的颈部,且它们的腿相对较小。通常情况下,石龙子的运
  • 艾力克斯 (艺人)艾力克斯(1972年10月29日-),本名钮诗贻,祖上系满州钮祜禄氏,台湾男艺人。妻为台湾女艺人李咏娴。他是原台湾男子团体三片吐司成员。毕业于美国加州大学洛杉矶分校心理学系,与李咏娴
  • 蒙脱石散蒙脱石散(Diosmectite),俗称“思密达”(Smecta),是一种用于急性和慢性腹泻的治疗的药物,含双八面体蒙脱石微粉。 蒙脱石散具有层状结构与可塑性,电荷为非均匀分布,这些特性使其可以非
  • 堂安律堂安律(1998年6月16日-),日本足球运动员,司职中场,现时效力德甲球队比勒费尔德,日本国家足球队成员。堂安律在1998年6月16日出生于日本兵库县尼崎市,他在小学时代就已经在较为职业的
  • 梅莉娜·罗伯特-米切梅莉娜·罗伯特-米切(法语:Mélina Robert-Michon,1979年7月18日-)是一名法国铁饼运动员。她是2013年世界田径锦标赛和2016年夏季奥林匹克运动会的银牌得主以及国家纪录保持者。
  • 威尔克斯县 (佐治亚州)威尔克斯县(英语:Wilkes County)是美国乔治亚州东北部的一个县。面积1,228平方公里。根据美国2000年人口普查,共有人口10,687人。县治华盛顿(Washington
  • 凯莉·布鲁克凯莉·布鲁克(英语:Kelly Brook,1979年11月23日-),原名凯利·安·帕森斯(Kelly Ann Parsons),出生在英国肯特郡罗切斯特,是英国模特、女演员、《花花公子》女郎,还是泳装设计师和电视节目主持人。曾一度作为《英国达人》的评审。她在英国因作为模特儿闻名,2015年在美国参演NBC情景喜剧《幸福大家庭》。她还出现在各种电视节目中,包括《舞动奇迹》(2008)、《英国达人》(2009)、《名人果汁》(2012-2013)、《不是我,是你》(2016)和《大话女人》(2018)。她
  • 泽维尔·亚历山大·泽维尔·亚历山大(英语:Xavier Alexander,1988年10月19日-)为美国职业篮球运动员,司职得分后卫。亚历山大生于美国森林公园,于年轻时考进奥克拉荷马州的米德韦斯特城中学(英语:Midwest City High School),并以前辈的身份录得场均23.0分和10.0个篮板,协助校队在2006/07赛季做出27-1的战绩,而他弹性与协调性优异195公分更是NBA标准侧翼球员水准。亚历山大在佐治华盛顿大学的首个赛季参与23场比赛,并录得场均4.0分,3.8篮板,1.3助攻,1.1抢断,