结对编程

✍ dations ◷ 2025-07-04 13:12:30 #结对编程

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

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

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

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

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

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

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

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

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

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

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

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

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

相关

  • 休·格兰特休·约翰·曼格·格兰特(英语:Hugh John Mungo Grant,1960年9月9日-),台湾媒体常称作休葛兰,是英国著名演员及电影监制,多次扮演英国中上流社会出身的角色。1987年凭借《莫里斯的情
  • 王通 (隋朝)四配 颜回 · 孟子 · 曾参 · 孔伋日本 藤原惺窝 · 林罗山 · 室鸠巢 新井白石 · 雨森芳洲朝鲜 薛聪 · 权近 · 吉再 · 安珦 · 李穑 李滉 · 王仁 · 李
  • 王克英王克英(1937年12月-),男,汉族,湖南临湘人,中华人民共和国政治人物。王克英毕业于华中工学院动力工程系水力机械专业。1960年加入中国共产党。1983年起历任长沙市人民政府副市长、市
  • 周逸衡周逸衡(1949年-),曾任中原大学企业管理系系主任、尹士豪主任秘书,及中山企管教授、国立嘉义大学管理学院院长、国立中山大学副校长。现任华文商管教育认证组织(前华文商管学院认
  • 布伦瑞克-沃尔芬比特尔亲王国布伦瑞克-沃尔芬比特尔亲王国(德语:Fürstentum Braunschweig-Wolfenbüttel,英语:Principality of Brunswick-Wolfenbüttel)是布伦瑞克-吕讷堡公国(Duchy of Brunswick-Lüneburg)的一个分支,在历史上经历多次分合。韦尔夫家族的王朝统治布伦瑞克-沃尔芬比特尔,直到1806年神圣罗马帝国解体。1815年,依维也纳会议的结论,改由布伦瑞克公国继承。神圣罗马帝国皇帝腓特烈二世在1235年8月21日将布伦瑞克-吕讷堡公国名
  • 1,10-二溴癸烷1,10-二溴癸烷是一种有机溴化合物,化学式为C10H20Br2。它可由1,10-癸二醇和氢溴酸的反应制得。它和胺反应可以得到季铵盐,如和吡啶反应,得到相应的二吡啶�二溴化物。它和叠氮化钠在DMF中反应,得到1,10-二叠氮基癸烷。
  • 威廉·史密斯 (自行车运动员)威廉·史密斯(英语:William Smith,1893年-1958年),南非男子自行车运动员。他曾代表南非参加1920年夏季奥林匹克运动会自行车比赛,获得男子双人自行车赛银牌和男子团体追逐赛铜牌。
  • 丹努什短程弹道导弹600公里-500公斤战斗部丹努什短程弹道导弹(梵语:धनुष,意思指“弓”)是印度大地战术导弹(英语:Prithvi (missile))(Prithvi missile)演变出来的一种对地或反舰的舰射弹道导弹,也是全球第一款以军舰作为发射平台的弹道导弹。该导弹首次测试在2007年进行,并分别在2012年10月,2013年11月23日、2015年4月9日和2015年11月24日从印度海军的苏巴德拉号巡逻艇(Subhadra)在孟加拉湾成功试射。丹努什具备最高750公里范围的核打击能力,它的出现使印度具备
  • 谢伦伯格走私毒品案谢伦伯格走私毒品案是中华人民共和国检察机关指控加拿大公民罗伯特·劳埃德·谢伦伯格(Robert Lloyd Schellenberg)在中国走私毒品的案件。检方指控,2014年11月,谢伦伯格企图将净重222.035千克的222包冰毒自大连走私到澳大利亚,察觉事情有变后,谢伦伯格在大连周水子机场登机,打算逃往泰国曼谷。飞机中途在广州白云机场停靠时,谢伦伯格被中国警方逮捕。谢伦伯格最初辩称自己是被陷害的无辜游客。2018年11月20日,大连市中级人民法院一审判决,以走私毒品罪判处谢伦伯格有期徒刑15年、没收
  • 米甸米甸 (天主教译为米德杨)(/ˈmɪdiən/; 希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-family:"SBL Hebrew","SBL BibLit","Taamey Ashkenaz","Ezra SIL","Ezra SIL SR","Frank Ruehl CLM","Taamey Frank CLM","Keter Aram Tsova","Taamey David CLM","Kete