结对编程范文(精选3篇)
结对编程 第1篇
XP中非常重要的实践之一是结对编程(Pair-Programming)。指的是两位程序员并肩坐在同一台电脑前,共同探讨设计方案、共同设计算法、共同编写程序代码、共同完成各种测试。简单地说就是两个人坐在同一台计算机前面,一个称为驾驶者(Driver),负责代码的键入;另外一个称为领航员(Navigator),负责其他工作,包括随时观察驾驶员的工作情况,发现并纠正其操作性和策略性失误等。
1 结对编程分析
1.1 结对编程优点分析
1.1.1 减少风险
风险会使大多数团队停滞不前,减少风险的最佳方法是确保团队中的每个人都完全熟悉系统的所有部件以及对系统的所有变更。因此,技术讲解和设计文档很有用,但对于大多数快节奏的项目,它们并不能很好且迅速地传播知识。研究表明传播知识最有效的方法是让知道代码的人与不知道代码的人一起解决问题。
1.1.2 使团队生产效率更高
1+1>2。首先,一个人的编程,平均很难实现1>80%1的工作效力。但是在和同伴一起工作时,必须保持思维一直高度集中,所以平均都可以达到1>80%1的个人效力,一个人有了想法,首先要表达出来,让自己的同伴理解,经过深刻的讨论,一致认可之后才开始编写代码。编写代码时至少有一个人一直在复查代码,使得出错几率就降低,减少了bug的产生,对代码的质量起关键作用。另外,由于两个人的思想汇集,能创造了很多新编程算法或结构重用等。
1.1.3 Pair可以打造出最佳的合作团队
通过结对,团队可以在最短的时间内完成磨合。Pair很好的促进了团队的沟通交流,经常一起合作Pair的员工,彼此了解、熟悉,很多都是工作和生活上的好友。在这样的团队里,大家很乐意互相协助,一起分享知识、分享快乐,打造出最佳的合作团队。
1.2 结对编程遇到的问题分析
1.2.1 由于人员的变动,来了新成员
在这种情况下,前期确实会对其搭档产生一定的影响,但是磨刀不误砍柴工,通过结队编程,可以最快的使新成员进入状态,通过后期的高效工作完全可以弥补前期的消极影响。
1.2.2 后面坐着的人跟不上写代码的人的思路,或不习惯写代码人的代码风格
结队编程不仅仅是一起写代码,在写代码之前更需要一起对需求进行探讨,一起讨论设计方案,达成共识之后再一起写测试用例,一起编码,一起测试。但在开发过程中要严格遵循事先定好的代码规范。这样才能实现XP强调的“代码共同拥有”。
1.2.3“我的搭档太差劲”等因盲目自大导致的问题
这是一个极其严重的问题,整个团队的心理状态和团结精神都处于极大的危险之中。而最好的解决办法就是安排那位“自大狂”与几位公认的好搭档合作,让他感受一下结对编程技术的价值和高效率,使他能由此认识到结对编程的好处,以便以后全身心地投入到工作中。
1.2.4“我的搭档太聪明”等因盲目自卑而导致的问题
这种自卑问题相当容易被发现。此时可以让那位缺乏自信心的成员担任驾驶员角色,因为驾驶员必须全力集中在手里的工作上,这样可以让那位缺乏自信心的成员更主动一些,并安排一位个人技能良好的团队成员做这种人的领航员,领航员可以赞扬驾驶员的每一个好主意和每一个好做法,有助于帮助他树立自信心。
1.2.5 什么情况下结对编程行不通
1)造成结对编程无法正常工作的一些情况:
2)不情愿的配合;
3)拒绝别人的意见,甚至攻击对方;
4)小心翼翼有意见不敢提;
5)怕别人觉得自己笨不敢问问题;
当然这些问题跟管理以及个人性格有关系,最好的方式就是不让他们结对,或者让他们跟别的人结对。
1.2.6 Pair团队做同一工作的效率问题
表1为来自某印度技术公司的项目统计数据。
1.3 结对编程的几条准则
1.3.1 用编码规范来支持结对编程
如果两个人整天把时间浪费在争论代码风格的问题上,那么结对编程就不可能发挥它的威力,应该尝试对风格进行标准化。
1.3.2 不要让结对编程变成旁观
不掌握键盘的那个人应该主动参与到编程当中,他应该分析代码,提前思考接下来的代码应该做些什么,对设计进行评估,并对如何测试代码做出计划。
1.3.3 有规律地对结对人员和分配的工作任务进行轮换
结对编程的好处在于能够让不同的人熟悉系统的不同部分,有规律地进行轮换有助于知识的互相转播有些专家建议尽可能经常进行人员轮换,甚至每天进行。
1.3.4 鼓励双方跟上对方的步伐
要是其中一个人相对走得太快的话,那就会大大限制了其结对搭档的作用,速度太快的人需要放慢步伐。否则这对组合应当被拆开,然后和其他人重新组合。
1.3.5 搭档间在设计、方向、技术等发面意见不合发生冲突
此时尽量由领航员把引起冲突的问题记在一张卡片上,过一会(如半小时后)再重新探讨,这样做可以暂不干扰驾驶员的思路,如果两位搭档间的意见始终不能统一,把问题上交给团队的队长/教练/经理去评判。
2 结对编程方案改进
1)编程三人组。一个人守护键盘,一个人守着“黑板”,最后一个人则代表用户在“大声地思考着”。2)两位搭档来自不同的学科。编程搭档不必非得由两位代码开发人员组成。3)尽量给驾驶员留时间去发现和纠正他自己的错误,尽量适应自己的搭档。4)避免新手组合。用专家中级程序员、专家新手组合方式,两个人中至少一个人有结对经验。5)项目开发过程中要营造一个可以能畅所欲言、和谐平等、相对民主的开发环境,一种相互交流、相互研究、共享代码、共享知识的氛围,创建一种共同成长、开放共享的学习型组织。
3 结对编程实践
如表2,表3所示:
1)需求分析中,需求调研和需求分析进行轮流交换,轮流交换至少是三个以上的人进行互换,而不是两两互换;2)概要设计中,需求分析到概要设计也进行轮流交换;3)详细设计中,概要设计到详细设计再进行一次轮流交换;4)编码实施启动后,详细设计到编码的交换采用两两交换,这个时候最好不要再采用轮流交换。
摘要:结对编程(Pair Programming)是极限编程(Extreme Programming,简称XP)的十二个实践之一。它指的是两个软件开发人员共用一台计算机,其中一个人负责具体细节工作,而另一个人关注整体,但这两个人的角色可以随时互换。这是一种轻量、高效、低风险、柔性、可预测、科学而充满乐趣的软件开发方式。结对编程可改进设计质量、减少程序缺陷、降低人员风险、提高技术技能和团队合作精神。
关键词:软件工程,敏捷方法,极限编程,结对编程
参考文献
[1]Williams L,Kessler R.Pair Programming Illuminated[M].北京:机械工业出版社,2004.
[2]Marchesi M,Succi G,Wells D,et al.Extreme Programming Perspectives[M].北京:电子工业出版社,2004.
[3]白慧冬.交换编程——结对编程的延伸实践[J].程序员,2006(12):78-81.
结对编程的误区 第2篇
对于那些知道如何结对编程的程序员来说,这种模式很棒,很高效。
但是你不能指望在两个程序员面前摆台电脑,就指望他们一开始就做得很棒。结对编程需要学习,程序员需要知道实施者(敲键盘的人)和领航员之间的区别。下面来看看些细节。
在结对编程中,我遇到了一些误区,列在下面。
一、领航员误区
1. 发号施令者
喜欢发号施令的人总是对敲键盘的人说:“到末行,加个反括号,然后”。他不去关注解决方法和下一步该怎么做,而过度关注一些编程细节。
事实上,他希望他自己来掌控键盘。所以当你碰到一个喜欢发号施令的人,那么将键盘交给他吧,转换领航员的角色。
2. 拼写纠错者
拼写纠错者坐在你旁边,纠正你输入的每个错误字符。当然,他没有时间来真正的进行导航。
和纠错者商量一下,当他给你纠错的时候让他请你喝一杯咖啡(或者任何你想要的东西)。
3. 吹毛求疵者
吹毛求疵者会指责你写的每行代码。当他的意见正确时,他会一意孤行,不用你已经写好的代码,而完全照着他的想法。
就如自由爵士音乐人都是复用其他乐队成员的音符,来构造成一首曲子一样,好的结对编程也应基于现有的基础上进行推进。
试着转换角色,也许吹毛求疵者就会变成一个目中无人的人。
4. 默不作声者
默不作声者是那些几乎不发表意见的人。他仅仅坐在那里看着你工作。
试着问下他对你的方法有什么意见,或者问他下一步该写什么测试代码。
5. 心不在焉者
心不在焉的人企图让你分心,而不是提供给你有建设性的意见,帮你解决问题。
那么让他离开吧,比起一个让自己分心的人而言,不如一个人编程。
二、实施者误区
1. 深藏不露者
深藏不露者仅仅自己敲着代码而不告诉别人他在做什么,
领航员不得不靠自己去弄懂代码。关于该用什么方法,该选择哪种设计,领航员和实施者之间完全没有交流。
领航员需要问问深藏不露者关于他的计划或想法。
2. 目中无人的人
目中无人的人通常忽略领航员的所有建议,大多数是因为他们觉得自己的想法或编程技能更胜一筹。
当碰到一个目中无人的人时,立即停止结对编程吧,开始下一个任务吧。自大的人往往也不会是个好的领航员。他们很可能变成发号施令者或是吹毛求疵者。
3. 不知所措的人
不知所措的的人往往不习惯结对编程,非常紧张,不能掌控全局。
确保自己的领航员角色做到最好。小心的提出意见,对于不知所措的人主要给予鼓励。
但是,大多数程序员开始都是这种情况。所以,不要对他们的结对编程期望太高。让他们首先成为一个领航员,或者让能够很好的处理人际交往问题的领航员在他们旁边。
4. 跳跃性很大的人
跳跃很大的人喜欢在代码中进行大范围的跳跃,这样领航员不知道进行到哪里了。
领航员需要让他慢下来,问他关于他的计划,并确保自己比他知道更多的快捷键。
5. 不熟悉工具的人
不熟悉工具的人不知道开发环境的快捷键,效率非常低。
交换角色吧,让他看看你的技巧。或者打印一张印有快捷键的cheat sheet。
我相信还有其他的误区,如果你有什么想法请写在评论留言吧。
关于译(作)者:
基于C#的结对编程的分析和设计 第3篇
相反的,结对编程由于有了双方的合作,同一段代码被反复检查,保障了代码的可读性和可维护性,减少了修改的成本。结对编程时,由于对方的监督,带给编程者潜意识的压力,让编程者不得不思想高度集中,这就提高了编程的效率。两人合作时可能对问题产生不同的看法,这就迫使程序员频繁的交流意见,加深了彼此对问题的了解。最终还会增强程序员的信心感和成就感。
该文的目的就在于为程序员提供这样一个高效的编程平台。下面将从总体架构设计,主要模块和设计方案等三个方面具体阐述结对编程的设计思想。
1 总体架构设计
采用Visual Studio 8.0以及SQL SERVER 2005实现结对编程的主要功能。整体的架构则可以从硬件和软件两个方面来描述。
从硬件的角度来看,需要准备一台电脑,两个鼠标,两个键盘,两个显示器以及一个共享器。两个显示器可以通过共享器连接同一台电脑上,以方便程序员同步地接受程序编写的进度。主机上还需配套两人份的鼠标和键盘,这样程序员就可以单独地对程序进行编写和修改。
如果从软件的角度考虑,可以按照用户操作的顺序来划分。首先是程序员的身份验证。在程序员输入用户名和密码后,系统通过与数据库中信息的比对来判断是否为会员用户。此处登录成功是指结对编程双方的登录信息都为正确,否则,视为登录失败。
与之相配套的是注册界面,和其他注册不同,注册界面提供了一个新的内容:从题库中随机地抽取固定数量的选择题,规定为必做项目。程序员完成后提交给系统,系统算出程序员的得分,满分为一百分。系统根据程序员的得分划分等级。结对双方在登录之后,系统自动调用数据库中所存等级进行相容性分析,大致判断是否适合合作,并给出建议。程序员点击按钮开始编程,系统就进入倒计时状态,规定时间到达后强制交换角色。程序员也可以主动提出交换请求。
2 主要模块
2.1 相容性分析
两个程序员合作之前,需要了解双方的编程风格,编程能力和性格倾向。如果性格都是内向,就可以初步断定为不适合合作编程,这就是所谓的相容性分析。为了保证结对编程的效率,在开始编程之前,系统给出结对双方相容性测试结果,让双方了解是否适合结对,以避免程序编写效率的低下。
注册中提供的相容性分析问卷还包含程序员要完成的项目的难度,这也是决定相容性分析结果的重要因素。一般来说,项目难度较高时,适合两个编程能力都突出的程序员合作完成,这种搭配可以提高双方效率。中等难度的项目可以让一个能力较强和一个能力中等的合作,这样可以提高能力中等的程序员的水平。如果项目简单,可以让能力都一般的合作,完成任务的同时积累双方的编程经验。
2.2 角色转换
当负责键入代码的驾驶者在编程时出现低级的错误或自己并未察觉的方向性的偏差时,监看的导航员可以点击角色转换,纠正错误,写入正确的代码。此外,若驾驶者工作时间过长,可能会出现过度思考并影响观察力和判断力。若驾驶者有意转换,就可点击角色转换按钮,让领航员接手编程的任务。
2.3 强制转换
由于每个人每天的有效工作时间只有3-4个小时,因此在结对编程中需要强调的一点是限制程序员的工作时间。系统给定固定的时间,程序员们也可以根据自己的需求在系统设置中修改这个时间。程序员在编程时,系统将处于后台运行状态,只留下悬浮窗供程序员了解剩余时间。在系统强制转换之前,会给出提示,若程序员不同意,系统将在5分钟之后再给出提示。
3 设计方案
3.1 登录和注册
事先在SQL SERVER 2005中建立名为pair的表,用于存放注册信息。在Visual Studio 8.0操作平台上,调用using System.Data.SqlClient命名空间,建立与数据库的连接,并对数据库进行读写操作。注册模块中,拖动textbox等控件以便让程序员填写用户名,密码以及相容性分析的问卷题目。下面是部分代码:
3.2 鼠标和键盘的切换
结对编程最为核心的设计就是设备的启动和禁用。程序员通过主动交换或强制交换两种方式转换角色。转换之后,导航者的鼠标和键盘被禁用,驾驶者的变为有效状态。对设备的操作需要使用到微软所提供的与驱动程序相关的API函数,这些需要使用的函数就封装在Hardware类中。使用[DllImport("user32.dll",CharSet=CharSet.Auto)]语句,用非托管动态链接库作为静态入口点公开。设备禁用的实现思想主要是通过managementobjectsearcher类查找微软提供的设备类并获得所要禁用的鼠标或键盘的设备名称,获取控件绑定到的窗口句柄,并清理非托管的资源。最后将设备的状态置为false。部分代码如下:
4 存在的问题及可能的方向
结对编程技术能够为两个程序员提供合作编程的平台,保证代码的高质量,增强程序员对于编程的兴趣。但是,由于程序员并不是总能方便的约好时间和地点一起编程的,这就导致了空间和时间上的局限性。
现代的网络通信技术较为发达,异地结对编程不失为一个很好的发展方向。程序员们不需要并排坐在一起使用同一台电脑,而是借助互联网在距离较远的电脑之间远程通信。面对面的交流也可以通过视频,语音,白板等方式来替代。使用异地结对编程,程序员不用出门到指定的地点也能够远程地结对编程。
参考文献
[1]窦万峰.软件工程方法与实践[M].北京:机械工业出版社,2009.
[2]Laurie Williams Robert Kessler.结对编程技术[M].杨涛,译.北京:机械工业出版社,2009.